Consulta com 2 ou mais CheckBoxes
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
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
Curtidas 0
Respostas
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
13/04/2007
Valeu Adriano, funcionou!
GOSTEI 0