18-04-1998
Voy a seguir profundizando en el mundo de las bases de datos y Delphi. Para ello voy a continuar contandos las caracteristicas de los controles que hemos visto hasta ahora.
Cuando se trabaja con una base de datos, el principal responsable de prácticamente todo es el componente Table. Este componente es el encargado de leer, escribir, actualizar, etc la base de datos a la cual esta conectado, y forma un "tanden" muy util con el componente Datasourcer, el cual es el encargado de conectar al componente table con los controles usados para visualizar los datos. Así el componente Table tiene una larga lista de eventos, que se pueden dividir en tres grupos, los eventos que se producen antes de un operación (apertura, cierre, lectura, etc) los cuales empiezan por la palabra Before (en inglés significa antes de); luego están los eventos que se producen en el momento cuyo nombre empieza por On (recuerda que el evento que se producia cuando se pulsaba un botón se llama Onclick); y por ultimo los eventos que se producen después, cuyo nombre empieza por After (del inglés: después).
Antes de poner una tabla con los principales eventos os voy a comentar las principales operaciones de una tabla, estas son:
Open | Se abre la tabla |
Close | Se cierra la tabla |
Edit | Para editar el campo actual |
Insert | Añade datos a la tabla |
Post | Graba los datos |
Cancel | Cancela la operación actual |
Así pues los principales eventos son los siguientes:
AfterDelete | Se produce despues de el borrado de un registro |
AfterEdit | Después de editar un registro |
AfterInsert | Después de Insertar |
After Post | Después de grabar los datos |
BeforeCancel | Antes de cancelar la operación |
BeforeClose | Antes de que se cierra la tabla |
BeforeDelete | Antes de borrar |
BeforeEdit | Antes de editar el registro actual |
BeforeInsert | Antes de insertar un registro |
BeforeOpen | Antes de abrir la tabla |
BeforePost | Antes de guardar los datos |
OnCalcFields | Se produce cuando se va a calcular el valor de un campo |
OnDeleteError | Cuando se produce un error al borrar un registro |
OnEditError | Cuando hay un error al editar un registro |
OnFilterRecord | Cuando se activa el filtrado |
OnNewRecord | Cuando se añade un registro |
OnPostError | Cuando hay un error durante el grabado de datos |
Una cosilla es que por ahora he hablado de principales eventos, principales acciones, etc, y todo es principal, el motivo es que puede haber más operaciones, o eventos, dependiendo si se trabaja en red con servidores de datos, pero como comenté en el capítulo anterior solo voy a hablar de bases de datos locales.
Un ejercicio interesante es abrir una tabla y colocar en algunos eventos unas líneas
de código que nos muestren un mensaje diciendonos en que eventos estamos cuando
realicemos alguna operación. Un ejemplo seria como estas líneas:
procedure TForm1.Table1AfterOpen(DataSet: TDataSet);
begin
ShowMessage ('Acabo de abrir la tabla');
end;
Hay más aspectos sobre este componente, pero los iremos viendo según surjan.
Otro componente que usamos el capítulo anterior era la barra de navegación (dbNavigator), que también tiene caracteristicas interesantes. De sus propiedades especificas se pueden resaltar algunas. Una es la propiedad VisibleButtons la cual contiene la relación de los botones que son visibles.Por defecto los botones visibles son todos, y como quizas hayas descubierto cada uno tiene una función, de derecha a izquierda los botones que se muestran son:
nbFirst | Desplaza la tabla al primer registro |
nbPrior | Se desplaza al registro anterior |
nbNext | Avanza un registro |
nbLast | Se coloca en el último registro |
nbInsert | Inserta un registro en la tabla |
ndDelete | Borra el registro actual |
nbEdit | Pone la tabla en modo edición |
nbPost | Guarda los datos (post) |
ndCancel | Cancela la operación actual |
nbRefresh | Refresca los datos |
Otra propiedad es ShowHint, la cual si su valor es true muestra una breve descripción de cada botón, pero inglés. Aunque hay otra propiedad llamada Hints, del tipo TString donde podemos escribir las descripciones que queramos para cada botón. Teniendo en cuenta que la primera línea contrendrá la descripción del primer botón. Y ojo porque si un botón o más no estan visibles debes colocar, igualmente, la descripción del mismo. Así que un pequeño truco que yo uso es, que lo primero que hago es colocar las descripciones de todos los botones, y luego desactivo los botones que me no interesan.
Otra propiedad que es interesante tener en mente es la propiedad ConfirmDelete, la cual si esta en True mostrará un mensaje (en inglés) pidiendo conformidad para borrar el registro actual. Si quieres colocar tu propio cuadro de dialogo, debes colocar esta propiedad en false, y controlar el evento BeforeDelete de la tabla. Un ejemplo podria ser así:
procedure TForm1.Table1BeforeDelete(DataSet: TDataSet); begin If Application.MessageBox ('Estas seguro que deseas borrar este registro', 'Borrar un registro',mb_YesNo+MB_IconStop) = ID_No Then Abort; end;
Son interesantes los eventos BeforeAction y OnClick de la barra de navegación, ya en ellos se puede consultar que botón ha sido pulsado de la barra, por medio de la variable button, contendrá el nombre del botón pulsado. Ten en cuenta que hay una diferencia entre estos dos eventos, y es que si pulsas sobre un botón primero es llamado el evento BeforeAction, y luego es llamado el evento Onclick.
Quizas a alguien le interse crearse una barra de herramientas en su aplicación y usar botones convencionales en sustitución de la barra de navegación, o simplemente ha decido poner un menú en su aplicación que haga las misma funciones que la barra de navegación. Pues la solución es colocar en el evento Onclick de lo menus la orden correspondiente a la acción que queremos hacer, pero esta vez hay que indicarselo a la tabla, y no a la barra de navegación.
Los métodos que hay que llamar son:
First | Para llevar la tabla al principio |
Prior | Para retroceder un registro |
Next | Para avanzar un registro |
Last | Para ir al último registro |
Edit | Para editar el registro actual |
Insert | Para inserta un registro |
Delete | Borra el registro actual |
Edit | Coloca la tabla en modo edición |
Post | Guarda los datos |
Cancel | Cancela la operación (inserción) |
Refresh | Refresca los datos de la tabla |
Solo comentaros que el método Refresh se usa cuando se quiere refrescar el contenido de la tabla tras un cambio, así los componentes asociados a ellas reflejan el cambio, esto es común cuando la tabla es compartida, está en un servidor.
Al ejemplo del capítulo anterior le ha añadido un menú que hace las mismas operaciones que la barra de navegación, además de mostrar un mensaje personalizado cuando se va a borrar un registro.Podeis descargar el código fuente con las modificaciones en el area de descarga.