PDA

Ver la Versión Completa : Obtener tipos de datos de campos en una BD.


daynel
14-04-2005, 08:04:13
Yo me conecto a la base de datos con el ADOConnection, y obtengo la informacion de cuantas tablas y campos tiene cada tabla, pero me hace falta saber el tipo de cada uno de los campos para despues poder realizar varias operaciones sobre ellos en dependencia del tipo.

Neftali [Germán.Estévez]
14-04-2005, 09:59:14
Abre tu Base de Datos de SQL Server y échale un vistazo a las tablas: sysobjects, syscolumns y sysTypes.

La primera te devolverá La lista de todos los objetos de la Base de Datos, entre ellos las tablas.
Ejecuta la consulta, por ejemplo:


SELECT * FROM sysobjects WHERE (name = 'Moneda')


Eso te devolverá un registro que reperesenta la información de la tabla Moneda (por poner una). En ese registro hay un id (recuerdalo); Supongamos para el ejemplo que es el 9876.

Ahora utilizando la tabla syscolumns puedes obtener todos las columnas de todas las tablas; Para saber las de la tabla Moneda utiliza el id.


SELECT * FROM syscolumns WHERE (id = 9876)


Ésta consulta te devolverá todas las columnas de la tabla Moneda. Ahora nos fijamos en una columna llamada xType. Esa columna indica el tipo del dato y para saber cual es ytiliza la tabla SysTypes.

Si ejecutas la consulta


SELECT * FROM systypes


Obtendrás los tipos correspondientes a los valores de la columna xtype de antes.

Finalmente puedes obtener todo la info. con una sóla consulta como ésta:


SELECT syscolumns.name AS COL_NAME, systypes.name AS TYPE_NAME, *
FROM syscolumns INNER JOIN
sysobjects ON syscolumns.id = sysobjects.id INNER JOIN
systypes ON systypes.xtype = syscolumns.xtype
WHERE (sysobjects.name = 'Moneda') AND (systypes.name <> 'sysname')


Te devolverá todos los campos y sus tipos (a parte del resto de información de cada columna) para la tabla llamada Moneda.

LucianoRey
15-04-2005, 23:31:07
Hola, como dices que usas AdoConnection, espero te pueda servir esto:

una vez que tengo en AdoDataSet1 asignada la tabla de la que quiero información


for Contador:=0 to ADODataSet1.FieldCount - 1 do
begin
ADODataSet1.Fields.Fields[Contador].DisplayName; //nombre
ADODataSet1.Fields.Fields[Contador].Size; //tamaño
ADODataSet1.Fields.Fields[Contador].DataType; //tipo
end;


aunque no se si esto soporte todos los tipos que tengas en tu base de datos.