CheckListBox (recuperando itens)

13/06/2008

1

olá, tenho uma rotina no OnShow de meu formulario que verifica alguns campos de uma determinada tabela, e caso esses campos tenham a letra ´S´ entao checa o item do checklistbox.

campos da tabela: dia_0, dia_1, dia_2, dia_3, dia_4, dia_5, dia_6 = Char

Nessa tabela só tem (e só pode ter) um Unico registro, sendo assim eu dou um First nela para posicionar no primeiro registro e recuperar as informaçoes no CheckListBox da seguinte maneira:

for I := 0 to clbSemana.Items.Count - 1 do
  begin
    //showmessage(DM.cdsAgenda.FieldByName(´DIA_´ + inttostr(i)).AsString);
    if DM.cdsAgenda.FieldByName(´DIA_´ + inttostr(i)).AsString = ´S´  then
    begin
      clbSemana.Checked[i] := true;
    end
      else
       begin
         clbSemana.Checked[i] := false;
       end;
  end;


o Showmessage ali no código recupera exatamente as informaçoes que estao na tabela(algumas tem a letra ´S´), porém meu chekLisBox nao checa os itens...

Ps: CheckListBox tem apenas 7 itens

alguem poderia me dar uma mão?

Valeu!


Responder

Posts

var
  i: byte;
begin
  for I := 0 to clbSemana.Items.Count - 1 do
    clbSemana.Checked[i] := (DM.cdsAgenda.FieldByName(´DIA_´ + inttostr(i)).AsString = ´S´);
end;

veja se não há alguma outra rotina que desmarca os itens.


Responder

13/06/2008

Mahdak

emerson, nao funcionou brother...
vou colocar o código completo aqui... se voce ou alguem mais puder me dar uma luz....

valeu!!!

segue o código abaixo:

var
i:byte;
begin
  DM.Conexao.Open;
  try
    with DM.cdsAgenda do
    begin
      Close;
      Params[1].AsString := ´¬´;
      Open;
      First;
    end;

    if DM.cdsAgendaLOCAL_BKP.AsString = ´CD´ then
    begin
      rg.ItemIndex := 0;
      edtBkp.Enabled := false;
      btnBkp.Enabled := false;
    end
      else
        if DM.cdsAgendaLOCAL_BKP.AsString = ´HD´ then
        begin
          rg.ItemIndex := 1;
          edtBkp.Enabled := true;
          btnBkp.Enabled := true;
        end;


  //todo: nao está checando os itens
  for I := 0 to clbSemana.Items.Count - 1 do
  begin
    clbSemana.Checked[i] := (DM.cdsAgenda.FieldByName(´DIA_´ + inttostr(i)).AsString = ´S´);
  end;

  for I := 0 to clbHorarios.Items.Count - 1 do
  begin
    if DM.cdsAgenda.FieldByName(inttostr(i) +´:00´).AsString = ´S´ then
    begin
      clbHorarios.Checked[i] := true;
    end
      else
        begin
          clbHorarios.Checked[i] := false;
        end;
  end;

  finally
    DM.Conexao.Close;
  end;
end;



Responder
o código parece estar correto. eu reduziria algumas linhas....
var
  i:byte;
begin
  DM.Conexao.Open;
  try
    with DM.cdsAgenda do
    begin
      Close;
      Params[1].AsString := ´¬´;
      Open;
    end;

    edtBkp.Enabled := DM.cdsAgendaLOCAL_BKP.AsString = ´HD´;
    btnBkp.Enabled := edtBkp.Enabled;
    rg.ItemIndex := btnBkp.Enabled;

    //todo: nao está checando os itens
    for I := 0 to clbSemana.Items.Count - 1 do
      clbSemana.Checked[i] := (DM.cdsAgenda.FieldByName(´DIA_´ + inttostr(i)).AsString = ´S´);

    for I := 0 to clbHorarios.Items.Count - 1 do
      clbHorarios.Checked[i] := (DM.cdsAgenda.FieldByName(inttostr(i) +´:00´).AsString = ´S´);
  finally
    DM.Conexao.Close;
  end;
end;

mas os valores estão gravados corretamente nos campos Dia_[i:7909c7ff08]X[/i:7909c7ff08]?

é possível você fornecer um programa reduzido e com os dados? assim poderemos testar de forma mais eficiente.

(o código que eu te passei acima é exatamente o mesmo que você publicou. somente foi simplificado, então não deve fazer diferença na execução, visto que você afirma que não funcionou)


Responder

30/06/2008

Mahdak

Emerson, descobri o problema. era os campos da tabela que estavam com char, size = 10, quando eles deveriam estar com char, size = 1

tudo resolvido agora
valeu pela força!


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira