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)
-   -   extraer nombre y tipo de campo (https://www.clubdelphi.com/foros/showthread.php?t=37082)

cuscus 02-11-2006 08:30:41

extraer nombre y tipo de campo
 
Hola a todos.
Me gustaria saber si hay alguna manera de hacer una sql a una tabla, de manera que nos devuelva el nombre de los campos de la tabla y el tipo de dato de cada uno


muchas gracias

marcoszorrilla 02-11-2006 09:06:34

Ésta puede ser la idea, pero no sé si funcionará con IbTables.
Código Delphi [-]
function HazSqlTabla(Dataset: TTable): string;
var
  i: Integer;
  str: string;
begin

  try
    Str:='Select ';
    for i := 0 to DataSet.FieldCount-1 do
    begin
      str := str + ' ' + DataSet.Fields[i].FieldName;
        if i <  DataSet.FieldCount-1 then
        Str:= Str+',';
    end;
    Str:=Str+(' FROM ' + DataSet.TableName);
    Result:=str;
  except
  ShowMessage('Se ha producido un Error');
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
s:String;
begin
ShowMessage(HazSqlTabla(Table1));
end;
Un Saludo.

DarKraZY 02-11-2006 11:58:06

Cita:

Empezado por cuscus
hacer una sql a una tabla, de manera que nos devuelva el nombre de los campos de la tabla y el tipo de dato de cada uno

Para esto deberás utilizar las tabla del sistema de Interbase o Firebird. Estas son las comienzan por RDB$. Por ejemplo
Código SQL [-]
select * from RDB$RELATION_FIELDS where ...

Ahora sólo te falta buscar la tabla que contiene la información de los campos, nombres y tipos.

cuscus 02-11-2006 12:12:08

gracias a los 2

lo de las tablas de sistema, quisiera tirar por ahi, pero no encuentro donde guarda el nombre de los campos. esta la tabla RDB$fields, pero ahi guarda un identificador, pero no el nombre del campo. ¿sabes por donde puede estar?

DarKraZY 02-11-2006 15:07:41

En el ejemplo que te he puesto están los nombres de los campos. Pero para vincular con la tabla, tipo y demás deberás esperar a que te conteste otro forero o buscar por Internet.

Un saludo!

Lepe 02-11-2006 19:15:00

Cita:

Empezado por cuscus
gracias a los 2

lo de las tablas de sistema, quisiera tirar por ahi,

¿Por qué? ¿No resulta acaso más cómodo tirar de delphi?:
Código Delphi [-]
var DAtaset : TQuery;
begin
 Dataset.sql.text := 'select * from tabla where codigo = 1'; // solo necesitamos un registro.
Dataset.Open;
Dataset.FieldsDef.Update;
with Dataset.FieldsDef.item[i] do
begin
             case DataType of
              ftUnknown      : TipoDato:= 'ftUnknown';
              ftString       : TipoDato:= 'ftString';
              ftSmallint     : TipoDato:= 'ftSmallint';
              ftInteger      : TipoDato:= 'ftInteger';
              ftWord        : TipoDato:= 'ftWord';
              ftBoolean      : TipoDato:= 'ftBoolean';
             end;
     tipodato := FieldName + ' 'TipoDato; 
end;

Más o menos.

Saludos

DarKraZY 02-11-2006 23:23:51

No lo tengo claro Lepe, pero quizás es algo que está intentando hacer dentro de un procedimiento almacenado (stored procedure). En ese caso si serían de utilidad las tablas del sistema, y de nada le serviría los componentes en Delphi.

jachguate 03-11-2006 00:24:59

El hilo tablas del sistema te será de ayuda.

Hasta luego.

;)

rastafarey 03-11-2006 17:55:53

Resp
 
No tengo estoy en lacasa por lo tanto nu puedo ver las tablas de sistemas para decirte con exactitub.

Pero si usas ibexpert hay puede ver las tablas de sistemas. Si no sabes como encontrar la tabla que quieres mandas a buscar el nombre del campo, si mas no recuerdo esto se relaiona con un dominio y el dominio con el tipo real.

Nota. Pero creo que en las tablas de sistema de aprarecen algo asi como double precision o integer ... no estoy completmanete seguro.

despues de verirficar en la casa te doy el sql exacto.

jachguate 03-11-2006 17:59:04

dicho sql está en el hilo al que hice referencia.

rastafarey 03-11-2006 18:17:08

Rsp
 
Gracias. Osea que no tengo que responder. Ya tienen la respouesta


La franja horaria es GMT +2. Ahora son las 18:24:47.

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