Busca em ClientDataSet

Delphi

24/10/2006

Pessoal... tenho um clientdataset.. onde gravo nele informações temporárias.... normalmente 99 registros..
mais presciso efetuar uma busca nesse CDS onde o valor de um campo seja igual a true.... e todos q forem igual a true... deletar.....
alguem tem alguma idéia... estou no aguardo..obrigado


Thiago Coleti

Thiago Coleti

Curtidas 0

Respostas

Steve_narancic

Steve_narancic

24/10/2006

utilize a propriedade filter do clientdataset, depois percorra os registros com while deletando os registros


GOSTEI 0
Thiago Coleti

Thiago Coleti

24/10/2006

na realidade...somente uma correção.. eu não vou deletar... mais sim atualizar os registros..apagando os dados de alguns campos...
mais me da um idéia de linha código por favor.. num tah saindo aki.rs
obrigado..


GOSTEI 0
Macario

Macario

24/10/2006

Ola.

var
begin

  ClientDataSet1.Filter := ´NomedoCampo = ValorTRue´;
  ClientDataSet1.Filtered := true;
  ClientDataSet1.disablecontrols;
  ClientDataSet1.First;
  while not   ClientDataSet1.eof do
    begin
      ClientDataSet1.Edit;
      ClientDataSet1.FieldByName(´Campo´).AsString := NovoValor;
      ClientDataSet1.Post;
      ClientDataSet1.Next;
    end;
  ClientDataSet1.Enablecontrols;
end;




Espero que ajude. 8)


GOSTEI 0
Steve_narancic

Steve_narancic

24/10/2006

Begin
  clientdataset.filter:= ´CAMPO = 10´;
  clientdataset.filtered:= true;
  clientdataset.first;
  while not clientdaset.eof do
  begin
    clientdaset.edit;
    clientdaset[´CAMPO_ALTERAR´]:= ´NOVO VALOR´
    clientdaset.post
    clientdaset.next;
  end;
end;



no codigo acima o clientdaset filtra todos os registro onde campo for 10 e percorro os registros do inicio ao fim alterando o campo CAMPO_ALTERAR para NOVO VALOR.


GOSTEI 0
Macario

Macario

24/10/2006

Ola.

So completando o que [b:d4e77807b8]eu[/b:d4e77807b8] e o colega [b:d4e77807b8]steve_narancic[/b:d4e77807b8] postamos.

Esquecemos de indicar apos o while voce tem que retirar o filtro aplicado ao ClientDataSet.


  ClientDataSet1.Filtered := false;
  ClientDataSet1.Filter := ´´;




:idea:


GOSTEI 0
Thiago Coleti

Thiago Coleti

24/10/2006

Olá Pessoal... obrigado pela ajuda....
a idéia de vc é bem do tipo q presciso.. mais tah ocorrendo um probleminha.... tipo.. eu tenho 5 registro com campo = true..
registro.. 1, 2, 3, 4, 5..
mando apagar... ele apaga os registros impares e pula os pares... não faço idéia pq..

posto aki o código do delete pra vcs analisarem... mais acho q fiz td certo.
         CDSChequesAv.Filter := ´teste = true´;
         CDSChequesAv.Filtered := True;
         CDSChequesAv.DisableControls;
         CDSChequesAv.First;
         while not CDSChequesAv.Eof do begin
            CDSChequesAv.Edit;
            CDSChequesAvfavorecido.Value := ´´;
            CDSChequesAvseq.Value := CDSChequesAvseq.Value;
            CDSChequesAvhistorico.Value := ´´;
            CDSChequesAvdfclct.Value := 0;
            CDSChequesAvvalor.Value := 0;
            CDSChequesAvdtvcto.Value := Date;
            CDSChequesAvemissao.Value := Date;
            CDSChequesAvuso.Value := False;
            CDSChequesAvteste.Value := False;
            CDSChequesAv.Post;
            CDSChequesAv.Next;
         end;
         CDSChequesAv.EnableControls;
         CDSChequesAv.Filtered := False;
         CDSChequesAv.Filter := ´´;

se tiverem alguma idéia..estou no aguardo..obrigado..


GOSTEI 0
Steve_narancic

Steve_narancic

24/10/2006

Remova a linha CDSChequesAv.Next;


GOSTEI 0
Thiago Coleti

Thiago Coleti

24/10/2006

valew kra... funcionou direitinho...


GOSTEI 0
POSTAR