PDA

Ver la Versión Completa : Como puedo obtener el nombre de tabla(s) de una bd access


ctronx
18-10-2004, 19:34:52
Saludos, necesito saber Como puedo obtener el nombre de tabla(s) de una bd access, tengo el nombre el archivo de acces "BASE.MDB" pero este archivo cambia cada semana conserva el mismo nombre pero genera nuevas tablas las cuales no se su nombre, enconces necesito saber el nombre la tabla(s) que contenga el archivo "BASE.MDB".
Espero me puedan ayudar, trabajo con delphi 7 y me conecto a acces por medio de controles zeos y ODBC.

Gracias.

Neftali [Germán.Estévez]
19-10-2004, 10:42:45
...Como puedo obtener el nombre de tabla(s) de una bd access, tengo el nombre el archivo de acces "BASE.MDB" pero este archivo cambia cada semana conserva el mismo nombre pero genera nuevas tablas las cuales no se su nombre, enconces necesito saber el nombre la tabla(s) que contenga el archivo "BASE.MDB".
En access se pueden visualizar las Tablas ocultas y de sistema (busca en las opciones de configuración); Entre las tablas de sistema existe una llamada MSysObjects que contiene todos los objetos existentes en la BAse de DAtos, Tablas, consultas, Listados, Macros,... (a cada uno le corresponde un tipo); Haz una consulta sobre esa tabla con el Tipo de la tablas (creo recordar que es el 1); Sería algo así:


select * from MSysObjects where Type=1

ctronx
19-10-2004, 16:40:17
Intente lo que sugieres pero me marca un error dice que no tengo persimo de READ sobre MSysObjects, sigo intentando, lo unico que quiero es tener un combox con las tablas que contenga mi archivo.MDB de mi conexion.

ctronx
28-10-2004, 01:28:42
Saludos, sigo te niendo el mismo problema no se como resolverlo espero alguien me pueda ayudar, necesito saber Como puedo obtener el nombre de tabla(s) de una bd access, tengo el nombre el archivo de acces "BASE.MDB" pero este archivo cambia cada semana conserva el mismo nombre pero genera nuevas tablas las cuales no se su nombre, enconces necesito saber el nombre la tabla(s) que contenga el archivo "BASE.MDB".

Espero me puedan ayudar, trabajo con delphi 7 y me conecto a acces por medio de controles zeos y ODBC.

Gracias por la ayuda que puedan darme.

Neftali [Germán.Estévez]
28-10-2004, 11:12:15
Otra opción:

¿Tienes posibilidad de conectarte vía ADO? Lo digo por que el componente ADOConnection posee un método llamado GetTableNames que te devuelve una listya con todas las tablas de la Base de Datos (añade además un parámetro que te permite definir si se incluyen las de sistema o no).
Si no tienes posibilidad revisa si en los componentes ZEOS (que comentas que utilizas) existe algun método similar.
En realidad no hace falta que conectes vía ADO, sólo que coloques el componente ADOConnection y configures la conexión correctamente.

ctronx
28-10-2004, 18:48:08
El componente zeos que utilizo no trae el metodo GetTableNames, lo probe con ADOConnection como me aconsejaste y ahi si funciona bien, voy a utilizar ADOConection para esta parte de mi programa.


Muchas gracias.

Juan Ignacio
05-11-2004, 19:19:36
Yo encontre la respuesta aquí: (lo he copiado abajo)
http://www.latiumsoftware.com/es/pascal/0013.php

5. LISTANDO LAS TABLAS Y CONSULTAS EN UNA BASE DE DATOS


Si necesita conocer los nombres de todas las tablas y/o consultas
(vistas) en una base de datos abierta con la BDE, puede usar
DbiOpenTableList para crear un cursor* con todos los nombres de tablas y
consultas, y luego puede leerlo llamando a DbiGetNextRecord como se
muestra en el ejemplo de abajo que guarda los nombres en un cuadro de
lista (ListBox), indicando si corresponden a una tabla o a una
consulta.

(*) Un cursor, para quienes no están al día en la terminología de
las bases de datos, es una "tabla lógica". Por ejemplo cuando
abrimos una tabla o consulta, lo que obtenemos es un cursor, es
decir, un conjunto de datos distribuidos en filas o en columnas,
independientemente que esos datos provengan de una tabla física,
de parte de una tabla, de muchas tablas o de cualquier otra fuente
de datos.

Para probar el ejemplo, simplemente coloque un ListBox y un Button
(botón) en un formulario, y genere el manejador del evento OnClick del
botón:

uses db, dbtables, bde; // No se olvide de incluir la unidad BDE!

procedure TForm1.Button1Click(Sender: TObject);
var
db1: TDatabase;
hCursor: hDBICur; // Cursor con los nombres de tablas y
// consultas
ListDesc: TBLBaseDesc; // Registro del cursor
begin
ListBox1.Clear;
db1 := nil;
try
db1 := TDatabase.Create(nil);
// Establezca las propiedades necesarias para abrir su base de
// datos
db1.DatabaseName := 'Access_ODBC_Test';
db1.LoginPrompt := False;

db1.Connected := True;

// Generar el cursor con los nombres de tablas y consultas
Check(DbiOpenTableList(db1.Handle, False, False, '*', hCursor));

// Moverse por los registros del cursor para obtener los nombres
while (DbiGetNextRecord(hCursor, dbiNOLOCK, @ListDesc, nil)
= dbiErr_None) do
if ListDesc.bView then // ¿Es una consulta?
ListBox1.Items.Add(ListDesc.szName + ' (Consulta)')
else
ListBox1.Items.Add(ListDesc.szName + ' (Tabla)');

// Cerrar el cursor
dbiCloseCursor(hCursor);

db1.Connected := False;
except
db1.Free;
raise;
end;
db1.Free;
end;

En lugar de una variable de tipo TDatabase creada para el propósito,
puede usar un control TDatabase colocado en un formulario, o la
propiedad Database de un control TTable o TQuery.