Difference between revisions of "Working With TSQLQuery/es"

From Lazarus wiki
Jump to navigationJump to search
Line 37: Line 37:
 
== Campos de Clave primaria ==
 
== Campos de Clave primaria ==
  
Cuándo se actualizan registros, ''TSQLQuery'' necesita conocer que campos constituyen la clave primaria que se utiliza para modificar un registro y cuáles son los campos que se van a modificar: basándose en esta información construirá la sentencia SQL adecuada UPDATE, INSERT o DELETE.
+
   Cuándo se actualizan registros, ''TSQLQuery'' necesita conocer que campos constituyen la clave primaria que se utiliza para modificar un registro y cuáles son los campos que se van a modificar: basándose en esta información construirá la sentencia SQL adecuada UPDATE, INSERT o DELETE.
  
La creación de la sentencia SQL se controla  con las propiedades ''UsePrimaryKeyAsKey'' y ''ProviderFlags''.
+
   La creación de la sentencia SQL se controla  con las propiedades ''UsePrimaryKeyAsKey'' y ''ProviderFlags''.
  
La propiedad ''Providerflags'' está compuesta de 3 indicadores:
+
   La propiedad ''Providerflags'' está compuesta de 3 indicadores:
#pfInkey: The field is part of the primary key
+
;    ''pfInkey'': El campo forma parte de la clave primaria
; pfInWhere: The field should be used in the WHERE clause of SQL statements.
+
;    ''pfInWhere'': El campo puede utilizarse en la cláusula WHERE de una sentencia SQL.
; pfInUpdate: Updates or inserts should include this field.
+
;    ''pfInUpdate'': LAs modificaciones o inserciones deben incluir este campo.
  
By default, ''ProviderFlags'' consists of ''pfInUpdate'' only.
+
   Por defecto, ''ProviderFlags'' tiene puesto el indicador de  ''pfInUpdate''.
  
If your table has a primary key (as described above) then you only need to set the ''UsePrimaryKeyAsKey'' property to ''True'' and
+
   Si la tabla dispone de un clave primaria (cómo se describe más arriba) es necesario poner la propiedad ''UsePrimaryKeyAsKey'' a verdadera ''True'' y  lo tendremos todo hecho. De esta forma, se establecerá el indicador ''pfInKey'' para los campos de la clave primaria.  
everything will be done for you. This will set the ''pfInKey'' flag for the primary key fields.  
 
  
If the table doesn't have a primary key index, but does have some fields that can be used to uniquely identify the record, then
+
   Si la tabla no dispone de un clave primaria, pero existen campos que permiten individualizar los registros se deberá incluir el indicador ''pfInKey'' en la propiedad ''ProviderFlags'' de todos los registros que identifican el registro cómo único.
you can include the ''pfInKey'' option in the ''ProviderFlags'' property all the fields that uniquely determine the record.
 
  
The ''UpdateMode'' property will then determine which fields exactly will be used in the WHERE clause:
+
   La propiedad ''UpdateMode'' determina los registros que pueden ser utilizados en la cláusula WHERE:
  
; upWhereKeyOnly: When ''TSQLQuery'' needs to construct a WHERE clause for the update, it will collect all fields that have the ''pfInKey'' flag in their ''ProviderFlags'' property set, and will use the values to construct a WHERE clause which uniquely determines the record to update -- normally this is only needed for an UPDATE or DELETE statement.
+
;    ''upWhereKeyOnly'': En el momento de construir una cláusula WHERE ''TSQLQuery'' lista todos los campos que tienen el indicador ''pfInKey'' en su propiedad ''ProviderFlags'' y utiliza los valores para crear la cláusula WHERE que determina el registro cómo único para modificar sus valores  -- normalmente esto sólo es necesario para las sentencias UPDATE y DELETE.
  
; upWhereChanged: In addition to the fields that have ''pfInKey'' in the ''ProviderFlags'' property, all fields that have ''pfInWhere'' in their ''ProviderFlags'' [[and that have changed]], will also be included in the WHERE clause.
+
;    ''upWhereChanged'': Además de los campos con el indicador ''pfInKey'' en su propiedad ''ProviderFlags'', los campos con el indicador ''pfInWhere'' [[ y que han sido modificados]], se incluyen en la cláusula WHERE.
  
; upWhereAll: In addition to the fields that have ''pfInKey'' in the ''ProviderFlags'' property, all fields that have ''pfInWhere'' in their ''ProviderFlags'', will also be included in the WHERE clause.
+
;    ''upWhereAll'': Los campos con el indicador ''pfInWhere'' en su propiedad ''ProviderFlags'' serán también incluidos para crear las cláusula WHERE.
  
 
== Controlling the update ==
 
== Controlling the update ==
 
It is possible to specify which fields should be updated: As mentioned above: Only fields that have ''pfInUpdate'' in their ''ProviderOptions'' property will be included in the SQL UPDATE or INSERT statements. By default, ''pfInUpdate'' is always included in the ''ProviderOptions'' property.
 
It is possible to specify which fields should be updated: As mentioned above: Only fields that have ''pfInUpdate'' in their ''ProviderOptions'' property will be included in the SQL UPDATE or INSERT statements. By default, ''pfInUpdate'' is always included in the ''ProviderOptions'' property.

Revision as of 14:08, 7 July 2008

English (en) español (es) français (fr) 日本語 (ja) polski (pl) 中文(中国大陆)‎ (zh_CN)

   Para una referencia general de cómo trabajar con Bases de Datos ver Bases de Datos en Lazarus

Trabajando con TSQLQuery

   El conjunto de datos (DataSet) que devuelve TSQLQuery se puede ver con una instancia de TDBGrid, pero no es muy recomendable para editar los campos de los registros individuales. Para realizar esto en conveniente poner varios componentes ligados a datos para registros individuales, cómo TDBEdit en el formulario, y poner su propiedad DataSource con el valor de nombre de la fuente de datos utilizada. En la propiedad DataField seleccionaremos el nombre del campo (v.gr. 'IDENTIDAD') o una expresión que resulte en una cadena aceptable.

   Si añadimos un componente de navegación TDBNavigator Lazarus TDBNavigator.png resultará muy fácil moverse por los registros y seleccionarlos para editarlos. Cuándo un registro es seleccionado mediante un TDBNavigator o moviendo el cursor en el DBGrid los datos correspondientes del registro se mostrarán en el TDBEdity si se pulsa el botón de Editar Lazarus TDBNavigator.Editar.png, su contenido puede ser modificado. Con el botón Post Lazarus TDBNavigator.Guardar.png podemos confirmar la edición o bien desechar los cambios con Cancelar Lazarus TDBNavigator.Cancelar.png.

   En general el proceso es el siguiente:

  1. Sitúa un componente TSQLQuery en el formulario o móulo de datos, da los valores adecuados a las propiedadesDatabase, Transaction y SQL.
  2. Sitúa un componente TDatasource component, haz que su propiedad Dataset apunte a la instancia de TSQLQuery.
  3. Sitúa un componente TDBGrid en el formulario selecciona en su propiedad Datasource el nombre dado al componente TDatasource anterior.
  4. Opcionalmente sitúa un componente TDBNavigator y da valor a su propiedad Datasource para usar el TDatasource.

   Tras esto poner la propiedad Active a verdadero (True), y podremos ver los datos suministrados por la consulta.

   Los componentes TSQLConnection y TSQLTransaction, que también hemos puesto en el formulario, tienen su propiedad Active a verdadera.

Actualización de datos

   Si es necesario poder Borrar o modificar registros, la Base de datos tiene que

  1. Tener una columna con la Clave Primaria.
  2. Tener un conjunto de campos que individualicen cada registro, que normalmente serán parte del índice único. Este índice no es imprescindible, pero contribuirá a que las consultas sean más rápidas.

   Si no existen ni el campo primario ni esos campos que individualizan un registro será necesario añadir un registro de clave primaria. Esto se realiza preferiblemente al diseñar la estructura de la tabla en el momento de crearla, pero podemos añadirla posteriormente.

   El siguiente código en un cliente MySQL, por ejemplo, añadirá un índice único para su tabla. <delphi> alter table ejemplo1

 add column autoidentificador int 
 primary key auto_increment;</delphi>

   La adición del campo no estropeará nada y permitirá a tus aplicaciones para actualizarlo.

Cambios diferidos (cached)

El componente TSQLQuery guarda los cambios en un espacio de memoria intermedia. Es decir, los cambios no son enviados inmediatamente a la Base de datos, sino que se mantienen en memoria hasta que llamamos al método ApplyUpdates. En ese momento los cambios se transforman en sentencias DML de SQL, y son aplicadas a la Base de datos. Si no se utiliza el método ApplyUpdates, la Base de datos no será actualizada con los cambios locales realizados.

Campos de Clave primaria

   Cuándo se actualizan registros, TSQLQuery necesita conocer que campos constituyen la clave primaria que se utiliza para modificar un registro y cuáles son los campos que se van a modificar: basándose en esta información construirá la sentencia SQL adecuada UPDATE, INSERT o DELETE.

   La creación de la sentencia SQL se controla con las propiedades UsePrimaryKeyAsKey y ProviderFlags.

   La propiedad Providerflags está compuesta de 3 indicadores:

   pfInkey
El campo forma parte de la clave primaria
   pfInWhere
El campo puede utilizarse en la cláusula WHERE de una sentencia SQL.
   pfInUpdate
LAs modificaciones o inserciones deben incluir este campo.

   Por defecto, ProviderFlags tiene puesto el indicador de pfInUpdate.

   Si la tabla dispone de un clave primaria (cómo se describe más arriba) es necesario poner la propiedad UsePrimaryKeyAsKey a verdadera True y lo tendremos todo hecho. De esta forma, se establecerá el indicador pfInKey para los campos de la clave primaria.

   Si la tabla no dispone de un clave primaria, pero existen campos que permiten individualizar los registros se deberá incluir el indicador pfInKey en la propiedad ProviderFlags de todos los registros que identifican el registro cómo único.

   La propiedad UpdateMode determina los registros que pueden ser utilizados en la cláusula WHERE:

   upWhereKeyOnly
En el momento de construir una cláusula WHERE TSQLQuery lista todos los campos que tienen el indicador pfInKey en su propiedad ProviderFlags y utiliza los valores para crear la cláusula WHERE que determina el registro cómo único para modificar sus valores -- normalmente esto sólo es necesario para las sentencias UPDATE y DELETE.
   upWhereChanged
Además de los campos con el indicador pfInKey en su propiedad ProviderFlags, los campos con el indicador pfInWhere y que han sido modificados, se incluyen en la cláusula WHERE.
   upWhereAll
Los campos con el indicador pfInWhere en su propiedad ProviderFlags serán también incluidos para crear las cláusula WHERE.

Controlling the update

It is possible to specify which fields should be updated: As mentioned above: Only fields that have pfInUpdate in their ProviderOptions property will be included in the SQL UPDATE or INSERT statements. By default, pfInUpdate is always included in the ProviderOptions property.