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á 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"

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 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()

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:

- MaxRecords - fixa um limite que um QueryDef pode retornar
- Name - Armazena e define o nome de um consulta
- RecordsAffected - armazena o número de registros afetados por um comando Execute.
- SQL - Retorna o comando SQL que originou a consulta.

E por hoje é só.bye...

retorna