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

Access almacena información acerca de la estructura de la base de datos en la tabla MSysObjects.
Por susan hare

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