Como fazer uma consulta VBA no Access listar as tabelas em um banco de dados

O Access armazena informações sobre a estrutura do banco de dados na tabela MSysObjects.

Obter uma lista de tabelas

Passo 1

Crie uma consulta para executar o comando SQL mostrado abaixo. Essa consulta obtém uma lista de todas as tabelas no banco de dados atual do Access. A instrução where usa o número 1 para indicar que queremos apenas que as tabelas apareçam.

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

Passo 2

Obtenha uma lista que tenha apenas as tabelas no banco de dados que não são do sistema, com o exemplo fornecido abaixo:

SELECT MSysObjects.Name, MSysObjects.DateCreate, MSysObjects.DateUpdate, MSysObjects.Type, MSysObjects.Flags de MSysObjects WHERE MSysObjects.Type = 1 e MSysObjects.Name não como 'MSys'

Passo 3

Obtenha uma lista que contenha apenas as tabelas não ocultas no banco de dados, executando a seguinte consulta:

SELECT MSysObjects.Name, MSysObjects.DateCreate, MSysObjects.DateUpdate, MSysObjects.Type, MSysObjects.Flags de MSysObjects WHERE MSysObjects.Type = 1 e MSysObjects.Flags 8

Passo 4

Classifique a lista de tabelas não ocultas que não são do sistema usando o seguinte código SQL:

SELECT MSysObjects.Name, MSysObjects.DateCreate, MSysObjects.DateUpdate, MSysObjects.Type, MSysObjects.Flags de MSysObjects WHERE MSysObjects.Type = 1 E MSysObjects.Flags 8 E MSysObjects.Name Não Semelhantes 'MSys *' ORDER BY MSysObjects.Name

Use a lista de tabelas no VBA

Passo 1

Carregue sua lista de tabelas em um objeto de conjunto de registros usando o código VBA mostrado abaixo:

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

Passo 2

Percorra um ciclo através de cada registro obtido na consulta.

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

Do While Não rsMisTablas.EOF 'Code para manipular informações

rsMisTablas.MoveNext Loop

Passo 3

Adicione os nomes de cada tabela a uma lista suspensa que modifique seu ciclo:

Dim rsMisTablas Como conjunto DAO.Recordset rsMisTablas = CurrentDb.OpenRecordset ('MyConsulta') Me.cmbMiComboBox.Clear

Do While Não rsMisTablas.EOF Me.cmbMiComboBox.AddItem rsMisTablas! [Name]

rsMisTablas.MoveNext Loop

Passo 4

Feche o objeto do conjunto de registros para liberar a memória que você está usando:

Dim rsMisTablas Como conjunto DAO.Recordset rsMisTablas = CurrentDb.OpenRecordset ('MyConsulta') Me.cmbMiComboBox.Clear

Do While Não rsMisTablas.EOF Me.cmbMiComboBox.AddItem rsMisTablas! [Name]

rsMisTablas.MoveNext Loop

rsMisTablas.Close Set rsMisTablas = Nothing