Difference between revisions of "Databases in Lazarus/es"

From Lazarus wiki
Jump to navigationJump to search
 
(41 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 +
{{Databases_in_Lazarus}}
 +
 
== Objetivo ==
 
== Objetivo ==
 
   Esta página pretende ofrecer un panorama general de la utilización de bases de datos en Lazaraus, y para proporcionar un punto en el que relacionar otras páginas sobre bases de datos.
 
   Esta página pretende ofrecer un panorama general de la utilización de bases de datos en Lazaraus, y para proporcionar un punto en el que relacionar otras páginas sobre bases de datos.
  
 
==Conjunto de Datos (''Datasets'')==
 
==Conjunto de Datos (''Datasets'')==
   La utilización de Bases de Datos en Lazarus (o FreePascal) está fundamentada principalmente en la clase '''''TDataset''''', que representa una tabla o consulta en la aplicación. Como con muchas otras clases fundamentales, no se usará la misma de forma directa, sino que se hará mediante una clase derivada. Esto tiene su porqué: pra ofrecer acceso a distintas clase de Bases d Datos, como archivos de dBase o texto locales, o bases de datos remotas como PostgreSQL, Firebird, MySQl y muchas otras. Algunos de las clase derivadas de ''TDataset'' acceden a las tablas de las bases de datos directamente, mientras otras utilizan componentes adicionales o librerías para llevar a cabo el acceso.
+
   La utilización de Bases de Datos en Lazarus (o FreePascal) está fundamentada principalmente en la clase '''''TDataset''''', que representa una tabla o consulta en la aplicación. Como con muchas otras clases fundamentales, no se usará la misma de forma directa, sino que se hará mediante una clase derivada. Esto tiene su porqué: para ofrecer acceso a distintas clase de Bases d Datos, como archivos de dBase o texto locales, o bases de datos remotas como PostgreSQL, Firebird, MariaDB, MySQl y muchas otras. Algunas de las clase derivadas de ''TDataset'' acceden a las tablas de las bases de datos directamente, mientras otras utilizan componentes adicionales o librerías para llevar a cabo el acceso.
  
   Ver las [[Databases|clases derivadas de acceso a datos]] en esta página.
+
   Ver las [[Databases/es|clases derivadas de acceso a datos]] en esta página.
  
 
   Las clases derivadas de ''TDataset'', que no son componentes visuales son (habitualmente) parte del Librería de Componentes Libres -''Free Component Library'' (FCL)- en lugar de formar parte de la librería de Componentes de Lazarus -''Lazarus Component Library'' (LCL)-.
 
   Las clases derivadas de ''TDataset'', que no son componentes visuales son (habitualmente) parte del Librería de Componentes Libres -''Free Component Library'' (FCL)- en lugar de formar parte de la librería de Componentes de Lazarus -''Lazarus Component Library'' (LCL)-.
Line 17: Line 19:
 
===Utilizando ''datasets'' desde código===
 
===Utilizando ''datasets'' desde código===
  
El acceso mediante código está explicado con más detalle en [[Using Dataset and Field components|Utilizando componentes ''Dataset'' y de campo]], esta es una visión general muy simple:
+
El acceso mediante código está explicado con más detalle en [[Using Dataset and Field components|Utilizando componentes ''Dataset'' y de campo]](página que parece no existir), esta es una visión general muy simple:
 
* Usar el derivado de ''TDataset'' para abrir la tabla o consulta, filtrar para ver las filas deseadas y moverse de una fila a otra.
 
* Usar el derivado de ''TDataset'' para abrir la tabla o consulta, filtrar para ver las filas deseadas y moverse de una fila a otra.
 
* Usar un componente derivado de ''TField'' para:
 
* Usar un componente derivado de ''TField'' para:
Line 33: Line 35:
 
*Situar los componentes ligados a datos desde la pestaña ''Data Controls'' en el formulario y enlazarlos con el componente ''DataSource'' (no con el ''dataset'')
 
*Situar los componentes ligados a datos desde la pestaña ''Data Controls'' en el formulario y enlazarlos con el componente ''DataSource'' (no con el ''dataset'')
 
*La mayoría de los controles enlazan un único campo, por lo que es necesario, seleccionar el que deseamos mostrar.
 
*La mayoría de los controles enlazan un único campo, por lo que es necesario, seleccionar el que deseamos mostrar.
   Ver [[#Data Controls|Componentes de datos]] más adelante para más detalllas de los componentes.
+
   Ver [[#Componentes de Datos]] más adelante para más detalles sobre los mismos.
 +
 
 +
=== Estados de los ''Dataset'' ===
 +
   Los conjuntos da datos ''Dataset'' pueden estar es diversos estados. Aunque hay bastantes (échale un vistazo a la definición de ''TDataSetState'' en el código fuente de la unidad ''db.pas''), los más importantes para conocer inicialmente son los marcados con asterisco (*):
  
=== Dataset State ===
+
<center><table border="1" width="90%" cellpadding="5">
Datasets can be in a number of states.  While there are quite a few (look up TDataSetState in the source), the main ones to be aware of initally are
+
  <tr>
<table>  
+
    <th>Estado</th>
 +
    <th>Comportamiento</th>
 +
  </tr>
 +
  <tr>
 +
    <td>dsInactive (*)</td>
 +
    <td>El conjunto de datos (''Dataset'') está cerrado</td>
 +
  </tr>
 +
  <tr>
 +
    <td>dsBrowse (*)</td>
 +
    <td>El usuario puede moverse por el conjunto de datos, viendo los valores que contiene</td>
 +
  </tr>
 +
  <tr>
 +
    <td>dsEdit (*)</td>
 +
    <td>El usuario puede editar los valores de la fila activa. Los datos no son guardados hasta que se llama al método ''post''.</td>
 +
  </tr>
 
   <tr>
 
   <tr>
     <th>State</th>
+
     <td>dsInsert (*)</td>
     <th>Function</th>  
+
     <td>Una fila nueva se ha añadido y el usuario puede dar valores a los campos. El registro no se guarda hasta que se llama a ''post''</td>
 
   </tr>
 
   </tr>
 
   <tr>
 
   <tr>
     <td>dsInactive</td>
+
     <td>dsOpening</td>
     <td>The dataset is closed</td>
+
     <td>---</td>
 
   </tr>
 
   </tr>
 
   <tr>
 
   <tr>
     <td>dsBrowse</td>
+
     <td>dsSetKey</td>
     <td>The user can browse through the dataset, looking at values</td>  
+
     <td>---</td>
 
   </tr>
 
   </tr>
 
   <tr>
 
   <tr>
     <td>dsEdit</td>
+
     <td>dsFilter</td>
     <td>The user can edit values on the current row.  Values are not saved until a post is performed.</td>
+
     <td>---</td>
 
   </tr>
 
   </tr>
 
   <tr>
 
   <tr>
     <td>dsInsert</td>
+
     <td>dsBlockRead</td>
     <td>A new row has been added, and the user can set the values.  The record is not saved until a post is performed</td>
+
     <td>---</td>
 
   </tr>
 
   </tr>
</table>
+
  <tr>
The other states are fairly transitory, and are usually handled "automatically".  They are used internally and in more complicated code.  If your database only views data, and you open the dataset at design time, you can largely ignore the state, as it will mostly be dsBrowse.  However, most applications will want to change the data at some stage.  If you are using data-aware controls, they will handle a lot of this automatically.  If you change the text in a DBEdit control, for example, it will put the dataset into dsEdit state - unless you are already in dsEdit or dsInsert.  If you "scroll" to a different record while the current state is dsEdit or dsInsert, that record will be "posted" and the dataset revert to dsBrowse.  However, if you are accessing the dataset from code, you will often have to change the state in code as well.  The dbNavigator control (see below) allows the user to change the state explicitly.
+
    <td>dsCalcFields</td>
 +
    <td>---</td>
 +
  </tr>
 +
  <tr>
 +
    <td>dsCurValue</td>
 +
    <td>---</td>
 +
  </tr>
 +
  <tr>
 +
    <td>dsNewValue</td>
 +
    <td>---</td>
 +
  </tr>
 +
  <tr>
 +
    <td>dsOldValue</td>
 +
    <td>---</td>
 +
  </tr>
 +
  <tr>
 +
    <td>dsInternalCalc</td>
 +
    <td>---</td>
 +
  </tr>
 +
  <tr>
 +
    <td>dsIRefreshFields</td>
 +
    <td>---</td>
 +
  </tr>
 +
</table></center>
  
===Post and Cancel===
+
&nbsp;&nbsp;&nbsp; Los otros estados son transitorios y son habitualmente manejados de forma automática. Se usan internamente y en código más complicado. Si la aplicación sólo visualiza los datos y se abren los ''dataset'' en diseño, se pueden ignorar los estados, ya que será ''dsBrowse'' casi siempre. Sin embargo, la mayoría de las aplicaciones cambiarán los datos en algún momento. Si se están usando componentes ligados a datos, estos manejarán la mayoría de los estados de forma automática. Si se cambia texto en un ''DBEdit'', por ejemplo, el ''dataset'' se pondrá en el estado ''dsEdit'', a menos que ya esté en ''dsEdit'' o ''dsInsert''. Si se cambia a otro registro, y el estado es ''dsEdit'' o ''dsInsert'', el registro es actualizado con los nuevos datos y el ''dataset'' vuelve al estado ''dsBrowse''. Por contra, si se accede a los datos mediante código, el responsable de cambiar de estado es el código del programa (es decir, el programador). El componente ''dbNavigator'' (ver más adelante) permite al usuario cambiar los estados explícitamente.
If you have edited or inserted a record, the new values are held in a buffer.
+
 
*Calling the dataset cancel method removes the new record (insert) or reverts the values to their previous values (edit)
+
===Actualizar (''Post'') y Cancelar===
*Calling the database post method saves the values (edit) or record (insert). In some dataset descendants, they will be written to the database immediately, while in others they will be stored in a list of updates until a further call is made to save all changes to the database. Finally, even when they are written to the database, you may still have to call a "commit" method to make the database write them permanently. All of this also varies considerably with the dataset descendant, so look up the details for the one you are using.
+
&nbsp;&nbsp;&nbsp;Si has editado o insertado un registro, los nuevos valores son guardados en una memoria intermedia.
 +
*Llamando el método ''Cancel'' del ''Dataset'' se elimina el registro nuevo (insertar) o recupera los valores anteriores del registro (editar)
 +
* Con el método ''Post'' se guardan los valores nuevos o el registro insertado. El algunos derivados de ''Dataset'', los datos son escritos inmediatamente en las tablas de la BD, en otros son escritos en listas de cambios hasta que la siguiente llamada los guarda en la BD. Por último, aunque se han guardado en la DB puede ser necesario hacer una llamada a ''commit'' para hacer permanentes los cambios en la BD. Todo o anterior depende mucho del componente utilizado y de la BD, por lo que hay que ver los detalles concretos de utilización
  
 
==Componentes de Datos==
 
==Componentes de Datos==
 +
Para usar cualquiera de estos componentes, se añade a un formulario y se establece, como mínimo, la propiedad de fuente de datos ''Datasource''. Sin olvidar otras propiedades importantes.
 +
 +
===Componentes de campo único===
 +
 +
Estos componentes se enlazan a un único campo. Además del nombre del ''Datasource'', hay que dar el nombre del campo al que enlazan.  Son estos:
 +
 +
*[[doc:lcl/dbctrls/tdbtext.html|DBText]], muestra el valor del campo como un texto no editable y sin borde.
 +
*[[doc:lcl/dbctrls/tdbedit.html|DBEdit]], muestra y permite editar un campo de texto en una caja, para ello seleccionamos una fuente de datos y uno de los campos disponibles. Mediante el inspector de objetos podemos ver el listado de los mismos si tenemos la conexión establecida y la consulta activa en tiempo de diseño.
 +
: Aquí cabe decir que la justificación del texto dentro del recuadro de DBEdit es posible, al menos en la versión 1.4, por medio de la propiedad '''Alignment''' al igual que se utiliza con Edit. Sería cómodo tenerla como una propiedad más publicada en el inspector de objetos pero por el momento no está incluida, con lo cual hay que realizarlo con código.
 +
 +
: TDBEdit.Alignment = taLefttJustify;
 +
: TDBEdit.Alignment = tacenter;
 +
: TDBEdit.Alignment = taRightJustify;
  
To use any of these controls, add the control to a form and set at least the datasource property. Other key properties will be noted.
+
*[[doc:lcl/dbctrls/tdbmemo.html|DBMemo]], muestra y permite editar un campo de texto en un caja de varias líneas.
 +
*[[doc:lcl/dbctrls/tdbimage.html|DBImage]], muestra una imágen guardada en la base de datos en un campo tipo ''BLOB''.
 +
*[[doc:lcl/dbctrls/tdblistbox.html|DBListBox]] y [[doc:lcl/dbctrls/tdbcombobox.html|DBComboBox]], permite al usuario introducir valores en el campo de la Base de Datos de entre los mostrados en la lista.
 +
*[[doc:lcl/dbctrls/tdbcheckbox.html|DBCheckBox]], muestra y permite asignar valores lógicos a un campo, marcando o desmarcando el componente.
 +
*[[doc:lcl/dbctrls/tdbradiogroup.html|DBRadioGroup]], muestra los elementos en un grupo de selección, permitiendo así asignar de entre ellos el valor del campo.
 +
*[[doc:lcl/dbctrls/tdbcalendar.html|DBCalendar]], muestra y permite editar un campo de tipo fecha mediante un calendario gráfico.
 +
*[[doc:lcl/dbctrls/tdbgroupbox.html|DBGroupBox]], versión de ''TGroupBox'', que permite agrupar una serie de componentes de datos en un formulario.
  
===Single Field Controls===
+
===[[doc:lcl/dbgrids/tdbgrid.html|Componente DBGrid]]===
  
These controls all attach to a single field. As well as datasource, set the field name. Controls include:
+
&nbsp;&nbsp;&nbsp;Este componente muestra, por defecto todos los campos en forma de tabla. No obstante, poniendo valores en la colección [[doc:lcl/dbgrids/tdbgrid.columns.html|''Columns'']] se pueden restringir los campos que se visualizan y dar el ancho y los títulos de las columnas.
  
*[[doc:lcl/dbctrls/tdbtext.html|DBText control]] Displays a text field (readonly, no border)
+
&nbsp;&nbsp;&nbsp;Al parecer hay todavía algunos problemas con la edición en DBGrid, por lo que aunque la edición es, sin duda, posible, puede ser más seguro utilizarlo sólo para mostrar datos (poner ''readonly'' a verdadero) y utilizar componentes de campo único para la edición.
*[[doc:lcl/dbctrls/tdbedit.html|DBEdit control]] Displays / edits a text field as an edit box
 
*[[doc:lcl/dbctrls/tdbmemo.html|DBMemo control]] Displays / edits a text field in a multi-line edit box
 
*[[doc:lcl/dbctrls/tdbimage.html|DBImage control]] Displays a picture stored in a database as a BLOB
 
*[[doc:lcl/dbctrls/tdblistbox.html|DBListBox control]] and [[doc:lcl/dbctrls/tdbcombobox.html|DBComboBox Control]] Allow the user to insert values into a database field from the list of values in the Items property of the controls
 
*[[doc:lcl/dbctrls/tdbcheckbox.html|DBCheckBox control]] Displays / edits a boolean field by checking/clearing a check box
 
*[[doc:lcl/dbctrls/tdbradiogroup.html|DBRadioGroup control]] Displays the items as in a normal radio group, reading/setting the field value from a matching values list
 
*[[doc:lcl/dbctrls/tdbcalendar.html|DBCalendar control]] Displays / edits a date field using a calendar panel
 
*[[doc:lcl/dbctrls/tdbgroupbox.html|DBGroupBox control]]
 
  
===[[doc:lcl/dbgrids/tdbgrid.html|DBGrid control]]===
+
===Componente navegador (''[[doc:lcl/dbctrls/tdbnavigator.html|DBNavigator'']])===
  
This control can show a number of fields in a row/column layout - in fact by default it shows them all.  However, you can put entries into the [[doc:lcl/dbgrids/tdbgrid.columns.html|columns collection]] to restrict it to specific fields and to set the widths and titles of each column.
+
[[image:dbnavigator.PNG|center|450px]]
  
There seem to be some issues currently with editing in dbGrid, so while editing is certainly possible, it may be safer to use it as display only (set readonly to true) and provide single field controls for editing.
 
  
===[http://lazarus-ccr.sourceforge.net/docs/lcl/dbctrls/tdbnavigator.html Navigator Control]===
+
&nbsp;&nbsp;&nbsp;Este componente le da al usuario control directo sobre el conjunto de datos, permitiéndole:
  
This control gives the user some direct control over the dataset.  It allows the user to:
+
* Moverse al registro siguiente, al anterior, al primero o al último.
* Move to the next or previous record, or to the start or end of the records
+
* Añadir un nuevo registro (igual que llamar al método ''dataset.insert'')
* Add a new record (equivalent to a dataset.insert method call)
+
* Poner el conjunto de datos en modo de edición
* Put the dataset into edit mode
+
* Borrar un registro
* Delete a record
+
* Guardar (''Post'') o Cancelar los cambios actuales
* Post or Cancel current changes
+
* Refrescar los datos (útil en aplicaciones con varios usuarios concurrentes)
* Refresh the data (useful in multiuser database applications)
 
  
Key Properties:
+
=====Principales propiedades:=====
* VisibleButtons:  Lets you control what the user can doFor example, if deletes are not allowed, hide the delete button. If you have a DBGrid attached to the same dataset, you may decide you do not need the next and prior buttons.  
+
* DataSource: que permite enlazar a la fuente de los datos que se manejarán con el componente.
* Width: If you do not show all buttons, you may want to set the width to (height*number_of_visible_buttons)
+
* VisibleButtons:  permite controlar lo que el usuario puede hacerPor ejemplo, si no puede borrar, se oculta el botón de borrar. Si se tiene un ''DBGrid'' enlazado al ''dataset'', se puede prescindir de los botones para siguiente y anterior.  
[[Category:Databases]]
+
* Width: Si no se muestran todos los botones, se puede poner el ancho a la altura por el número de botones.
 +
{{Database Programming/es}}
 +
[[Category:Databases/es]]
 
[[category:Castellano]][[category:Español]]
 
[[category:Castellano]][[category:Español]]

Latest revision as of 14:10, 4 May 2017

Deutsch (de) | English (en) | español (es) | italiano (it)

Objetivo

   Esta página pretende ofrecer un panorama general de la utilización de bases de datos en Lazaraus, y para proporcionar un punto en el que relacionar otras páginas sobre bases de datos.

Conjunto de Datos (Datasets)

   La utilización de Bases de Datos en Lazarus (o FreePascal) está fundamentada principalmente en la clase TDataset, que representa una tabla o consulta en la aplicación. Como con muchas otras clases fundamentales, no se usará la misma de forma directa, sino que se hará mediante una clase derivada. Esto tiene su porqué: para ofrecer acceso a distintas clase de Bases d Datos, como archivos de dBase o texto locales, o bases de datos remotas como PostgreSQL, Firebird, MariaDB, MySQl y muchas otras. Algunas de las clase derivadas de TDataset acceden a las tablas de las bases de datos directamente, mientras otras utilizan componentes adicionales o librerías para llevar a cabo el acceso.

   Ver las clases derivadas de acceso a datos en esta página.

   Las clases derivadas de TDataset, que no son componentes visuales son (habitualmente) parte del Librería de Componentes Libres -Free Component Library (FCL)- en lugar de formar parte de la librería de Componentes de Lazarus -Lazarus Component Library (LCL)-.

Utilizando Datasets

   Los components Datasets se pueden utilizar indistintamente por código o cómo componentes visuales. En una aplicación Lazarus normal se suelen utilizar ambos métodos. En cualquier caso, el primer paso es crear el descendiente de TDataSet, iniciarlo para conectarlo con la tabla o consulta, por último realizar la conexión, abriendo el conjunto de datos. Esto se puede hacer por código en tiempo de ejecución o colocando el componente en el formulario y dando valores a las propiedades durante el diseño. Los detalles concretos varían bastante según las diferentes clases derivadas de TDataset, por ello hay que ver las distintas guías para los componentes de acceso a distintas Bases de Datos.

   Cuando se abre el conjunto de datos (Dataset) se crean una serie de componentes de campos, uno por cada campo o columna de la tabla o consulta que se ha abierto. Cada componente de campo es descendiente de TField, adecuado al tipo particular del campo, v.gr., TStringField, para campos de tipo alfabético.

Utilizando datasets desde código

El acceso mediante código está explicado con más detalle en Utilizando componentes Dataset y de campo(página que parece no existir), esta es una visión general muy simple:

  • Usar el derivado de TDataset para abrir la tabla o consulta, filtrar para ver las filas deseadas y moverse de una fila a otra.
  • Usar un componente derivado de TField para:
    • Acceder a la información general sobre los campos
    • Acceder a los valores concretos para la fila actual. (mediante las propiedades As..., como AsString, AsInteger, etc.)
  • Acceder a los campos de un componente derivado de TDataset de esta forma:
    • La propiedad Fields (Campos), v.gr. Fields[0] es el primer campo,
    • Con el método FieldByName, v.gr. FieldByName('EDAD') devuelve el contenido del campo asociado con el campo de la Base de datos de nombre 'EDAD'.

Utilizando componentes visuales enlazados a datos (data-aware components)

   Para utilizar bases de datos en una aplicación Lazarus al estilo RAD, normalmente se configura el componente de datos Dataset en el momento del diseño y se usan componentes enlazados a datos, de la forma siguiente

  • Añadir el componente de datos deseado, junto con los componentes adicionales si son necesarios, en el formulario, y abrirlo, poniendo el valor la propiedad Active a verdadera.
  • Añadir un componente TDatasource (de la pestaña Data Access) al formulario, y enlazarlo con el componente dataset, dando como valor de su propiedad Dataset el nombre dado a este.
  • Situar los componentes ligados a datos desde la pestaña Data Controls en el formulario y enlazarlos con el componente DataSource (no con el dataset)
  • La mayoría de los controles enlazan un único campo, por lo que es necesario, seleccionar el que deseamos mostrar.

   Ver #Componentes de Datos más adelante para más detalles sobre los mismos.

Estados de los Dataset

   Los conjuntos da datos Dataset pueden estar es diversos estados. Aunque hay bastantes (échale un vistazo a la definición de TDataSetState en el código fuente de la unidad db.pas), los más importantes para conocer inicialmente son los marcados con asterisco (*):

Estado Comportamiento
dsInactive (*) El conjunto de datos (Dataset) está cerrado
dsBrowse (*) El usuario puede moverse por el conjunto de datos, viendo los valores que contiene
dsEdit (*) El usuario puede editar los valores de la fila activa. Los datos no son guardados hasta que se llama al método post.
dsInsert (*) Una fila nueva se ha añadido y el usuario puede dar valores a los campos. El registro no se guarda hasta que se llama a post
dsOpening ---
dsSetKey ---
dsFilter ---
dsBlockRead ---
dsCalcFields ---
dsCurValue ---
dsNewValue ---
dsOldValue ---
dsInternalCalc ---
dsIRefreshFields ---

    Los otros estados son transitorios y son habitualmente manejados de forma automática. Se usan internamente y en código más complicado. Si la aplicación sólo visualiza los datos y se abren los dataset en diseño, se pueden ignorar los estados, ya que será dsBrowse casi siempre. Sin embargo, la mayoría de las aplicaciones cambiarán los datos en algún momento. Si se están usando componentes ligados a datos, estos manejarán la mayoría de los estados de forma automática. Si se cambia texto en un DBEdit, por ejemplo, el dataset se pondrá en el estado dsEdit, a menos que ya esté en dsEdit o dsInsert. Si se cambia a otro registro, y el estado es dsEdit o dsInsert, el registro es actualizado con los nuevos datos y el dataset vuelve al estado dsBrowse. Por contra, si se accede a los datos mediante código, el responsable de cambiar de estado es el código del programa (es decir, el programador). El componente dbNavigator (ver más adelante) permite al usuario cambiar los estados explícitamente.

Actualizar (Post) y Cancelar

   Si has editado o insertado un registro, los nuevos valores son guardados en una memoria intermedia.

  • Llamando el método Cancel del Dataset se elimina el registro nuevo (insertar) o recupera los valores anteriores del registro (editar)
  • Con el método Post se guardan los valores nuevos o el registro insertado. El algunos derivados de Dataset, los datos son escritos inmediatamente en las tablas de la BD, en otros son escritos en listas de cambios hasta que la siguiente llamada los guarda en la BD. Por último, aunque se han guardado en la DB puede ser necesario hacer una llamada a commit para hacer permanentes los cambios en la BD. Todo o anterior depende mucho del componente utilizado y de la BD, por lo que hay que ver los detalles concretos de utilización

Componentes de Datos

Para usar cualquiera de estos componentes, se añade a un formulario y se establece, como mínimo, la propiedad de fuente de datos Datasource. Sin olvidar otras propiedades importantes.

Componentes de campo único

Estos componentes se enlazan a un único campo. Además del nombre del Datasource, hay que dar el nombre del campo al que enlazan. Son estos:

  • DBText, muestra el valor del campo como un texto no editable y sin borde.
  • DBEdit, muestra y permite editar un campo de texto en una caja, para ello seleccionamos una fuente de datos y uno de los campos disponibles. Mediante el inspector de objetos podemos ver el listado de los mismos si tenemos la conexión establecida y la consulta activa en tiempo de diseño.
Aquí cabe decir que la justificación del texto dentro del recuadro de DBEdit es posible, al menos en la versión 1.4, por medio de la propiedad Alignment al igual que se utiliza con Edit. Sería cómodo tenerla como una propiedad más publicada en el inspector de objetos pero por el momento no está incluida, con lo cual hay que realizarlo con código.
TDBEdit.Alignment = taLefttJustify;
TDBEdit.Alignment = tacenter;
TDBEdit.Alignment = taRightJustify;
  • DBMemo, muestra y permite editar un campo de texto en un caja de varias líneas.
  • DBImage, muestra una imágen guardada en la base de datos en un campo tipo BLOB.
  • DBListBox y DBComboBox, permite al usuario introducir valores en el campo de la Base de Datos de entre los mostrados en la lista.
  • DBCheckBox, muestra y permite asignar valores lógicos a un campo, marcando o desmarcando el componente.
  • DBRadioGroup, muestra los elementos en un grupo de selección, permitiendo así asignar de entre ellos el valor del campo.
  • DBCalendar, muestra y permite editar un campo de tipo fecha mediante un calendario gráfico.
  • DBGroupBox, versión de TGroupBox, que permite agrupar una serie de componentes de datos en un formulario.

Componente DBGrid

   Este componente muestra, por defecto todos los campos en forma de tabla. No obstante, poniendo valores en la colección Columns se pueden restringir los campos que se visualizan y dar el ancho y los títulos de las columnas.

   Al parecer hay todavía algunos problemas con la edición en DBGrid, por lo que aunque la edición es, sin duda, posible, puede ser más seguro utilizarlo sólo para mostrar datos (poner readonly a verdadero) y utilizar componentes de campo único para la edición.

Componente navegador (DBNavigator)

dbnavigator.PNG


   Este componente le da al usuario control directo sobre el conjunto de datos, permitiéndole:

  • Moverse al registro siguiente, al anterior, al primero o al último.
  • Añadir un nuevo registro (igual que llamar al método dataset.insert)
  • Poner el conjunto de datos en modo de edición
  • Borrar un registro
  • Guardar (Post) o Cancelar los cambios actuales
  • Refrescar los datos (útil en aplicaciones con varios usuarios concurrentes)
Principales propiedades:
  • DataSource: que permite enlazar a la fuente de los datos que se manejarán con el componente.
  • VisibleButtons: permite controlar lo que el usuario puede hacer. Por ejemplo, si no puede borrar, se oculta el botón de borrar. Si se tiene un DBGrid enlazado al dataset, se puede prescindir de los botones para siguiente y anterior.
  • Width: Si no se muestran todos los botones, se puede poner el ancho a la altura por el número de botones.

Artículos de programación de Bases de Datos

Referencias:

Tutoriales / artículos prácticos: