Consulta sql onde esta o erro?

Delphi

18/04/2004

Awe pessoal fmz?
Tipo eu tenho 3 Tcheckbox que seriam o cbdata,cbnome,cbconvenio
E eu queria faze com que conforme o cara selecionasse qual ele queria faze a procura ela faria.
Eu to fazendo o codigo assim:
with FrmRelatorio.ADOQuery1 do
begin
close;
SQL.Clear;
SQL.Add(´Select * From Clientes´);
If cbdata.Checked = true then begin
SQL.add(´Where (Data BETWEEN :PL AND :PA)´);
Parameters.ParamByName(´PL´).Value := edit1.text;
Parameters.ParamByName(´PA´).Value := edit2.text;
end;
if cbnome.Checked = true and cbdata.Checked = true then begin
Sql.add(´AND (Nome = :PI)´);
parameters.ParamByName(´PI´).Value := edit3.Text;
end;
if (cbnome.Checked = true and cbdata.Checked = false) then begin
Sql.add(´Where (Nome = :PI)´);
parameters.ParamByName(´PI´).Value := edit3.Text;
end;
if cbconvenio.Checked = true and (cbdata.Checked = true or cbnome.Checked = true) then begin
SQl.Add(´AND (Convenio = :PO)´);
parameters.ParamByName(´PO´).Value := dbcombobox1.Text;
end;
if cbconvenio.Checked = true and cbdata.Checked = false and cbnome.Checked = false then begin
SQl.Add(´Where (Convenio = :PO)´);
parameters.ParamByName(´PO´).Value := dbcombobox1.Text;
end;
Sql.Add(´ORDER BY Data ASC´);
Open;
end;


E com esse codigo quando seleciono so o cbdata e mando procura ele da esse erro:
Erro de sintaxe (operador faltando) na expressao de consulta ´(Data BETWEEN ? AND ?) Where ( Nome = ?)´

Quando seleciono so o cbnome da esse erro:
Objeto parameter definido incorretamente. As informacoes sao inconsistentes ou imcompletas

Se eu seleciono so o cbconvenio ele da esse erro:
Erro de sintaxe na clausula FROM.

Agora se eu seleciona o cbnome e convenio ele procura certinho e funciona bunito mesma coisa se eu seleciona cbnome e cbdata

E se eu seleciona cbdata com cbconvenio da esse erro:
Objeto parameter definido incorretamente. As informacoes sao inconsistentes ou imcompletas.

E ae pessoal oque que tah errado ai ?
Pois eu quero que independentemente de qual ele seleciona faca a procura direitinho.

Um brigadao pra quem tive podendo me ajuda


Snipa

Snipa

Curtidas 0

Respostas

Everton

Everton

18/04/2004

colega, tente esse código:

Procedure TForm1.SeiLa ....
var fAux: String;
begin
  fAux := ´´;

  with FrmRelatorio.ADOQuery1 do 
  begin 
    close; 
    SQL.Clear; 
    SQL.Add(´Select * From Clientes´); 
   
    fAux := ´ WHERE ´;

    if cbdata.Checked then
    begin 
      SQL.add(fAux + ´ (Data BETWEEN :PL AND :PA)´); 
      Parameters.ParamByName(´PL´).Value := edit1.text; 
      Parameters.ParamByName(´PA´).Value := edit2.text; 
      fAux := ´ AND ´;
    end; 

    if cbnome.Checked then 
    begin 
      Sql.add(fAux + ´ (Nome = :PI)´); 
      Parameters.ParamByName(´PI´).Value := edit3.Text; 
      fAux := ´ AND ´;
    end; 

    if cbconvenio.Checked then 
    begin 
       SQl.Add(fAux + ´ (Convenio = :PO)´); 
       Parameters.ParamByName(´PO´).Value := dbcombobox1.Text; 
    end; 

    Sql.Add(´ORDER BY Data ASC´); 
    Open; 
  end;
end;

Detalhe .... tente passar como AsInteger, AsString ou AsDate ... ao invés de value.



GOSTEI 0
POSTAR