Ver Mensaje Individual
  #2  
Antiguo 26-07-2005
Avatar de Rufus
Rufus Rufus is offline
Miembro
 
Registrado: may 2004
Ubicación: Canarias
Posts: 193
Reputación: 21
Rufus Va por buen camino
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
__________________
Milo

Última edición por Rufus fecha: 26-07-2005 a las 10:35:48.
Responder Con Cita