Consulta com 2 ou mais CheckBoxes

Delphi

13/04/2007

Estou com dúvidas pra realizar a consulta abaixo, quando seleciono um dos checkboxes, a consulta funciona normalmente. Mas ao selecionar os 2 checkboxes, a consulta retorna apenas o resultado da checkbox de baixo, o que devo fazer?

if ordenar.Checked then
begin
dm.qryclientes.Close;
dm.qryclientes.SQL.Clear;
dm.qryclientes.SQL.Add(´SELECT * FROM cliente´);
case coluna.ItemIndex of
0: dm.qryclientes.SQL.Add(´ORDER BY codigo´);
1: dm.qryclientes.SQL.Add(´ORDER BY nome´);
2: dm.qryclientes.SQL.Add(´ORDER BY tipo´);
end;
dm.qryclientes.Open;
RVclientes.ProjectFile := ´Relatorio_Clientes.rav´;
RVclientes.Execute;
end
else
if (listar.Checked) then
begin
dm.qryclientes.Close;
dm.qryclientes.SQL.Clear;
dm.qryclientes.SQL.Add(´SELECT * FROM cliente´);
case (coluna3.ItemIndex) of
0: dm.qryclientes.SQL.Add(´WHERE tipo=´Pessoa Física´´);
1: dm.qryclientes.SQL.Add(´WHERE tipo=´Pessoa Jurídica´´);
end;
dm.qryclientes.Open;
RVclientes3.ProjectFile := ´Relatorio_Clientes_3.rav´;
RVclientes3.Execute;
end


Mcsmarmcs

Mcsmarmcs

Curtidas 0

Respostas

Adriano Santos

Adriano Santos

13/04/2007

Estou com dúvidas pra realizar a consulta abaixo, quando seleciono um dos checkboxes, a consulta funciona normalmente. Mas ao selecionar os 2 checkboxes, a consulta retorna apenas o resultado da checkbox de baixo, o que devo fazer? if ordenar.Checked then begin dm.qryclientes.Close; dm.qryclientes.SQL.Clear; dm.qryclientes.SQL.Add(´SELECT * FROM cliente´); case coluna.ItemIndex of 0: dm.qryclientes.SQL.Add(´ORDER BY codigo´); 1: dm.qryclientes.SQL.Add(´ORDER BY nome´); 2: dm.qryclientes.SQL.Add(´ORDER BY tipo´); end; dm.qryclientes.Open; RVclientes.ProjectFile := ´Relatorio_Clientes.rav´; RVclientes.Execute; end else if (listar.Checked) then begin dm.qryclientes.Close; dm.qryclientes.SQL.Clear; dm.qryclientes.SQL.Add(´SELECT * FROM cliente´); case (coluna3.ItemIndex) of 0: dm.qryclientes.SQL.Add(´WHERE tipo=´Pessoa Física´´); 1: dm.qryclientes.SQL.Add(´WHERE tipo=´Pessoa Jurídica´´); end; dm.qryclientes.Open; RVclientes3.ProjectFile := ´Relatorio_Clientes_3.rav´; RVclientes3.Execute; end


Primeiro camarada, procure não duplicar seus códigos, ou seja, aquilo que é fixo no fonte, que é executado mais de uma vez e não muda coloque em um único lugar, assim vc melhora a visualização, manutenção e leitura do código fonte.

Segundo só a sua lógica que ficou um pouquinho errada. Vc está dizendo que se o listar estiver checado faça algo, se não se o segundo estiver checado faça outra coisa, ou seja, é um ou outro. Precisa colocar separados. Veja o código como ficou:

procedure TForm1.Button1Click(Sender: TObject);
begin
  dm.qryclientes.Close;
  dm.qryclientes.SQL.Clear;
  dm.qryclientes.SQL.Add(´SELECT * FROM cliente´);

  if (listar.Checked) then
  begin
    case (coluna3.ItemIndex) of
      0: dm.qryclientes.SQL.Add(´WHERE tipo="Pessoa Física"´);
      1: dm.qryclientes.SQL.Add(´WHERE tipo="Pessoa Jurídica"´);
    end;
    RVclientes3.ProjectFile := ´Relatorio_Clientes_3.rav´;
  end;

  if ordenar.Checked then
  begin
    case coluna.ItemIndex of
      0: dm.qryclientes.SQL.Add(´ORDER BY codigo´);
      1: dm.qryclientes.SQL.Add(´ORDER BY nome´);
      2: dm.qryclientes.SQL.Add(´ORDER BY tipo´);
    end;
    RVclientes.ProjectFile := ´Relatorio_Clientes.rav´;
  end;

  dm.qryclientes.Open;
  RVclientes3.Execute;
end;


Agora, se nenhum dos checks estiver checado a minha ´correção´ só executará as partes:

procedure TForm1.Button1Click(Sender: TObject);
begin
  dm.qryclientes.Close;
  dm.qryclientes.SQL.Clear;
  dm.qryclientes.SQL.Add(´SELECT * FROM cliente´);


  dm.qryclientes.Open;
  RVclientes3.Execute;
end;


Isso significa que não irá passar por nenhum ProjectFile := .... e por nenhuma ordenação ou cláusula where. Precisa definir o que vc quer que o sistema faça. ;)

Ps. Use o botão CODE no editor das mensagens do fórum pra colocar o código do seu exemplo mais legível pra gente. Basta selecionar o código e clicar o botão.


GOSTEI 0
Mcsmarmcs

Mcsmarmcs

13/04/2007

Valeu Adriano, funcionou!


GOSTEI 0
POSTAR