Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

HELENO de Sant'Anna

Como programar RadioGroup?

Recommended Posts

Olá galera,

Estou na fase das consultas no sistema que estou desenvolvendo para a escola onde trabalho. Já fiz os formulários, algumas consultas, porém simplesmente travei em uma consulta que achei que seria fácil.

Mas vamos lá, tenho um formulário de consulta sql com basicamente dois componentes: um RadioGroup e um DBGrid. No RadioGroup, o qual dei o nome de grpFundeb, tenho apenas 02 duas opções: Fundeb 40% e Fundeb 60%. Na minha tabela de funcionários tenho um campo chamado FUNDEB char(1) que armazena "Q" quando o funcionário recebe pela folha dos 40% e "S" quando recebe pela folha dos 60%.

Mas, resumindo a história, o que eu quero e que não estou conseguindo fazer é quando eu clicar em uma das duas opções grpFundeb o DBGrid listar apenas os funcionários que recebem pela opção escolhida no referido RadioGroup, ou seja, quando clicar em Fundeb 40% listar apenas os funcionários que recebem pelos 40% ou quando clicar em Fundeb 60% listar apenas os funcionários que recebem pelos 60%, sem btnBotão ou Edit.

Vejam o código que estou utilizando mas que sei que está errado:

 

procedure TfrmRelFundeb.rgpFundebClick(Sender: TObject);
begin
With dm_dadosSeduc.sql_conRelFunFundeb do
begin
Close;
SQL.Clear;
SQL.Add('select fun_codigo, fun_matricula, fun_nome, fun_fundeb');
SQL.Add('from funcionarios');
if rgpFundeb.ItemIndex = 0 then
SQL.Add('where fun_fundeb = :fundeb40');
ParamByName('fundeb40').Value:=
dm_dadosSeduc.sql_conRelFunFundebFUN_FUNDEB.AsString;
Open;
if rgpFundeb.ItemIndex = 1 then
SQL.Add('where fun_fundeb = :fundeb60');
ParamByName('fundeb60').Value:=
dm_dadosSeduc.sql_conRelFunFundebFUN_FUNDEB.AsString;
Open;
end;
end;
Ajuda são muito bem vindas.
Agradeço desde já.

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Considerando que seus valores são strings fixas na sua gravação, você poderia fazer o seguinte no seu código:

 

 

procedure TfrmRelFundeb.rgpFundebClick(Sender: TObject);
begin
  With dm_dadosSeduc.sql_conRelFunFundeb do
  begin
    Close;
    SQL.Clear;
    SQL.Add('select fun_codigo, fun_matricula, fun_nome, fun_fundeb');
    SQL.Add('from funcionarios');
    //Sugestão: use o case ao invés de vários ifs, pois isso permitirá
    //uma melhora na manutenção futura do código.
    case rgpFundeb.ItemIndex of
     0 : begin
            SQL.Add('where fun_fundeb = :fundeb40');
            ParamByName('fundeb40').Value:= 'Q';
         end;
     1 : begin
            SQL.Add('where fun_fundeb = :fundeb60');
            ParamByName('fundeb60').Value:= 'S';
         end;
    end; //Fechamento do case
    Open;
  end;
end;

 

Note que troquei seus dois ifs do radiogroup por um case, porque ele funciona melhor neste tipo de situação... um outro problema que tinha no seu código é que faltava um begin end nos blocos dos seus ifs, fazendo o programa executar comandos que não deveria quando executava este bloco de comandos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.