Cómo hacer que una consulta de VBA en Access liste las tablas de una base de datos (En 8 Pasos)

Por susan hare
Cómo hacer que una consulta de VBA en Access liste las tablas de una base de datos (En 8 Pasos)
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