Difference between revisions of "Database field type/es"

From Free Pascal wiki
Jump to navigationJump to search
m (Fixed syntax highlighting; deleted category already in page template)
 
(28 intermediate revisions by 4 users not shown)
Line 1: Line 1:
== Overview ==
+
{{Database field type}}
FCL-DB database fields can have different data types. In datasets, a subset of these types is available. What types are supported differ per dataset type.
 
  
 +
== Descripción ==
  
== Types ==
+
Los tipos utilizados para los [[Databases/es|campos de la base de datos]] FCL-DB son de distintos tipos. En cada dataset podemos encontrar disponible un subconjunto de estos tipos. Cada tipo soportado puede diferir dependiendo del tipo de dataset utilizado.
Currently, the following field types are defined:
 
See [http://lazarus-ccr.sourceforge.net/docs/fcl/db/tfieldtype.html FCL field type documentation]
 
To do: add assignment information (e.g. can you use .AsString) and additional information below.  
 
  
ftADT:
+
== Tipos ==
  
ftArray:
+
Actualmente están definidos los siguientes tipos para campos:
  
ftAutoInc: an autoincrementing integer field.
+
Ver [http://lazarus-ccr.sourceforge.net/docs/fcl/db/tfieldtype.html Documentación de tipos de campos en FCL]
 +
Por hacer: añadir información de asignación (e.g. puedes usar .AsString) e información adicional más abajo por completar. Si alguien con más experiencia en estos temas completa los tipos definidos o añade alguno que no figure vendría bien.
  
ftBCD: a binary coded decimal floating point value
+
(ft = field type = tipo de campo)
  
ftBlob: a binary large object (BLOB), meant to store arbitrary binary data.
+
* ftADT:
  
ftBoolean: a boolean value (yes/no).
+
* ftArray: representa un tipo de dato matriz para Interbase 6/Firebird (matriz de tipos de dato simple tales como varchar e integer). Hay que tener en cuenta que actualmente SQLDB no soporta el tipo de dato matriz.
  
ftBytes: presumably a number of bytes stored as-is. Needs to have its Size property set to work.
+
* ftAutoInc: un campo entero con autoincremento.
  
ftCurrency: a format to precisely store currency values.
+
* ftBCD: un valor decimal codificado en binario de punto flotante.
  
ftCursor:
+
* ftBlob: un objeto binario largo (BLOB: Bynary Large OBject), destinado principalmente para almacenar datos binarios arbitrarios.
 +
:Aquí cabe mencionar que en el caso de PostgreSQL tiene el tipo Bytea (que en Lazarus/FPC podemos definir como BLOB). A modo de ejemplo utilizando el control DBimage, estableciendo el datase en modo edición, podemos cargar desde un fichero dicha imagen (.jpg, .png, .bmp...) mediante loadfromfile, de forma que cuando realicemos el post nos lo ubicará en la base de datos. Podremos ir añadiendo más imágenes y luego navegar en un sentido u otro con un control DBNavigator para visualizarlas. Esto funciona bastante bien (versión 1.4) y así de alguna manera nos olvidamos de estar pendientes de si añade información de formato de fichero, aparte de la información propiamente correspondiente al fichero original de imagen. Para otros tipos de ficheros como sonido y demás se puede cargar la información en el dataset y luego enviarlo al servidor de bases de datos.
  
ftDBaseOle: presumably meant to store OLE objects in a DBase database. Needs to have its Size property set to work.
+
* ftBoolean: un valor booleano (yes/no).
  
ftDataSet: presumably meant to store an entire dataset (possibly to implement master/detail table).
+
* ftBytes: Presumiblemente un número de bytes almacenados tal cual. Precisa tener la propiedad de tamaño definida para que funcione.
  
ftDate: a date without time information.
+
* ftCurrency: a format to precisely store currency values.
  
ftDateTime: date and time information.
+
* ftCursor:
  
ftFMTBcd: Needs to have its Size property set to work.
+
* ftDBaseOle: Por lo visto parece almacenar objetos OLE en una base de datos DBase.  Precisa tener la propiedad de tamaño definida para que funcione.
  
ftFixedChar: a fixed width character field, similar to a Pascal shortstring. Needs to have its Size property set to work.
+
* ftDataSet: Por lo visto parece almacenar un dataset completo (posiblemente para implementar la tabla master/detail)).
  
ftFixedWideChar: a fixed width multibyte character field. Needs to have its Size property set to work.
+
* ftDate: una fecha (date) sin información de hora (time).
  
ftFloat: a floating point numeric type.
+
* ftDateTime: información de fecha (date) y hora (time).
  
ftFmtMemo: Needs to have its Size property set to work.
+
* ftFMTBcd: Necesita tener el tamaño definido para funcionar..
  
ftGraphic: Needs to have its Size property set to work.
+
* ftFixedChar: un campo tipo caracter de ancho fijo, similar al tipo ShortString de Pascal. Precisa tener la propiedad de tamaño definida para que funcione.
  
ftGuid: a field used to store a GUID (Globally Unique Identifier). With the current code, this field needs to have its Size property set to 38.
+
* ftFixedWideChar: un campo de tipo multibyte de caracteres de tamaño fijo. Precisa tener la propiedad de tamaño definida para que funcione.
  
ftIDispatch:
+
* ftFloat: un tipo numérico de punto flotante.
  
ftInteger: an integer field
+
* ftFmtMemo: Precisa tener la propiedad de tamaño definida para que funcione.
  
ftInterface:
+
* ftGraphic: Precisa tener la propiedad de tamaño definida para que funcione.
  
ftLargeint: a field that contains an integer, stores more bytes than an integer and therefore has a larger range.
+
* ftGuid: este tipo de campo se utiliza para almacenar un  GUID (Globally Unique Identifier). Con el código actual este campo tiene establecido un tamaño de 38.
  
ftMemo: stores a variable amount of string/text data; needs no size set.
+
* ftIDispatch:
  
ftOraBlob: presumably stores Oracle BLOB.
+
* ftInteger: un campo tipo entero (integer).
  
ftOraClob: presumably stores Oracle CLOB: an Oracle data type that can hold up to 4 GB of data [http://www.orafaq.com/wiki/CLOB]
+
* ftInterface:
  
ftParadoxOle: presumably meant to store OLE objects in a Paradox database.
+
* ftLargeint: tipo de campo que contiene un entero largo, permitiendo almacenar más bytes que el integer y por tanto tiene un rango numérico mayor.
  
ftReference:
+
* ftMemo: es un tipo de campo que almacena una cantidad variable de datos de tipo cadenas (string) / texto.
  
ftSmallint: an integer type field with less bytes than ftInteger.
+
* ftOraBlob: presumiblemente para almacenar un Oracle BLOB.
  
ftString: stores string data; needs to have its Size property set to the maximum number of characters possible in that field.
+
* ftOraClob: presumiblemente para almacenar Oracle CLOB: un tipo de datos Oracle que puede albergar hasta  4 GB de datos. [http://www.orafaq.com/wiki/CLOB]
  
ftTime: stores time-only data.
+
* ftParadoxOle: presumiblemente para almacenar objetos OLE en bases de datos Paradox.
  
ftTimeStamp: stores date/time data. Probably equivalent to ftDateTime
+
* ftReference:
  
ftTypedBinary: some kind of blob-like field?
+
* ftSmallint: un campo de tipo más pequeño que integer conteniendo menos byte que ftInteger.
  
ftUnknown:
+
* ftString: un campo que almacena datos tipo string (cadena). Necesita tener definida su propiedad de tamaño definida con el número máximo de caracteres a contner.
  
ftVarBytes: presumably a variant with byte/binary data?
+
* ftTime: este campo almacena únicamente datos de tipo horario (time).
  
ftVariant: presumably meant to store variant data.
+
* ftTimeStamp: campo que almacena datos tipo fecha (date) / hora (time). Probablemente equivalente a ftDateTime
  
ftWideMemo: presumably an ftMemo with multibyte characters.
+
* ftTypedBinary: ¿Campo que almacena algo parecido al de BLOB?
  
ftWideString: presumably an ftString with multibyte characters.
+
* ftUnknown:
  
ftWord: presumably stores an integer value
+
* ftVarBytes: presumiblemente una variante de campo para almacenar datos binarios con X bytes.
  
Note that for string type fields, Size indicates the number of characters that can be stored. DataSize indicates the field size in bytes. If you use multibyte characters like UTF8 or UTF16 do, DataSize and Size do not mean the same thing. If you use only ANSI/ASCII characters, DataSize and Size are effectively the same thing.
+
* ftVariant: presumiblemente para almacenar datos Variant.
  
== Defining types in your dataset ==
+
* ftWideMemo: un ftMemo con caracteres widestring (UTF16).
''Todo: write me. Explain various ways of doing things (TFieldDef, TFields) and which dataset supports which methods.''
+
 
 +
* ftWideString: un ftString con caracteres widestring (UTF16).
 +
 
 +
* ftWord: presumiblemente almacena un número tipo word.
 +
 
 +
== Tamaño, Tamaño de datos y Unicode ==
 +
 
 +
Observar que para campos de tipo cadena (string) el tamaño indica el número de caracteres que puede almacenar. DataSize por tanto indica el tamaño del campo en bytes.
 +
 
 +
En caso de utilizar caracteres multibyte como los que maneja UTF8 o UTF16 lógicamente dicho tamaño ya no reflejaría el número de caracteres de forma directa, pero como se indica en caso de utilizarlo únicamente para caracteres en los estándares ANSI/ASCII DataSize (tamaño de dato) y Size (tamaño) indican efectivamente lo mismo.
 +
 
 +
Lo siguiente es una traducción de un fragmento añadido posteriormente a lo anterior por lo que lo añado aquí:
 +
 
 +
Tal y como se indica en [[FPC Unicode support#Introduction]], FPC hasta la vesión 2.6 inclusive, solamente maneja caracteres de simple byte '''ANSI/ASCII'''; no soporta caracteres Unicode/UTF8/UTF16/Unicodestring.
 +
La propiedad read-only DataSize indica el tamaño de campo en bytes.
 +
 
 +
Si utilizas caracteres multibyte (e.g. codificación UTF8 or UTF16/Unicodestring), entonces DataSize y Size no significan lo mismo. Si únicamente utilizas caracteres ANSI/ASCII, entonces DataSize y Size son efectivamente equivalentes.
 +
 
 +
== Definiendo tipos en tu dataset ==
 +
''Por hacer: escribir esta sección entera explicando las distintas maneras de hacer cosas (TFieldDef, TFields) y que tipo de dataset suporta cada método.''
  
 
== Asignando y retornando valores ==
 
== Asignando y retornando valores ==
  
 
Una vez que se tienen definidos los campos en el dataset, se puede asignar y retornar datos en la siguiente manera - aquí se supone que se tiene un dataset llamado FTestDataset:
 
Una vez que se tienen definidos los campos en el dataset, se puede asignar y retornar datos en la siguiente manera - aquí se supone que se tiene un dataset llamado FTestDataset:
<syntaxhighlight>
+
 
 +
<syntaxhighlight lang=pascal>
 
   FTestDataset.Open; //Abre para visualización/edición/inserción
 
   FTestDataset.Open; //Abre para visualización/edición/inserción
 
   FTestDataset.Append;
 
   FTestDataset.Append;
   FTestDataset.Fieldbyname('YourFieldName').Asstring := 'Este es mi campo de datos'; //Supongamos que tu nombre de campo es del tipo memo
+
   FTestDataset.FieldByName('TuNombreDeCampo').Asstring := 'Este es mi campo de datos'; //Supongamos que tu nombre de campo es del tipo memo
 
   FTestDataset.Post; //"Commit (acometer)"/save (salvar) los cambios en el campo al dataset
 
   FTestDataset.Post; //"Commit (acometer)"/save (salvar) los cambios en el campo al dataset
   writeln('YourFieldName has data:' + FTestDataset.Fieldbyname('YourFieldName').Asstring
+
   WriteLn('Tú nombre de campo es:' + FTestDataset.FieldByName('TuNombreDeCampo').AsString
 
   { Retorna el valor del campo en el registro actual. Como no hemos movido el campo deberíamos obtener justamente lo que acabemos de entrar }
 
   { Retorna el valor del campo en el registro actual. Como no hemos movido el campo deberíamos obtener justamente lo que acabemos de entrar }
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 
Para campos de tipo text/memo, utilizar el método AsString.
 
Para campos de tipo text/memo, utilizar el método AsString.
Para campos binarios, se supone que puede utilizarse el método AsString - ''pero debe haber algún otro modo además''
+
Para campos binarios, se supone que puede utilizarse el método AsString - ''pero debe haber algún otro modo además''.
  
 
== ver además ==
 
== ver además ==
 
* [[Databases/es]]
 
* [[Databases/es]]
[[Category:Databases]]
 

Latest revision as of 06:23, 12 February 2020

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

Descripción

Los tipos utilizados para los campos de la base de datos FCL-DB son de distintos tipos. En cada dataset podemos encontrar disponible un subconjunto de estos tipos. Cada tipo soportado puede diferir dependiendo del tipo de dataset utilizado.

Tipos

Actualmente están definidos los siguientes tipos para campos:

Ver Documentación de tipos de campos en FCL Por hacer: añadir información de asignación (e.g. puedes usar .AsString) e información adicional más abajo por completar. Si alguien con más experiencia en estos temas completa los tipos definidos o añade alguno que no figure vendría bien.

(ft = field type = tipo de campo)

  • ftADT:
  • ftArray: representa un tipo de dato matriz para Interbase 6/Firebird (matriz de tipos de dato simple tales como varchar e integer). Hay que tener en cuenta que actualmente SQLDB no soporta el tipo de dato matriz.
  • ftAutoInc: un campo entero con autoincremento.
  • ftBCD: un valor decimal codificado en binario de punto flotante.
  • ftBlob: un objeto binario largo (BLOB: Bynary Large OBject), destinado principalmente para almacenar datos binarios arbitrarios.
Aquí cabe mencionar que en el caso de PostgreSQL tiene el tipo Bytea (que en Lazarus/FPC podemos definir como BLOB). A modo de ejemplo utilizando el control DBimage, estableciendo el datase en modo edición, podemos cargar desde un fichero dicha imagen (.jpg, .png, .bmp...) mediante loadfromfile, de forma que cuando realicemos el post nos lo ubicará en la base de datos. Podremos ir añadiendo más imágenes y luego navegar en un sentido u otro con un control DBNavigator para visualizarlas. Esto funciona bastante bien (versión 1.4) y así de alguna manera nos olvidamos de estar pendientes de si añade información de formato de fichero, aparte de la información propiamente correspondiente al fichero original de imagen. Para otros tipos de ficheros como sonido y demás se puede cargar la información en el dataset y luego enviarlo al servidor de bases de datos.
  • ftBoolean: un valor booleano (yes/no).
  • ftBytes: Presumiblemente un número de bytes almacenados tal cual. Precisa tener la propiedad de tamaño definida para que funcione.
  • ftCurrency: a format to precisely store currency values.
  • ftCursor:
  • ftDBaseOle: Por lo visto parece almacenar objetos OLE en una base de datos DBase. Precisa tener la propiedad de tamaño definida para que funcione.
  • ftDataSet: Por lo visto parece almacenar un dataset completo (posiblemente para implementar la tabla master/detail)).
  • ftDate: una fecha (date) sin información de hora (time).
  • ftDateTime: información de fecha (date) y hora (time).
  • ftFMTBcd: Necesita tener el tamaño definido para funcionar..
  • ftFixedChar: un campo tipo caracter de ancho fijo, similar al tipo ShortString de Pascal. Precisa tener la propiedad de tamaño definida para que funcione.
  • ftFixedWideChar: un campo de tipo multibyte de caracteres de tamaño fijo. Precisa tener la propiedad de tamaño definida para que funcione.
  • ftFloat: un tipo numérico de punto flotante.
  • ftFmtMemo: Precisa tener la propiedad de tamaño definida para que funcione.
  • ftGraphic: Precisa tener la propiedad de tamaño definida para que funcione.
  • ftGuid: este tipo de campo se utiliza para almacenar un GUID (Globally Unique Identifier). Con el código actual este campo tiene establecido un tamaño de 38.
  • ftIDispatch:
  • ftInteger: un campo tipo entero (integer).
  • ftInterface:
  • ftLargeint: tipo de campo que contiene un entero largo, permitiendo almacenar más bytes que el integer y por tanto tiene un rango numérico mayor.
  • ftMemo: es un tipo de campo que almacena una cantidad variable de datos de tipo cadenas (string) / texto.
  • ftOraBlob: presumiblemente para almacenar un Oracle BLOB.
  • ftOraClob: presumiblemente para almacenar Oracle CLOB: un tipo de datos Oracle que puede albergar hasta 4 GB de datos. [1]
  • ftParadoxOle: presumiblemente para almacenar objetos OLE en bases de datos Paradox.
  • ftReference:
  • ftSmallint: un campo de tipo más pequeño que integer conteniendo menos byte que ftInteger.
  • ftString: un campo que almacena datos tipo string (cadena). Necesita tener definida su propiedad de tamaño definida con el número máximo de caracteres a contner.
  • ftTime: este campo almacena únicamente datos de tipo horario (time).
  • ftTimeStamp: campo que almacena datos tipo fecha (date) / hora (time). Probablemente equivalente a ftDateTime
  • ftTypedBinary: ¿Campo que almacena algo parecido al de BLOB?
  • ftUnknown:
  • ftVarBytes: presumiblemente una variante de campo para almacenar datos binarios con X bytes.
  • ftVariant: presumiblemente para almacenar datos Variant.
  • ftWideMemo: un ftMemo con caracteres widestring (UTF16).
  • ftWideString: un ftString con caracteres widestring (UTF16).
  • ftWord: presumiblemente almacena un número tipo word.

Tamaño, Tamaño de datos y Unicode

Observar que para campos de tipo cadena (string) el tamaño indica el número de caracteres que puede almacenar. DataSize por tanto indica el tamaño del campo en bytes.

En caso de utilizar caracteres multibyte como los que maneja UTF8 o UTF16 lógicamente dicho tamaño ya no reflejaría el número de caracteres de forma directa, pero como se indica en caso de utilizarlo únicamente para caracteres en los estándares ANSI/ASCII DataSize (tamaño de dato) y Size (tamaño) indican efectivamente lo mismo.

Lo siguiente es una traducción de un fragmento añadido posteriormente a lo anterior por lo que lo añado aquí:

Tal y como se indica en FPC Unicode support#Introduction, FPC hasta la vesión 2.6 inclusive, solamente maneja caracteres de simple byte ANSI/ASCII; no soporta caracteres Unicode/UTF8/UTF16/Unicodestring. La propiedad read-only DataSize indica el tamaño de campo en bytes.

Si utilizas caracteres multibyte (e.g. codificación UTF8 or UTF16/Unicodestring), entonces DataSize y Size no significan lo mismo. Si únicamente utilizas caracteres ANSI/ASCII, entonces DataSize y Size son efectivamente equivalentes.

Definiendo tipos en tu dataset

Por hacer: escribir esta sección entera explicando las distintas maneras de hacer cosas (TFieldDef, TFields) y que tipo de dataset suporta cada método.

Asignando y retornando valores

Una vez que se tienen definidos los campos en el dataset, se puede asignar y retornar datos en la siguiente manera - aquí se supone que se tiene un dataset llamado FTestDataset:

  FTestDataset.Open; //Abre para visualización/edición/inserción
  FTestDataset.Append;
  FTestDataset.FieldByName('TuNombreDeCampo').Asstring := 'Este es mi campo de datos'; //Supongamos que tu nombre de campo es del tipo memo
  FTestDataset.Post; //"Commit (acometer)"/save (salvar) los cambios en el campo al dataset
  WriteLn('Tú nombre de campo es:' + FTestDataset.FieldByName('TuNombreDeCampo').AsString 
  { Retorna el valor del campo en el registro actual. Como no hemos movido el campo deberíamos obtener justamente lo que acabemos de entrar }

Para campos de tipo text/memo, utilizar el método AsString. Para campos binarios, se supone que puede utilizarse el método AsString - pero debe haber algún otro modo además.

ver además