Parâmetros em SQL - Como q funciona isso?

13/08/2004

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

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 [color=red:b2f62363f0]:CampoX [/color:b2f62363f0]é 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!


Rockbilly

Respostas

13/08/2004

Macario

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

tipo query fixa:

[color=green:2dd52de4e9] ADOQuery1.Close; ADOQuery1.SQL.Text := ´delete from tabela where Nome = ´Macario´; ADOQuery1.ExecSQL; [/color:2dd52de4e9]


tipo dinamica:

[color=yellow:2dd52de4e9] ADOQuery1.Close; ADOQuery1.SQL.Text := ´delete from tabela where campo = :CampoX and Cliente is null´; ADOQuery1.Parameters.ParamByName(´CampoX´).Value := DateToStr(dData); ADOQuery1.ExecSQL; [/color:2dd52de4e9]


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


Responder Citar

13/08/2004

Paullus

Quem determina isso é o próprio objeto Query.

A propriedade [b:fc8553825c]Value[/b:fc8553825c] é 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 [b:fc8553825c]VarType[/b:fc8553825c], que, no Delphi 6 pelo menos, se encontra na unit [b:fc8553825c]Variants[/b:fc8553825c].

Quando você associa o valor à propriedade [b:fc8553825c]Value[/b:fc8553825c] 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


Responder Citar

13/08/2004

Rockbilly

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!


Responder Citar

13/08/2004

Macario

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

ADOQuery1.Close; ADOQuery1.SQL.Text := ´Select * from tabela where nome = [color=red:eafad96472]:Nome[/color:eafad96472]´; ADOQuery1.Parameters.ParamByName(´[color=red:eafad96472]Nome[/color:eafad96472]´).asString := Ednome.tex; ADOQuery1.ExecSQL;



isto é uma Query dinamica.


Responder Citar

13/08/2004

Rockbilly

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


Responder Citar