SQL - Criando Consultas Parametrizadas


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á diminuído.

Cada consulta armazenada 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"

Uma vez criada a QueryDef podemos executá-la e manipulá-la como um recordset:

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)

Ou eliminá-la :

db.Querydefs.Delete "Lista_alunos"

Para tirar maior proveito das QueryDefs costuma-se criá-las de forma que aceitem parâmetros , para isto usamos a palavra-chave PARAMETERS para passar um ou mais parâmetros para as consultas SQL.

Suponha que no caso do exemplo anterior gostaríamos 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()

Métodos de QueryDef

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:

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= "DELETE * FROM tblalunos WHERE ativo=False "

set qd=db.CreateQueryDef("Apaga_alunos", Sql )

qd.Execute

As QueryDef possuem as seguintes propriedades:

E por hoje é só.bye...

Referências:


retorna