GARANTIR DESCONTO

Fórum CheckListBox - salvar itens checados no cds #339732

01/04/2007

0

olá, ja olhei todas as dicas aqui do forum sobre o assunto, e mesmo assim nao consegui resolver meu impasse que creio, seja simples aos amigos mais atentos.

preciso apenas resgatar o valor de cada item checado no CheckListBox, fazer uma consulta em uma tabela cujo parâmetro é o item resgatado atual, e salvar o resultado da consulta em um ClientDataSet.

atualmente fasso o seguinte:

DM.Conexao.Open;
    try
      for i := 0 to CLB.Items.Count -1  do
      begin
          if CLB.Checked[i]=true then
          // faz consulta na tabela usando como parametro o item checado que foi resgatado do clb 
          with DM.cdsEmprUG do
          begin
              Close;
              CommandText := ´select * from empr_ug where unidade = ´ + QuotedStr(CLB.Items.Strings[i]);
              Open;
          end;
          // insere o resultado da consulta no cds
          cdsUG.insert;
          cdsUGID.AsInteger  := DM.cdsEmprUGID.AsInteger;
          cdsUG.Post;
    end;
    finally
          DM.Conexao.Close;
    end;


nenhum erro ocorre com a rotina acima, porem se eu tiver 5 itens no CheckListBox, e só o primeiro estiver checado, ele irá inserir 5 vezes o valor do item checado... se nada estiver checado ele insere 5 vezes o valor zero no cds

isso deve estar ocorrendo por que coloquei a instrução para inserir no cds dentro do laço ´for´, deve haver um jeito mais indicado de realizar essa operação, alguém se habilita em me ajudar?

abraços!


Mahdak

Mahdak

Responder

Posts

01/04/2007

Adriano Santos

olá, ja olhei todas as dicas aqui do forum sobre o assunto, e mesmo assim nao consegui resolver meu impasse que creio, seja simples aos amigos mais atentos. preciso apenas resgatar o valor de cada item checado no CheckListBox, fazer uma consulta em uma tabela cujo parâmetro é o item resgatado atual, e salvar o resultado da consulta em um ClientDataSet. atualmente fasso o seguinte:
DM.Conexao.Open;
    try
      for i := 0 to CLB.Items.Count -1  do
      begin
          if CLB.Checked[i]=true then
          // faz consulta na tabela usando como parametro o item checado que foi resgatado do clb 
          with DM.cdsEmprUG do
          begin
              Close;
              CommandText := ´select * from empr_ug where unidade = ´ + QuotedStr(CLB.Items.Strings[i]);
              Open;
          end;
          // insere o resultado da consulta no cds
          cdsUG.insert;
          cdsUGID.AsInteger  := DM.cdsEmprUGID.AsInteger;
          cdsUG.Post;
    end;
    finally
          DM.Conexao.Close;
    end;
nenhum erro ocorre com a rotina acima, porem se eu tiver 5 itens no CheckListBox, e só o primeiro estiver checado, ele irá inserir 5 vezes o valor do item checado... se nada estiver checado ele insere 5 vezes o valor zero no cds isso deve estar ocorrendo por que coloquei a instrução para inserir no cds dentro do laço ´for´, deve haver um jeito mais indicado de realizar essa operação, alguém se habilita em me ajudar? abraços!



Se entendi bem basta colocar um begin...end na instrução IF; assim ele só vai inserir se o item ´I´ estiver checado, caso contrário não faz nada.

DM.Conexao.Open;
try
  for i := 0 to CLB.Items.Count -1  do
  begin
    if CLB.Checked[I] then
    begin 
      //faz consulta na tabela usando como parametro o item checado que foi resgatado do clb 
      with DM.cdsEmprUG do
      begin
        Close;
        CommandText := ´select * from empr_ug where unidade = ´ + QuotedStr(CLB.Items.Strings[i]);
        Open;
      end;
      //insere o resultado da consulta no cds
      cdsUG.insert;
      cdsUGID.AsInteger  := DM.cdsEmprUGID.AsInteger;
      cdsUG.Post;
    end;  
  end;
finally
  DM.Conexao.Close;
end;



Responder

Gostei + 0

02/04/2007

Mahdak

bah que vergonha cara, quanto mais velho, mais caduco... :oops:

valeu adriano, deu certo aqui


Responder

Gostei + 0

02/04/2007

Adriano Santos

bah que vergonha cara, quanto mais velho, mais caduco... :oops: valeu adriano, deu certo aqui

Que isso, kkk, eu tb viajo direto...acho que tô ficando véio tb.
Abs


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar