Pergunta básica em consulta SQL
Pessoal uma pergunta meio idiota, mas me enrolei para explicar uma função.
Por exemplo, nessa linha abaixo qual a explicação mais lógica de se usar (:)antes das variáveis?
SELECT * FROM PRODUTOS WHERE ID_PRODUTO = :CODIGO and NOME_PRO LIKE :NOME
Por exemplo, nessa linha abaixo qual a explicação mais lógica de se usar (:)antes das variáveis?
SELECT * FROM PRODUTOS WHERE ID_PRODUTO = :CODIGO and NOME_PRO LIKE :NOME
Ricardo
Curtidas 0
Respostas
Jaime Santos
24/01/2014
Todos sabem que quando fazemos consultas onde retornamos muitos valores devemos parametriza-las, porém uma dúvida muito grande em programadores iniciantes é como passar os parâmetros que definimos em uma Query, através de SQL, para ações realizadas, por exemplo, ao clicarmos em um botão "PESQUISAR" ou "GRAVAR".
Vou dar um exemplo simples para um fácil entendimento.
Supondo que temos uma Query de nome qryClientes em um DATA MODULE de nome DM, onde definimos na Query a seguinte instrução SQL:
select * from tbClientes
where nomecliente =:Pnomecliente
Nessa instrução SQL estamos trazendo todos os registros da tabela CLIENTES, porém estamos parametrizando a consulta para que só retorne os dados em que o nome do Cliente seja igual ao parâmetro Pnomecliente. O Delphi já vai entender que Pnomecliente é parâmetro pois ele está após os dois pontos, ou seja, o que estiver após dois pontos ele entende como parâmetro.
Agora precisamos passar um valor para esse parâmetro:
Também para passar o valor vou dar um exemplo simples, onde teremos um Edit para entrarmos com o nome do cliente a ser pesquisado e um Button para pesquisar esse cliente.
No evento OnClick do botão entramos com o seguinte código:
procedure TPrincipal.Button1Click(Sender: TObject);
begin
DM.qryClientes.Close;
DM.qryClientes.ParamByName('Pnomecliente').Value:=(edit1.Text);
DM.qryClientes.Open;
end;
end.
Nessa codificação começamos fechando a Query que está localizada no DATA MODULE, definimos que o parâmetro Pnomecliente da Query que está no DATA MODULE receberá o valor do EDIT1.TEXT e por fim abrimos essa Query.
Uma observação muito importante: se por acaso tivéssemos definido um parâmetro, por exemplo, de data, teríamos que transformar o valor de String para Data da seguinte forma:
. . .
DM.qryClientes.ParamByName('Pdata').Value := strtodate (edit1.Text);
. . .
Fonte: Passando parâmetros para uma Query https://www.devmedia.com.br/passando-parametros-para-uma-query/4186#ixzz2rJGS6cOZ
Vou dar um exemplo simples para um fácil entendimento.
Supondo que temos uma Query de nome qryClientes em um DATA MODULE de nome DM, onde definimos na Query a seguinte instrução SQL:
select * from tbClientes
where nomecliente =:Pnomecliente
Nessa instrução SQL estamos trazendo todos os registros da tabela CLIENTES, porém estamos parametrizando a consulta para que só retorne os dados em que o nome do Cliente seja igual ao parâmetro Pnomecliente. O Delphi já vai entender que Pnomecliente é parâmetro pois ele está após os dois pontos, ou seja, o que estiver após dois pontos ele entende como parâmetro.
Agora precisamos passar um valor para esse parâmetro:
Também para passar o valor vou dar um exemplo simples, onde teremos um Edit para entrarmos com o nome do cliente a ser pesquisado e um Button para pesquisar esse cliente.
No evento OnClick do botão entramos com o seguinte código:
procedure TPrincipal.Button1Click(Sender: TObject);
begin
DM.qryClientes.Close;
DM.qryClientes.ParamByName('Pnomecliente').Value:=(edit1.Text);
DM.qryClientes.Open;
end;
end.
Nessa codificação começamos fechando a Query que está localizada no DATA MODULE, definimos que o parâmetro Pnomecliente da Query que está no DATA MODULE receberá o valor do EDIT1.TEXT e por fim abrimos essa Query.
Uma observação muito importante: se por acaso tivéssemos definido um parâmetro, por exemplo, de data, teríamos que transformar o valor de String para Data da seguinte forma:
. . .
DM.qryClientes.ParamByName('Pdata').Value := strtodate (edit1.Text);
. . .
Fonte: Passando parâmetros para uma Query https://www.devmedia.com.br/passando-parametros-para-uma-query/4186#ixzz2rJGS6cOZ
GOSTEI 0
Douglas
24/01/2014
Gostei da resposta Jaime.
GOSTEI 0
Ricardo
24/01/2014
Todos sabem que quando fazemos consultas onde retornamos muitos valores devemos parametriza-las, porém uma dúvida muito grande em programadores iniciantes é como passar os parâmetros que definimos em uma Query, através de SQL, para ações realizadas, por exemplo, ao clicarmos em um botão "PESQUISAR" ou "GRAVAR".
Vou dar um exemplo simples para um fácil entendimento.
Supondo que temos uma Query de nome qryClientes em um DATA MODULE de nome DM, onde definimos na Query a seguinte instrução SQL:
select * from tbClientes
where nomecliente =:Pnomecliente
Nessa instrução SQL estamos trazendo todos os registros da tabela CLIENTES, porém estamos parametrizando a consulta para que só retorne os dados em que o nome do Cliente seja igual ao parâmetro Pnomecliente. O Delphi já vai entender que Pnomecliente é parâmetro pois ele está após os dois pontos, ou seja, o que estiver após dois pontos ele entende como parâmetro.
Agora precisamos passar um valor para esse parâmetro:
Também para passar o valor vou dar um exemplo simples, onde teremos um Edit para entrarmos com o nome do cliente a ser pesquisado e um Button para pesquisar esse cliente.
No evento OnClick do botão entramos com o seguinte código:
procedure TPrincipal.Button1Click(Sender: TObject);
begin
DM.qryClientes.Close;
DM.qryClientes.ParamByName('Pnomecliente').Value:=(edit1.Text);
DM.qryClientes.Open;
end;
end.
Nessa codificação começamos fechando a Query que está localizada no DATA MODULE, definimos que o parâmetro Pnomecliente da Query que está no DATA MODULE receberá o valor do EDIT1.TEXT e por fim abrimos essa Query.
Uma observação muito importante: se por acaso tivéssemos definido um parâmetro, por exemplo, de data, teríamos que transformar o valor de String para Data da seguinte forma:
. . .
DM.qryClientes.ParamByName('Pdata').Value := strtodate (edit1.Text);
. . .
Fonte: Passando parâmetros para uma Query https://www.devmedia.com.br/passando-parametros-para-uma-query/4186#ixzz2rJGS6cOZ
Vou dar um exemplo simples para um fácil entendimento.
Supondo que temos uma Query de nome qryClientes em um DATA MODULE de nome DM, onde definimos na Query a seguinte instrução SQL:
select * from tbClientes
where nomecliente =:Pnomecliente
Nessa instrução SQL estamos trazendo todos os registros da tabela CLIENTES, porém estamos parametrizando a consulta para que só retorne os dados em que o nome do Cliente seja igual ao parâmetro Pnomecliente. O Delphi já vai entender que Pnomecliente é parâmetro pois ele está após os dois pontos, ou seja, o que estiver após dois pontos ele entende como parâmetro.
Agora precisamos passar um valor para esse parâmetro:
Também para passar o valor vou dar um exemplo simples, onde teremos um Edit para entrarmos com o nome do cliente a ser pesquisado e um Button para pesquisar esse cliente.
No evento OnClick do botão entramos com o seguinte código:
procedure TPrincipal.Button1Click(Sender: TObject);
begin
DM.qryClientes.Close;
DM.qryClientes.ParamByName('Pnomecliente').Value:=(edit1.Text);
DM.qryClientes.Open;
end;
end.
Nessa codificação começamos fechando a Query que está localizada no DATA MODULE, definimos que o parâmetro Pnomecliente da Query que está no DATA MODULE receberá o valor do EDIT1.TEXT e por fim abrimos essa Query.
Uma observação muito importante: se por acaso tivéssemos definido um parâmetro, por exemplo, de data, teríamos que transformar o valor de String para Data da seguinte forma:
. . .
DM.qryClientes.ParamByName('Pdata').Value := strtodate (edit1.Text);
. . .
Fonte: Passando parâmetros para uma Query https://www.devmedia.com.br/passando-parametros-para-uma-query/4186#ixzz2rJGS6cOZ
Bem explicado, mas o que quero dizer é que mesmo que eu não utilize " : " ou " :P " o resultado é o mesmo.
GOSTEI 0
Jaime Santos
24/01/2014
Não compreendi ainda Ricardo, a partir dos 'dois pontos' vc deve colocar o nome que utilizará representando determinado parâmetro ou então escolher o método de não utilizar parâmetros e sim passar os valores diretamente dessa forma não seria necessário você utilizar os 'dois pontos'.
Att.
Att.
GOSTEI 0
Jaime Santos
24/01/2014
Obrigado Douglas.
Gostei da resposta Jaime.
GOSTEI 0