x

Cómo hacer que una consulta de VBA en Access liste las tablas de una base de datos

Por susan hare
Access almacena información acerca de la estructura de la base de datos en la tabla MSysObjects.
data storage image by Kir from Fotolia.com

Microsoft Access es un sistema de administración de bases de datos para que las personas generen sus propias bases de datos, reportes y formularios de usuario. Access contiene todos los bloques de construcción para desarrollar pequeñas aplicaciones. Puedes crear tablas de datos, procedimientos almacenados, funciones definidas por el usuario y macros, además de reportes y formularios. Todos estos componentes tienen sus propios indicadores o definiciones de registros almacenadas en una tabla oculta del sistema. Access mantiene un registro de cada tabla, reporte, formulario, etc. que creas y almacena información como la fecha en la que dichos elementos fueron creados o actualizados, así como los indicadores del sistema.

Obtener una lista de tablas

Paso 1

Crea una consulta para ejecutar el comando de SQL mostrado a continuación. Esta consulta obtiene una lista de todas las tablas de la base de datos actual de Access. La instrucción where usa el número 1 para indicar que solamente queremos que aparezcan las tablas.

SELECT MSysObjects.Name, MSysObjects.DateCreate, MSysObjects.DateUpdate, MSysObjects.Type, MSysObjects.Flags FROM MSysObjects WHERE MSysObjects.Type = 1

Paso 2

Obtén una lista que tenga solamente las tablas de la base de datos que no sean del sistema, con el ejemplo proporcionado a continuación:

SELECT MSysObjects.Name, MSysObjects.DateCreate, MSysObjects.DateUpdate, MSysObjects.Type, MSysObjects.Flags FROM MSysObjects WHERE MSysObjects.Type = 1 AND MSysObjects.Name Not Like 'MSys'

Paso 3

Obtén una lista que contenga únicamente las tablas no ocultas en la base de datos ejecutando la consulta siguiente:

SELECT MSysObjects.Name, MSysObjects.DateCreate, MSysObjects.DateUpdate, MSysObjects.Type, MSysObjects.Flags FROM MSysObjects WHERE MSysObjects.Type = 1 AND MSysObjects.Flags <> 8

Paso 4

Ordena la lista de las tablas no ocultas que no sean del sistema usando siguiente código SQL:

SELECT MSysObjects.Name, MSysObjects.DateCreate, MSysObjects.DateUpdate, MSysObjects.Type, MSysObjects.Flags FROM MSysObjects WHERE MSysObjects.Type = 1 AND MSysObjects.Flags <> 8 AND MSysObjects.Name Not Like 'MSys*' ORDER BY MSysObjects.Name

Usa la lista de tablas en VBA

Paso 1

Carga tu lista de tablas en un objeto record set usando el código de VBA mostrado a continuación:

Dim rsMisTablas As DAO.Recordset Set rsMisTablas = CurrentDb.OpenRecordset('MiConsulta')

Paso 2

Desplázate mediante un ciclo a través de cada registro obtenido en la consulta.

Dim rsMisTablas As DAO.Recordset Set rsMisTablas = CurrentDb.OpenRecordset('MiConsulta')

Do While Not rsMisTablas.EOF 'Código para manipular información

rsMisTablas.MoveNext Loop

Paso 3

Agrega los nombres de cada tabla a una lista desplegable modificando tu ciclo while:

Dim rsMisTablas As DAO.Recordset Set rsMisTablas = CurrentDb.OpenRecordset('MiConsulta') Me.cmbMiComboBox.Clear

Do While Not rsMisTablas.EOF Me.cmbMiComboBox.AddItem rsMisTablas![Name]

rsMisTablas.MoveNext Loop

Paso 4

Cierra tu objeto record set para que libere la memoria que está usando:

Dim rsMisTablas As DAO.Recordset Set rsMisTablas = CurrentDb.OpenRecordset('MiConsulta') Me.cmbMiComboBox.Clear

Do While Not rsMisTablas.EOF Me.cmbMiComboBox.AddItem rsMisTablas![Name]

rsMisTablas.MoveNext Loop

rsMisTablas.Close Set rsMisTablas = Nothing