Beruflich Dokumente
Kultur Dokumente
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!
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:
Query1.SQL.Clear;
Query1.SQL.Add('Select * from CLIENTES where Nome = ''Andre Celestino''');
Query1.Open;
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:
Query1.SQL.Clear;
Query1.SQL.Add('Select * from CLIENTES where Nome = ''' + edtNome.Text + '''');
Query1.Open;
Query1.SQL.Clear;
Query1.SQL.Add('Select * from CLIENTES where Nome = :pNome');
Query1.ParamByName('pNome').AsString := edtNome.Text;
Query1.Open;
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:
Query1.SQL.Clear;
Query1.SQL.Add('Select * from CLIENTES where Nome like :pNome');
Query1.ParamByName('pNome').AsString := edtNome.Text + '%';
Query1.Open;
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 “Sub”, o cliente
“Andre Celestino” será encontrado. É como se você dissesse ao banco de dados: “Eu vou digitar só o começo do
nome e você se vira pra encontrar os registros parecidos, haha!”.
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:
Query1.SQL.Clear;
Query1.SQL.Add('Select * from CLIENTES where Codigo = :pCodigo');
Query1.ParamByName('pCodigo').AsInteger := StrToInt(edtCodigo.Text);
Query1.Open;
Há também outras opções para atribuição de valores, como datas (AsDateTime) e valores decimais (AsFloat).
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:
Query1.SQL.Clear;
Query1.SQL.Add('Insert into CLIENTES');
Query1.SQL.Add('(Codigo, Nome, DataNascimento)');
Query1.SQL.Add('values (:pCodigo, :pNome, :pDataNascimento)');
Query1.ParamByName('pCodigo').AsInteger := StrToInt(edtCodigo.Text);
Query1.ParamByName('pNome').AsString := edtNome.Text;
Query1.ParamByName('pDataNascimento').AsDateTime := StrToDate(edtData.Text);
Query1.ExecSQL;
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 (rsrs), também publicarei um artigo sobre utilização da Query como fonte de dados.