Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Listar la estructura de una DB (https://www.clubdelphi.com/foros/showthread.php?t=67032)

ElDuc 24-03-2010 22:56:02

Listar la estructura de una DB
 
Buenas noches colegas,:)

Necesito hacer un componente que al introducirle el nombre de la base de datos se llene una lista con todas sus tabla y que al seleccionar una tabla de dicha lista, se llene otra lista con los campos de esa tabla y si puede ser con sus propiedades, relaciones etc.

Básicamente sería como un explorador SQL que pueda incorporar en mi aplicación.

Por ejemplo si existe algo así como [SELECT ALL TABLES]

Por fa, ayudadme si podéis.

Saludos.

Casimiro Noteví 24-03-2010 23:00:28

¿Qué base de datos?

Caro 25-03-2010 15:41:16

Hola ElDuc, con componentes puedes utilizar los procedimientos GetTableNames, GetFieldNames de tu componente de base de datos (Database, ADOConnection, SQLConnection....)

Código Delphi [-]
//utilizaremos dos ListBox para llenar las tablas y campos
//Para las tablas
var
 slTablas : TStringList;
begin
 slTablas := TStringList.Create;
 Try
  Database1.GetTableNames(slTablas);
  ListBox1.Items.Assign(slTablas);
 Finally
  slTablas.Free;
 end;

//Para los campos
var
 slCampos : TStringList;
begin
 slCampos := TStringList.Create;
 Try
  Database1.GetFieldNames(ListBox1.Items[ListBox1.ItemIndex],slCampos);
  ListBox2.Items.Assign(slCampos);
 Finally
  slCampos.Free;
 end;

Dependiendo del componente que uses tienes mas opciones, por ejemplo con dbExpress puedes obtener los indices, procedimientos.....

Si quieres hacerlo con consultas, como te dice Casimiro depende de la Base de datos.

Saluditos

ElDuc 25-03-2010 15:58:41

Gracias a ambos por ayudarme,

Ahora aún no sé con qué trabajaré, SQL Server, NySql, ...,

De todas forma la sugerencia de Cero me parece muy interesante porque, según entiendo, esto es independente del tipo de base de datos que se utilice.

Lo probaré esta noche y os comento.

Gracias y hasta luego.

ElDuc 26-03-2010 19:17:00

CONSEGUIDO.

Buenos chicos, esto ya está. aunque más tarde de lo que os dije.

Además de lo que me propuso Cero, que funciona perfectamente, he encontrado lo siguiente:
ADOConnection1.Fields[i].DataType, nos ofrece el tipo de dato definido en la base de datos.
AdoConnection1.Fields[i].Size, nos ofrece el tamaño definido en la base de datos.

Saludos.

afunez2007 26-03-2010 23:12:33

Cita:

Empezado por ElDuc (Mensaje 358517)
CONSEGUIDO.

Buenos chicos, esto ya está. aunque más tarde de lo que os dije.

Además de lo que me propuso Cero, que funciona perfectamente, he encontrado lo siguiente:
ADOConnection1.Fields[i].DataType, nos ofrece el tipo de dato definido en la base de datos.
AdoConnection1.Fields[i].Size, nos ofrece el tamaño definido en la base de datos.

Saludos.

Esto esta interesante, estuve probandolo

Aunque la ultima parte de saber el tipo de datos y el tamaño, no lo he podido conseguir, se podra hacer con TTable?

Digame algo al respecto.

Saludos

Caro 30-03-2010 16:08:17

Cita:

Empezado por afunez2007 (Mensaje 358549)
Aunque la ultima parte de saber el tipo de datos y el tamaño, no lo he podido conseguir, se podra hacer con TTable?

Hola afunez2007, si tiene que ser sobre el DataSet (TTable, TQuery.....) :

Código Delphi [-]
var
 tipo : TFieldType;
 TipoDato : String;
 Size : Integer;
begin
 ...............................................................
 tipo := Query1.Fields[IndiceDelCampo].DataType;
 Case tipo Of
  ftString : TipoDato := 'Character or string field';
  ftInteger : TipoDato := '32-bit integer field';
  ftBoolean : TipoDato := 'Boolean field';
  ftFloat : TipoDato := 'Floating-point numeric field';
  ftCurrency : TipoDato := 'Floating-point numeric field';
  ftDate : TipoDato := 'Date field';
  ftTime : TipoDato := 'Time field';
  ftDateTime : TipoDato := 'Date and time field';
  ftAutoInc : TipoDato := 'Auto-incrementing 32-bit integer counter field';
  ftBlob : TipoDato := 'Binary Large OBject field';
  ................................................................ 
  // Y hay muchos mas
 end;
 Size := Query1.Fields[IndiceDelCampo].DataSize;
 ....................................................

Saluditos

afunez2007 30-03-2010 19:49:12

Logre Listarlas a traves de un Ttable
 
1 Archivos Adjunto(s)
Hola pues al final he logrado hacer lo que estaba intentando con las ideas que Dio Caro.
Le agregue algunas cosillas, adjunto el proyecto para que lo vean.

Saludos


La franja horaria es GMT +2. Ahora son las 02:18:21.

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