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