Array
(
)

Parâmetros em SQL - Como q funciona isso?

Rockbilly
   - 13 ago 2004

Olá pessoal, como que é isso que ainda não entendi, por exemplo no código abaixo:

#Código

ADOQuery1.Close; 
ADOQuery1.SQL.Text := ´delete from tabela where campo = :CampoX and Cliente is null´;
ADOQuery1.Parameters.ParamByName(´CampoX´).Value := DateToStr(dData);
ADOQuery1.ExecSQL;

a minha pergunta. Como é que a sintaxe do SQL, entendi q aquele paramentro :CampoX é um determinado valor? onde atribuo isso, em qual propriedade? Desculpem a minha ignorancia, é que sou newbie em Delphi+BD! Alguem teria paciencia em me explicar?

Grato a uma luz!


Macario
   - 13 ago 2004

Parametros em SQL é o mesmo que variaveis.
Que ao inves de voce ter uma Query fixa ela sera dinamica.

tipo query fixa:


Citação:


ADOQuery1.Close;
ADOQuery1.SQL.Text := ´delete from tabela where Nome = ´Macario´;
ADOQuery1.ExecSQL;



tipo dinamica:


Citação:

ADOQuery1.Close;
ADOQuery1.SQL.Text := ´delete from tabela where campo = :CampoX and Cliente is null´;
ADOQuery1.Parameters.ParamByName(´CampoX´).Value := DateToStr(dData);
ADOQuery1.ExecSQL;


Onde o valor de CampoX voce define em rum-time, atravex de um TEdit, atravez do valor de uma variavel, etc


Qquer coisa tamo ai


Paullus
   - 13 ago 2004

Quem determina isso é o próprio objeto Query.

A propriedade Value é dó tipo Variant. Ou seja, você não precisava nem fazer aquela conversão pra String, podendo ser associado diretamente o valor dData.

Se você pegar uma variável do tipo Variant tem como você saber o tipo de dado que tem lá dentro. Através da função VarType, que, no Delphi 6 pelo menos, se encontra na unit Variants.

Quando você associa o valor à propriedade Value eu acho que o objeto Query faz isso automaticamente e escolhe como converter o valor para encaixar no SQL.

Embora seja uma suposição minha é bem provável que seja desta maneira (porque não vejo outra maneira possível).

Espero que tenha te ajudado.
:D


Rockbilly
   - 13 ago 2004

pessoal, obrigado por postar... mas como por exemplo, eu associo um EDIT ao CampoX. Como q o SQL sabe q este parametro vai referenciar ao EDIT??? Onde eu defino isso? Isso q tá me deixando neurisado!


Macario
   - 13 ago 2004

Supomos que voce tenha que criar uma formulario para consulta de clientes. E esta consulta tem que ser por nome.

Para o usuario poder escolher qualquer cliente,
voce poe um edit (EdNome) para pesquisa.

ai no clique do botão fica assim


Citação:
ADOQuery1.Close;
ADOQuery1.SQL.Text := ´Select * from tabela where nome = :Nome´;
ADOQuery1.Parameters.ParamByName(´Nome´).asString := Ednome.tex;
ADOQuery1.ExecSQL;



isto é uma Query dinamica.


Rockbilly
   - 13 ago 2004

ow, valeu gente fina, agora peguei a lógica!