O microsoft Access nos dá a possibilidade de criar e armazenar consultas dentro do arquivo de banco de dados. A vantagem em armazenar as consultas no banco de dados é que para executar uma instrução SQL o JET verifica erros de sintaxe, depois ele tenta otimizar a instrução e a seguir executa a instrução, tudo isto leva tempo e a coisa piora se você estiver executando as mesmas instruções SQl diversas vezes, pois o JET terá que refazer tudo novamente.
Ao criar e armazenar definições de consultas através de instruções SQL o Access analisa a instrução e a otimiza só então ele armazena a instrução original e a otimizada, quando for executar a instrução o trabalho estará feito e o tempo de execução será diminuido.
Cada consulta armazada em um banco de dados Access é um objeto QueryDef, o conjunto de objetos QueryDef compõem a coleção QueryDefs do objeto Database . Então uma QueryDef é uma consulta SQL pré-compilada e pré-otimizada.
Para criar uma QueryDef usamos o método CreateQuery do objeto DataBase ou a criamos diretamente usando o próprio Microsoft Access.
O CreateQuery necessita de dois parâmetros: o nome da QueryDef e a instrução SQL que o cria.
Vejamos com o criar uma consulta SQL e armazená-la no banco de dados:
Para criar uma consulta chamada Lista_Alunos , que lista todos
os alunos por ordem alfabética da tabela tblalunos e armazená-la
no banco de dados Escola.mdb, fazemos o seguinte:
Dim db as Database
Dim qd as QueryDef set db=DbEngineworkspaces(0).Opendatabase(app.path & "\escola.mdb") set qd=db.CreateQueryDef("Lista_alunos", "SELECT * FROM tblalunos ORDER BY nome" |
Dim db as Database
Dim dyn as Recordset set db=DbEngine.Workspaces(0).OpenDatabase(app.path & "\escola.mdb") set dyn=db.QueryDefs("lista_alunos").OpenRecordset(dbOpendynaset) |
db.Querydefs.Delete "Lista_alunos" |
Suponha que no caso do exemplo anterior gostariamos de listar todos
os alunos de uma determinada série, para isso criamos a consulta
e passamos o parâmetro da série desejada :
Dim db as Database
Dim qd as QueryDef Dim dyn as Recordset Dim Sql as String set db=DbEngineworkspaces(0).Opendatabase(app.path & "\escola.mdb") sql= "PARAMETERS pSerie String SELECT * FROM tblalunos WHERE serie = pSerie " sql=sql & " ORDER BY nome " set qd=db.CreateQueryDef("Lista_alunos", Sql ) qd.Parameters("pSerie")= "1" set dyn= qd.OpenRecordset() |
Os métodos usados pelas QueryDefs são: Execute e OpenRecordset.
O método Execute é usado para executar comandos de ação como DELETE ou UPDATE que não retornam um conjunto de registros , é usado também para criar tabelas e índices via instrução SQL.
O método OpenRecordset é usado para retornar um conjunto de registros como resultado da consulta.
Assim para deletar todos os alunos inativos, fazemos:
|