Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Componentes ADO y propiedades generales de Base de datos (https://www.clubdelphi.com/foros/showthread.php?t=67841)

MLROJO 08-05-2010 23:45:48

Componentes ADO y propiedades generales de Base de datos
 
Buenas,

Me encuentro realizando un programa, a nivel personal, que me permita poder trabajar con varios gestores de bases de datos.

Este programa, por una parte consiste en permitir realizar selects, updates, inserts sobre tablas de una base de datos sobre la que previamente conectamos.

Por otra parte, muestra la estructura de la base de datos, mostrando tablas, vistas, stored procedures, usuarios propietarios de las tablas, campos clave de una tabla, etc..

Es en esta última donde me encuentro algo mas perdido.

Hasta el momento estoy usando:

Código Delphi [-]
adoConection.GetTableNames(ListBox1.items);


Para obtener las tablas y vistas de la base de datos sobre la que estoy conectado.

Código Delphi [-]
adoConection.GetProcedureNames(ListBox2.items);


Para obtener los stored procedure.

Luego uso una función que recorre la tabla que tenga en un TAdoTable y me muestra el tipo de cada campo y su longitud.

Me gustaria mejorar todo esto un poco y poder obtener el propietario de cada tabla que me devuelve ese GetTableNames y poder distinguir entre vistas y tablas, etc.

Posiblemente me equivoque y tal vez esté buscando una forma de obtener las "propiedades generales" de la base de datos de forma incorrecta, pero no conozco mas que esta forma o bien mediante consultas como:

Código SQL [-]
select * from sysobjects where xtype = 'U'


Que en este caso solo serviria para SQL Server y pretendo que la aplicación pueda trabajar con varios como Intersystems Caché, SQL Server.

En definitiva, creo que no estoy buscando un trozo de código que haga algo en concreto, sino ideas, indicaciones, consejos, pasos a seguir para explotar un poco mejor esa información que creo que se puede obtener toda desde los componentes TAdoConnection y TAdoTable o TAdoQuery.

Gracias de antemano,

Un saludo!

Neftali [Germán.Estévez] 10-05-2010 16:44:11

Normalmente la mayoría de sistemas, poseen un diccionario, aunque el acceso será distinto para los diferentes sistemas.
Tal vez deberías almacenar esas diferencias, para poder acceder de forma diferente a cada uno de ellos.

MLROJO 10-10-2011 21:04:41

Hola,

Retomando un poco este tema y con algo mas de avances, os cuento.

Actualmente cargo un esquema en un DataSet, según el equema que cargo, puedo consultar unas cosas u otras (bases de datos, tablas, etc..).

Código Delphi [-]
ADOConnection1.OpenSchema(siCatalogs, EmptyParam, EmptyParam, ADODataSet1);

Cambiando el primer parámetro, en esete caso siCatalogs, por el esquema que quiera cargar. Permitiendome obtener usuario propietario de tablas, campos clave, etc. etc.

Esto funciona correctamente en SQL Server pero no en todas las bases de datos, no he tenido opción de probar más que en Intersystem Caché y no todos los esquemas me devuelven información.

Realmente no se si es que no utilizo bien los componentes o es que los componentes ADO no funcionan en este aspecto para todas las bases de datos que permiten conectar por ODBC.

El objetivo es intentar minimizar el número de sentencias contra cada diccionario según el motor de base de datos, ya que supongo que esta información se puede obtener de una forma mas o menos "automática", sin tantisima mecanización, o tal vez esté equivocado.

¿Se os ocurre algo?

Gracias.


La franja horaria es GMT +2. Ahora son las 00:16:06.

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