Beruflich Dokumente
Kultur Dokumente
12
ARCHIVOS – BASES DE DATOS
Hasta ahora, en todas las aplicaciones que se han considerado, los datos se han
introducido de manera interactiva a través del teclado durante la ejecución del programa.
Con este método si se quieren los mismos datos en otra aplicación se deben volver a
ingresar. Este método no es deseable cuando se necesitan grandes cantidades de datos.
Por ejemplo, requeriría mucho tiempo para una empresa grande, volver a escribir los
datos de sus empleados cada vez que un programa deba usar este información para una
aplicación concreta. Los archivos proporcionan un medio eficiente para almacenar datos
de manera que puedan ser utilizados por varios programas.
BASES DE DATOS
Los componentes en la pagina Data Acces, la pagina ADO o la pagina InterBase de la
Paleta de componentes permiten que nuestras aplicaciones lean desde y escriban a
bases de datos. Los componentes en la pagina Data Acces usa El Motor de Base de
Datos de Borland (BDE) para acceder a la información de la base de datos que esta
disponible a los controles en su interfaz de usuario. Los componentes en la pagina ADO
usan Objetos Data ActiveX (ADO). Los componentes en la pagina InterBAse acceden a
una base de datos interBase directamente.
ARCHIVO
Es una estructura de datos formada por una serie de componentes, que son todos del
mismo tipo. Es una colección de datos relacionados, normalmente almacenados en disco
y referenciados por un nombre simple.
Un archivo es una colección de datos del mismo tipo que con un título o nombre se
almacenan o graban en dispositivos externos al computador tales como: Discos,
diskettes, cintas magnéticas, etc.
Se suele usar el termino Archivo externo para referirnos a un archivo almacenado
permanentemente, separado de la ejecución del programa.
CLASIFICACION
1) Archivo de texto: Es un archivo de caracteres que esta también divido en líneas.
2) Archivo Binario: Es un archivo que se crea dentro de un programa para ser leído por
otro programa o por el mismo programa mas adelante; estos archivos se escriben en la
representación interna de la maquina.
Los datos de un archivo pueden ser leídos y utilizados por otros medio.
1
Para operar con un archivo hay que referirse a él mediante un nombre. Las operaciones
básicas para usar un archivo son:
1) Declaración del manipulador interno del archivo, dándole un nombre y otras
especificaciones.
2) Asignación del manipulador interno a un archivo externo.
3) Apertura del archivo para el modo de proceso que se iniciará.
4) Lectura o escritura de los datos desde o en el archivo (según la apertura)
5) Cierre del archivo.
I. ARCHIVOS DE TEXTO
Un archivo de texto es una secuencia de caracteres imprimibles (código ASCII) que
fluyen entre el programa y un dispositivo o el disco.
A demás de los caracteres ordinarios, en un archivo de texto se pueden escribir
caracteres de fin o cambio de línea [Eoln “end of line”] constituidos por un Retorno de
Carro (CR) y un Avance de Línea (LF). Para conseguir un delimitador pulse Enter. Un
archivo de texto se puede crear con cualquier editor de texto ( Bloc de Notas, WordPad,
Win Word o el editor de DELPHI).
1) Declaración de un archivo
Definir una variable de tipo archivo Text.
Formato:
Var
VarArchivo: TEXT;
Assign(archA, ‘a:arch1.txt’)
El prefijo de la unidad se podrá omitir cuando el archivo que se va a leer esta en la
unidad por omisión.
2
3) Abrir un archivo para Lectura
Formato
Reset(VarArchivo);
Para leer información de un archivo desde un programa, utilice una instrucción Assign y
una instrucción Reset.
Ejemplo: Assign(archA, ‘arch1.txt’);
Reset (archA);
7) Lectura en un Archivo
Luego de abrir un archivo para lectura con Reset, utilizaremos Read, o bien ReadLn
para leer datos de un archivo.
Formato:
Read(VarArchivo, V1, V2,….);
3
ReadL(VarArchivo, V1, V2,…..);
Donde: V1, V2,… son variables de tipo Char, integer, real o string.
8) Cerrar un Archivo
Formato
Close(VarArchivo);
2. Asociación
Sintaxis
3. Apertura
Escritura: ReWrite(F),
Lectura: Reset(F);
Añadir: Append(F);
4. Lectura de Datos
Procedimiento: Read
Procedimiento: RedLn
5. Escritura de Datos
Procedimiento: Write
Procedimiento: WritLn
6. Delimitador de Dato
Retorno de Carro + Avance de línea
Eof(F)
Eoln(F)
7. Otras operaciones
4
Función de tipo lógica que devuelve True si el archivo existe o False en caso
contrario.
Las siguientes dos operaciones requieren que el archivo no este abierto, cerrándolo si es
necesario antes de llamar al procedimiento:
Object TStringList
Métodos:
LoadFromFile: Lectura del texto de un archivo
SaveToFile: Escritura del texto en un archivo.
Elaborar un programa que guarde en el archivo abc.txt las letras del alfabeto. Siga los
siguientes pasos:
1. Haga clic en el comando New / Other… del menú File para crear un nuevo
Proyecto.
2. En el dialogo Nuevos Elementos New Items situese en la carpeta Other Files y
haga doble clic sobre el icono Text.
3. Digite el siguiente programa:
program pABC;
uses
SysUtils, Dialogs;
var
NomArch:String[30];
Fich: Text;
car:char;
begin
NomArch:=InputBox(‘Crear Archivo’,’Ruta y Nombre: ‘,’d:\ing. zabalaga\abc.txt’);
Assign(Fich,NomArch);
Rewrite(Fich);
writeln(Fich,’Abecedario’);
for car:=’A’ to ‘Z’ do
write(Fich,car,’ ‘);
Close(Fich)
5
end.
1. Sitúese en el menú File y haga clic en el comando Save As…
2. En el cuadro Nombre de Archivo digite: pABC.DPR donde la extensión debe ser
introducida explícitamente.
3. Luego debemos cerrar el archivo para que sea reconocido como un archivo de
proyecto seleccionando la opción Close All del menú File.
4. Vuelva a abrir el Proyecto haciendo clic en el menú File a través del comando
Open Project…
Al ejecutar el programa pulsando la tecla F9 se mostrara la siguiente ventana:
Ubique el archivo abc.txt en la carpeta ing. Zabalaga y haga doble clic sobre él para
revisar su contenido:
6
var
arch:text;
i:integer;
cad:string;
begin
showmessage('Uso de Rewrite');
assign(arch,'d:\ing. zabalaga\arhivos\random.txt');
rewrite(arch); //añade datos al archivo
randomize;
for i:=1 to 10 do
writeln(arch,trunc(10*random));
close(arch);
showmessage('Lectura del archivo mediante Reset');
cad:='';
assign(arch,'c:\ficheros\random.txt');
reset(arch);
end.
1. Sitúese en el menú File y haga clic en el comando Save As…
2. En el cuadro Nombre de Archivo digite: pRand.DPR donde la extensión debe ser
introducida explícitamente.
3. Luego debemos cerrar el archivo para que sea reconocido como un archivo de
proyecto seleccionando la opción Close All del menú File.
4. Vuelva a abrir el Proyecto haciendo clic en el menú File a través del comando
Open Project…
Al ejecutar el programa pulsando la tecla F9 se mostrara la siguiente ventana:
7
Al presionar OK se generaran los numeros aleatorios en el archivo. Posteriomente
aparece el cuadro de dialogo:
Los datos del archivo son leidos y almacenados en la cadena cad, la cual finalmente se
muestra:
8
3) Programa Triangulo de Floyd
Elaborar un programa que guarde en el archivo floyd.txt los numeros correspondientes
al Triangulo de Loyd.
program Floyd;
uses
dialogs, sysutils;
var
sN,ruta:string;
n:integer;
arch:text;
procedure tFloyd(n:byte);
var
i,j,r:integer;
begin
writeln(arch,'El triángulo de Floyd para n = ',n,' es: ');
writeln(arch,' ');
r:=0;
for i:=1 to n do
begin
for j:=1 to i do
begin
r:=r+1;
write(arch,r:4,' ');
end;
writeln(arch);
end;
close(arch);
end;
9
begin
ruta:=inputbox('archivo','nombre=','d:\ing. zabalaga\archivos\floyd.txt');
assign(arch,ruta);
rewrite(arch);
sN:=inputbox('ingrese n','n = ','5');
n:=strtoint(sN);
tFloyd(n);
showmessage('Archivo Generado...')
end.
Luego de digitar el nombre del archivo, ingresar el total de filas del triangulo:
10
4) Programa Matriz
Elaborar un programa que grabe en el archivo matriz.txt los elementos de una matriz
rectangular así como su dimension.
program matriz;
uses
dialogs, sysutils;
var
val,NomArch:string;
m,n:byte;
arch:text;
procedure Matrix(m,n:byte);
var
i,j:byte;
r:real;
begin
writeln(arch,'Dimensión: ',m,'*',n);
showmessage('Ingrese la matriz'+inttostr(m)+'*'+inttostr(n));
for i:=1 to m do
begin
for j:=1 to n do
begin
val:=inputbox('fila'+inttostr(i),'a[' +inttostr(i)+','+inttostr(j)+']=','1.0');
r:=strtofloat(val);
write(arch,r:7:2,' ');
end;
writeln(arch);
11
end;
close(arch);
end;
begin
NomArch:=inputbox('archivo','nombre=','d:\ing. zabalaga\archivos\matriz.txt');
assign(arch,NomArch);
rewrite(arch);
val:=inputbox('matriz m*n','m=','1');
m:=strtoint(val);
val:=inputbox('matriz m*n','n=','1');
n:=strtoint(val);
Matrix(m,n);
showmessage('Matríz generada....')
end.
digite el nombre del archivo y haga clic en el botón OK. A continuación se le solicitara la
dimensión de la matriz rectangular a leer, introduciendo primero el total de filas y luego el
de columnas. Finalmente, debe ingresar cada elemento de la matriz.
12
, etc.
13
Control Propiedad Valor
Form1 Caption Generador de n Números
Position poScreenCenter
Label1 Caption Nombre de archivo:
Label2 Caption Total de números:
Edit1 Text ‘‘
Edit2 Text ‘‘
Button1 Caption &Generar
Button2 Caption &Salir
14
end;
closeFile(f);
ShowMessage('Archivo generado...');
end;
15
F: TextFile;
2. Asociación
AssignFile(F, NomArch);
3. Cerrar un archivo
CloseFile(F);
16
F: TextFile;
Ruta: string;
17
AssignFile(F,Ruta);
Rewrite(F);
WriteLn(F,#9,#9,'Relación de Empleados');
WriteLn(F,'Código ',' Nombres Completos ',' Dirección ',' Teléfono');
CloseFile(F);
Edit1.SetFocus;
BitBtn1.Enabled:=False
end;
Asociemos un procedimiento al control Button1 accionado por el evento OnClick. Este
procedimiento copiara los datos actuales en pantalla al archivo, almacenándolos todos
en una sola línea además llama a la rutina SoloLectura para impedir hacer cambios en
los cuadros de edición. La instrucción Append añade datos a un archivo existente;
luego de usarla volvemos a cerrar el archivo.
procedure TForm1.Button1Click(Sender: TObject);
begin
AssignFile(F,Ruta);
Append(F);
Write(F,Edit1.Text,#9);
Write(F,Edit2.Text,#9);
Write(F,Edit3.Text,#9);
Writeln(F,Edit4.Text);
CloseFile(F);
ShowMessage('Registro Almacenado..');
Button1.Enabled:=False;
SoloLectura(True);
Button3.SetFocus
end;
Para salvar un nuevo registro haga doble clic en el control Button3 accionado por el
evento OnClick y luego digite lo siguiente:
procedure TForm1.Button3Click(Sender: TObject);
begin
SoloLectura(False);
Edit1.Clear;
Edit2.Clear;
Edit3.Clear;
Edit4.Clear;
Edit1.SetFocus;
Button1.Enabled:=True;
BitBtn1.Enabled:=True
end;
Finalmente, digite el código para abandonar la aplicación en el evento OnClick del
control BitBtn2:
procedure TForm1.BitBtn2Click(Sender: TObject);
18
begin
Close
end;
Ejemplo:
Type
TFicha = Record
Nombre: String [25];
Edad: Byte;
Telefono: String [7];
End;
Var
ArchAgenda: File of TFicha;
2. Asociación
AssignFile (varArch, RutaNomArch);
19
a) Rewrite (varArch)
Crea un archivo y a continuación lo abre para escritura. Puede perder la información
actual.
b) Reset(varArch)
Se utiliza solo cuando un archivo ya existe, se puede establecer el modo de apertura
para solo leer, solo escribir o realizar ambas operaciones (predeterminado)
FileMode
Variable a la que se asignara uno de los siguientes valores mostrados en la tabla
antes de abrir el archivo con Reset
Read(VarArch, ListaDatos)
Lee uno o más datos del archivo
FilePos(VarArch)
Devuelve un numero “p” indicando la posición o valor actual del apuntador. 0≤p≤n-1
Seek(VarArch, Pos)
Ubica el puntero en una posición permitida para poder leer y escribir en cualquier
orden y no necesariamente de forma secuencial.
FileSize(VarArch)
Total de componentes o elementos del archivo (tamaño del archivo)
7. Otras operaciones
20
a) FileExists(cNomArch)
Devuelve true si el archivo especificado existe.
b) FileSearch(cNomArch, cListaDirectorios)
Función que retorna una cadena conteniendo el camino completo donde ha
encontrado el archivo, incluyendo el nombre de éste. Si no se encuentra el archivo
el valor obtenido será una cadena vacía.
c) Errores de Archivo
En la apertura o escritura de un archivo pueden generar fallos, los que constituyen
una excepción.
ElnOutError
Se produce cuando una operación de trabajo de archivos no se puede llevar a
cabo con éxito. Esta excepción contiene un campo llamado:
ErrorCode
Código de error generado por el Sistema Operativo que nos sirve para determinar
que ha ocurrido.
e) DiskSize(Unidad)
Devuelve el tamaño total de una determinada unidad. Ver tabla para averiguar los
Valores de Unidad.
f) DiskFree(Unidad)
Retorna el espacio que queda libre. Unidad es un parámetro de tipo entero que
toma los valores:
0 Unidad actual
1 Unidad A
2 Unidad B
g) GetDriveType(cCaminoRaiz)
Devuelve el tipo de una determinada unidad. El valor de retorno será:
21
DRIVE_CDROM CD-ROM
DRIVE_REMOTE Remota, como una unidad de red.
DRIVE_RAMDISK Disco virtual o disco RAM
h) GetVolumeInformation
Recupera el nombre del volumen, el número de serie, sistema de archivos
Selección de la Unidad
Disponemos de los siguientes controladores:
a) Control TDriveComboBox
Se encuentra en la Pagina Win 3.1
Propiedades Comentario
Items Elementos existentes en la lista
ItemIndex Elemento seleccionado actual
TexCase Estado en que aparecerá la letra y nombre de
la Unidad
TCLowerCase: Predeterminado Minúsculas
TCUpperCase: Mayúsculas
Drive Contiene la letra de la unidad seleccionada
DirList Asocia una lista de unidades con una lista de
directorios
Eventos:
OnChange Se genera cada vez que el usuario modifique la selección actual
Componente SaveDialog
Muestra una ventana de dialogo modal para seleccionar los nombres de los archivos y
grabarlos. El diálogo no aparece en tiempo de ejecución hasta que éste es activado
mediante una llamada al método Execute. Cuando el usuario presiona el botón Guardar,
el dialogo se cierra y el archivo seleccionado es almacenado en la propiedad FileName.
Componente OpenDialog
Muestra una ventana de dialogo para seleccionar y abrir archivos. El dialogo no aparece
en tiempo de ejecución hasta que éste es activado mediante una llamada al método
Execute. Cuando el usuario hace clic en el botón Abrir, el dialogo se cierra y el archivo o
archivos seleccionados son almacenados en la propiedad Files.
22
Desarrollar una aplicación que guarde en el archivo Invent.dat la información
correspondiente a los libros de una biblioteca. Para cada obra se debe reunir la siguiente
información:
Código, Titulo, Autor, Editorial, Numero de ejemplares, Precio
Siga los siguientes pasos:
1. Proceda a crear una nueva aplicación
2. En el formulario coloque 6 etiquetas, 6 cuadros de edición y 4 botones
3. Modifique las propiedades de los componentes.
23
En la sección Type declare el TLibro con los campos indicados:
Type
Tlibro = record
Cod:string[6];
Tit:string[20];
Aut:string[30];
Edi:string[20];
Nej:byte;
Pre:real;
end;
Declaremos dos variables: Fich(archivo binario) cuyos componentes serán del tipo
TLibro y Lib para almacenar los datos de un libro en particular en la sección:
Var
Lib:TLibro;
Fich:File of TLibro;
24
begin
SaveDialog1.Filter:='Archivos de Datos(*.dat)|*.dat|Todos'+
'los archivos(*.*)|*.*';
SaveDialog1.FilterIndex:=1;
Savedialog1.InitialDir:='D:\ing. zabalaga\archivos\Ingreso libros';
SaveDialog1.DefaultExt:='*.dat';
If SaveDialog1.Execute then
begin
NomArch:=SaveDialog1.FileName;
AssignFile(Fich,NomArch);
Rewrite(Fich);
Button3.Enabled:=False;
Button2.Enabled:=True;
Edit1.SetFocus;
end;
end;
Programa ejecutándose:
2) Lectura de Libros
Desarrollar una aplicación que lea del archivo Invent.dat la información concerniente a
los libros de una biblioteca. Para cada obra se debe mostrar la siguiente información:
26
Par revisar la información de un archivo binario tendremos que diseñar otra aplicación,
pues al usar un editor para abrir el archivo en cuestión, el contenido se muestra ilegible
casi en su totalidad.
27
Inserte también desde la Paleta Dialogs un control OpenDialog para modificar las
propiedades de la ventana de diálogo Abrir. En la sección type declare el tipo TLibro
con los campos indicados, los cuales deben coincidir al menos en tipo y ancho con los
del ejemplo anterior.
type
TLibro=Record
cod:string[4];
tit:string[20];
aut:string[30];
edi:string[20];
nej:byte;
pre:real
end;
Declaremos dos variables: Fich(Archivo binario) cuyos componentes serán del tipo
TLibro y Lib para recuperar los datos de un libro en particular en la sección
var
frmLectura: TfrmLectura;
lib:TLibro;
fich:file of TLibro;
implementation
{$R *.DFM}
procedure TfrmLectura.Actualiza;
28
begin
If not eof(Fich) Then
Begin
read(fich,lib);
seek(fich,filepos(fich)-1);
with lib do
begin
edit1.text:=cod;
edit2.text:=aut;
edit3.text:=tit;
edit4.text:=edi;
edit5.text:=IntToStr(nej);
edit6.text:=FloatToStr(pre)
end;
panel1.Caption:='Registro '+IntToStr(filepos(fich)+1)+' de '+IntToStr(filesize(fich))
end
end;
Al crearse la ficha haremos que se muestre la ventana Abrir para seleccionar el nombre
del archivo de datos a visualizar. Haga doble clic sobre un lugar libre del formulario, se
desplegara la ventana de código para el evento OnCreate, digite lo siguiente:
Asociemos un procedimiento al control Salir. Cuando el usuario haga clic en este botón,
la ejecución del programa debe finalizar.
Programa ejecutándose:
30
La paleta Dialogs, contiene los componentes OpenDialog y SaveDialog entre otros.
3) Impresión
31
El comando Abrir mostrara un dialogo Abrir para seleccionar un archivo bitmap:
32
Para acceder al Cuadro de Dialogo de vista previa haremos clic en el comando
Archivo/Imprimir de la aplicación.
Se mostrara un formulario en vista previa con una barra de herramientas con 4 botones y
1 componente ScrollBox que contiene un componente Image.
Primero se verifica si se ha seleccionado una imagen, de ser así se define una escala
predeterminada para el formulario, inicia la vista previa y aparece como un formulario
modal:
33
end;
end;
procedure TFichaPreli.ConfigPag;
begin
{fija el tamaño de la imagen a ser
proporcional con el tamaño de página}
Image1.Width := Printer.PageWidth div 5;
Image1.Height := Printer.PageHeight div 5;
{Da salida a la Escala para la barra de herramientas}
Label1.Caption := IntToStr (Escala);
end;
procedure TFichaPreli.DibujarVista;
var
Rect: TRect;
begin
{calcula el rectangulo para la vista previa del bitmap}
Rect.Top := 10;
Rect.Left := 10;
Rect.Right := 10 +
(Form1.Image1.Picture.Graphic.Width * Escala) div 5;
Rect.Bottom := 10 +
(Form1.Image1.Picture.Graphic.Height * Escala) div 5;
34
procedure TFichaPreli.BotonEscalarMasClick(Sender: TObject);
begin
{incrementa el tamaño del bitmap}
Escala := Escala * 2;
Label1.Caption := IntToStr (Escala);
DibujarVista
end;
35
4) Una Ventana de Navegación
Desarrollar una aplicación que permita revisar los datos de la tabla Cliente contenida en
la base de datos DBDEMOS.
36
6. Modifique las propiedades de los componentes:
37
Para facilitar la navegación por los datos que hemos seleccionado, lo único que tenemos
que hacer es insertar un control TDBNavigator¸ que se encuentra en la pagina
DataControls. La propiedad mas relevante de este control es DataSource que nos
servirá para conectarnos a los datos de la tabla a través del objeto DataSource1.
Realice los siguientes cambios:
El control DBNavigator solo permite la navegación por los datos durante la ejecución. Al
interactuar con este control podremos movernos de un registro a otro, borrar una fila,
añadir una nueva fila; es decir, la mayoría de las operaciones que están permitidas en
una tabla con tan solo una pulsación.
38
Desde la pestaña Standard vamos a seleccionar el componente MainMenu y además
agregaremos un cuadro AbriFicheros (OpenDialog) que se encuentra en la pagina
Dialogs de la paleta de componentes. Al menú principal llamaremos Archivo, y dentro
de el ubicaremos dos submenús llamados Abrir y Salir.
39
En la propiedad Filter del cuadro de dialogo digite los siguientes filtros:
Nombre del Filtro Filtro
Bases de datos(*.db, *.dbf) *.db, *.dbf
Todos los archivos(*.*) *.*
El resto de las propiedades se dejaran como están con el fin de que mejore el cuadro de
dialogo a su libre decisión.
En el evento OnClick de la opción Abrir se utilizaran dos funciones muy útiles que son
ExtractFilePath y ExtractFileName. La primera devuelve la ruta sin el nombre del
archivo, y la segunda retorna el nombre del archivo. Debemos tener en cuenta que la
propiedad FileName del cuadro de dialogo (OpenDialog1) contiene la ruta completa del
archivo seleccionado, por ejemplo: c:\Enero\prueba.db.
Aquí debajo esta el código fuente del ejemplo para darle un vistazo:
40
Table1.Close:
// Almacena la ruta donde esta almacenada una base de datos
Table1.TableName := ExtractFilePath (OpenDialog1.Filename);
// Retorna el nombre de la base de datos seleccionada
Table1.TableName := ExtractFileName(OpenDialog1.FileName);
// Activa la table
Table1.Active := True
end;
//En caso que cancele no efectúa nada
end;
Al hacer clic en el comando Abrir del menú Archivo emergerá el dialogo Abir. Luego
bastara seleccionar un archivo de Base de Datos de la carpeta Data y hace clic en el
botón Abrir para pasar a revisar su contenido.
41
5. Modifique las propiedades de los componentes.
En este punto ya podemos ejecutar el programa y editar los datos de la tabla aplicando
cambios permanentes. Esto es posible porque la propiedad Options del componente
DBGrid incluye el indicador dgEditing y la propiedad ReadOnly esta definida a False.
Ahora digitaremos código para indicar el estado del componente Table en ejecución.
Seleccionemos el componente DataSource y ubiquemos su evento OnStateChange en
la pagina Envents. Ingrese las siguientes instrucciones:
Procedure TForm1.DataSource1StateChange(Sender:TObject);
var
Titulo:String;
begin
42
Case Table1.State of
dsBrowse: Titulo:= ‘Examinar’;
dsEdit: Titulo := ‘Editar’;
dsInsert: Titulo := ‘Insertar’; // para insertar presione Ins
else // para borrar presione Control + Supr
Titulo := ‘Otro Estado’;
end;
Caption := ‘Rejilla Demo –‘ + Titulo;
end;
Desarrollar una aplicación que permita visualizar fecha e imágenes de eventos olímpicos
los cuales están almacenados en la tabla Events contenida en la base de datos
DBDEMOS
43
Stretch True
DBNavigator DataSource DataSource1
MonthCalendar1 ShowToday False
Además de copiar los datos a uno y otro, con el código anterior, el programa tiene que
poner la tabla en modo edición cuando el usuario haga clic en el calendario. Ahora, haga
doble clic sobre el calendario y digite las instrucciones para su evento OnClick.
Para navegar por los registros de la tabla puede utilizar indistintamente o los botones de
desplazamiento del control DBNavigator o hacer clic sobre alguna fila de la rejilla o
cuadricula. En la imagen, si presionamos el botón – se eliminara el registro actual ( el
que indique el puntero), para evitar perdidas inesperadas emergerá antes una ventana
de Confirmación para verificar si realmente deseamos eliminar la fila actual.
44