Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Conocer el tipo de Campo de una tabla (https://www.clubdelphi.com/foros/showthread.php?t=23687)

subzero 25-07-2005 19:46:57

Conocer el tipo de Campo de una tabla
 
Hola amigos del foro:

Estoy creando un procedimiento que me genere un archivo plano de una tabla que se encuentra en interbase, el proceso de generación del archivo (*.txt) es todo un exito el único problema que tengo es con los campos "Date", ya que cuando en la tabla tengo un valor por ejemplo 25/07/2005 al convertirlo me muestra 2005-07-25.

Alguien conoce o sabe como se puede identificar el tipo del campo en una tabla de interbase en tiempo de ejecución.

Nota:
Estoy utilizando interbase 6.0 y Delphi 7.0

Rufus 26-07-2005 10:30:15

Yo tengo implementado un procedimiento genérico en las base de datos que devuelve los nombres y los tipos de los campos de una tabla que se le sa como parámetro de entrada y devuelve dos parámetros de tipo cadena, uno indicando los nombres de los campos y otro los tipos de los campos, ambos separados por comas. Los tipos son unos números que indican justamente eso, de que tipo es el campo. Sería tal que asi:
Código SQL [-]
CREATE PROCEDURE OBTENERCAMPOS (
TABLA VARCHAR(30)
)
RETURNS (
CAMPOS VARCHAR(500),
TIPOS VARCHAR(80)
)
AS
declare variable uncampo char(30);
declare variable untipo varchar(3);
begin
campos = '';
tipos = '';
for execute statement
'Select lower(a.rdb$field_name),cast(b.rdb$field_type as varchar(3)) from rdb$relation_fields a 
join rdb$fields b on a.rdb$field_source = b.rdb$field_name where a.rdb$relation_name = '''
|| upper(tabla) || '''' into :uncampo, :untipo
do
begin
if (uncampo is not null) then campos = campos || rtrim(uncampo) || ' ';
if (untipo is not null) then tipos = tipos || untipo || ' ';
end
end
;
Luego en mi aplicación hago que cuando necesite saber los tipos de campo que tiene una tabla, lo consulto, por ejemplo si necesito meter los campos de la tabla facturas en un combobox, sabiendo de qué tipo es cada campo hago así:
Código Delphi [-]
dm.QrEscritura.SQL.Text := 'execute procedure obtenercampos(''FACTURAS'')'; 
dm.TrEscritura.StartTransaction;
dm.QrEscritura.ExecQuery;
//Ahora voy a meter los nombres de los campos en un combobox
Cbcampos.Properties.Items.CommaText := dm.QrEscritura.FldByName['CAMPOS'].Asstring;
//y ahora meto los tipos de los campos en una variable TStrings que he declarado anteriormente
Tipos.CommaText := dm.QrEscritura.FldByName['TIPOS'].Asstring;
dm.QrEscritura.Close;
dm.TrEscritura.Commit;
En este caso puedo ver de que tipo es cada campo cuando el usuario selecciona un campo del combobox que he rellenado, simplemente mirando el TStrings "Tipos" y pasandole el índice del combobox.
Aquí algunos de los números de los tipos:
7 -> smallint
8 -> integer
12 -> date
14 ->char
37 -> varchar

Puedes adaptar todo esto a lo que necesites


La franja horaria es GMT +2. Ahora son las 08:44:57.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi