[Delphi] Trabalhando com parâmetros na Query

No último artigo sobre Query no Delphi, eu prometi que publicaria um novo artigo abordando a passagem de parâmetros utilizando Query, não é? Bom, e como promessa é dívida, o melhor é pagar antes que me cobrem, haha.
Pessoal, esse artigo trata da criação e preenchimento de parâmetros em uma SQL de forma dinâmica, evitando fixar valores em tempo de projeto. Confira!

Introdução

A passagem de parâmetros em uma Query é bastante útil quando é necessário atribuir valores previamente desconhecidos em um comando SQL. Em outras palavras, ao invés de criar uma SQL com valores fixos, realizamos um preenchimento dinâmico desses valores em tempo de execução do aplicativo.

Para início de nossos exemplos, considere a seguinte SQL:

É um comando de seleção simples, apenas para obter os dados do cliente que possua o nome “Andre Celestino”. Observe que essa SQL pode ser atribuída normalmente a uma Query da seguinte forma:

Ao abrir a Query, os dados do cliente “Andre Celestino” serão retornados para a aplicação, ok? No entanto, a nossa Query SEMPRE irá trazer esse único registro, já que a aplicação foi compilada com o valor fixo na SQL e não há como modificá-lo. Então temos um problema: e se o usuário quiser visualizar os dados de outro cliente?

Já sei! Basta trocar o nome no código-fonte, compilar e gerar outro executável, não é?
Não, nem pense nisso! A solução é configurar a Query para receber o valor que o usuário digitar. Considere que adicionamos um campo na tela chamado edtNome do tipo TEdit, para que o usuário possa digitar o nome do cliente no qual deseja visualizar os dados. Ao invés de manter o valor fixo, vamos modificar o código para receber o valor do campo de texto:

Caramba, quantas aspas! É necessário tudo isso?
Sim. O nome do cliente é uma string (tipo texto), e precisa ser envolvido em aspas para que o banco de dados consiga interpretar o valor. Agora, imagine que surja a necessidade de filtrar os dados por mais dois campos do tipo texto: “Endereço” e “Cidade”. Bom, tenho certeza que você pensou na quantidade de aspas, certo? Pois é, isso realmente pode dificultar a escrita do código, além de deixar o código-fonte um tanto quanto confuso.

Eis que lhes apresento uma forma bem mais fácil de preencher uma SQL dinamicamente: através de parâmetros.

Parâmetros na Query

Aaaah, até que enfim! Mas como funciona?
Simples, vamos alterar o código mais uma vez:

Nossa, não entendi nada!
Ok, vamos lá. Para criar um parâmetro dentro de uma Query, basta escrever o nome seguido de dois pontos (:), sem espaços conforme o exemplo acima, onde o nome do parâmetro criado é pNome. Isso significa que essa “parte” da SQL será substituída por algum valor em tempo de execução. Em seguida, após declarar o parâmetro, é necessário preenchê-lo utilizando o método ParamByName, que, neste caso, é o conteúdo digitado no campo edtNome.

Pronto! Ao rodar a aplicação, a Query irá retornar os dados do cliente cujo nome foi digitado no componente edtNome!

Só temos mais um probleminha: o registro será encontrado somente se o usuário digitar o nome completo do cliente. Isso é bem inviável, não? Para resolvermos isso, basta realizar uma busca parcial do registro, utilizando a cláusula LIKE na SQL e adicionando o símbolo de porcentagem ao nome:

O símbolo de porcentagem, a grosso modo, permite que o banco de dados selecione todos os registros que contenham parcialmente o nome digitado pelo usuário. Sendo assim, se o usuário digitar somente “Cele”, o cliente “Andre Celestino” será encontrado.

Repare que eu utilizei o comando AsString para atribuir o valor. Este comando indica que o conteúdo que será atribuído ao parâmetro é do tipo string, ou seja, um texto. Se estivéssemos realizando uma busca pelo código do cliente (considerando que o código é do tipo inteiro), então trocaríamos o comando para AsInteger:

Há também outras opções para atribuição de valores, como datas (AsDateTime) e valores decimais (AsFloat).

Inserindo dados com parâmetros

Da mesma forma que criamos parâmetros em uma instrução SELECT, eles também podem ser criados em instruções INSERT, UPDATE ou DELETE. Para exemplificar, confira o exemplo de uma inserção utilizando parâmetros:

Simples, não?

Só pra complementar, veja que utilizei o comando Add para concatenar a instrução SQL em linhas, principalmente para evitar a necessidade de utilizar o operador “+”.

Pessoal, espero que esse artigo tenha sido útil! Os exemplos contidos nesse artigo podem ser baixados neste link, desenvolvidos em Delphi 7. Para que você possa abri-los, é necessário ter o Firebird instalado no computador, ok?

Se você baixar o exemplo, observe que utilizei um TClientDataSet para manter os registros em memória. Em um futuro não tão distante, também publicarei um artigo sobre utilização da Query como fonte de dados.

 

Grande abraço e até mais!


 

André Celestino