Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Obtener tipos de datos de campos en una BD. (https://www.clubdelphi.com/foros/showthread.php?t=20381)

daynel 14-04-2005 08:04:13

Obtener tipos de datos de campos en una BD.
 
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:

Código SQL [-]
 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.

Código SQL [-]
 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

Código SQL [-]
 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:

Código SQL [-]
 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

Tipos de datos
 
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

Código:

  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.


La franja horaria es GMT +2. Ahora son las 03:49:08.

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