|
Obteniendo la lista de todas las tablas y consultas de una base de datos usando la BDE
Copyright © 2000 Ernesto
De Spirito
DbiOpenTableList
Si necesita conocer los nombres de todas las tablas y/o consultas
(vistas) en una base de datos abierta con la BDE (Paradox, Access, etc.), 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.
|