Criando uma Consulta com ADOX ? 

Esta usando ADO e quer criar uma consulta no banco de dados ?  Deixe a ADOX entrar em cena e o problema será resolvido...

Primeiro quero esclarecer que vamos criar uma consulta sem parâmetros , ou seja , uma consulta não parametrizada. Conforme o tipo de consulta a ADO classifica e agrupa as consultas conforme a seguinte tabela:

Objetos DAO Objetos ADOX  
TableDef Tables Tabelas do banco de dados
QueryDef Views Consultas sem Parâmetros
QueryDef Procedures Consultas com Parâmetros

 Depois , para verificar realmente que a consulta foi criada , vamos exibir todas as consultas usando o método OpenSchema da ADO. Como queremos exibir somente as consultas sem parâmetros temos definir o tipo de tabela que queremos exibir segundo a tabela abaixo:

Tipo de Tabela ( TABLE_TYPE) Descrição
ACCESS TABLE Tabela do Access
SYSTEM TABLE Tabela do Sistema
TABLE Tabela
VIEW Consulta sem parâmetros
LINK Tabela vinculada
PASS-THROUG tabela vinculada via conexão ODBC

Vamos usar o banco de dados Biblio.mdb ( eu renomei para Biblio_2001.mdb ) e criar consultas usando a tabela Publishers:

1- Inicie um novo projeto no VB e no formulário padrão insira os controles conforme a figura abaixo:

2- Referencie as bibliotecas - ADO e ADOX. 

3-) Inclua o código abaixo no evento click do botão de comando - Criar Consulta ( command1 ) :

Private Sub command1_click()
Dim cat As New ADOX.Catalog
Dim cmd As New ADODB.Command

On Error GoTo trata_erro

'abre o catalogo
cat.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & Text1.Text

'agora vamos criar a consulta
cmd.CommandText = " Select * from Publishers"

cat.Views.Append Text2.Text, cmd
MsgBox " Consulta << " & Text2.Text & " >> Criada com sucesso !"

Set cat = Nothing
Exit Sub

trata_erro:
MsgBox Err.Description, vbCritical, "Consulta já existe..."

End Sub

Usando ADOX criamos uma consulta não parametrizada e a incluímos na coleção VIEWS do objeto Catalog ( Cat )

4- Para exibir as consultas presentes no banco de dados e verificar se a nossa consulta realmente esta lá , usamos o seguinte código no evento Click do botão - Ver Consulta - (command2 ):

 

Private Sub Command2_Click()
Dim conn As New ADODB.Connection
Dim rst As ADODB.Recordset

conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & Text1.Text

Set rst = conn.OpenSchema(adSchemaTables)

List1.Clear
While Not rst.EOF
   If rst.Fields("TABLE_TYPE") = "VIEW" Then
      List1.AddItem rst.Fields("TABLE_NAME")
   End If
rst.MoveNext
Wend

End Sub

Aqui , usando o método OpenSchema , exibimos todas as tabela/consultas do tipo igual a VIEW .

É só...