clientdataset.eof dentro do while não funciona corretamente

Delphi

21/10/2015

Boa Noite amigos tenho o seguinte código onde tenho um laço de repetição dentro do outro e depois que passa a primeira vez a propriedade .eof do clientdataset fica sempre true, não entrando assim no outro laço de repetição.

for i:=01 to 05 do
begin
data:=(dia + '/' + mes + '/' + ano);
dsfluxo.DataSet.Insert;
frmdados.cdsFluxo.Open;
frmdados.cdsFluxo.FieldByName('fluxo_dia').AsDateTime:=strtodate(data);
frmdados.sqlPesquisas.Close;
frmdados.cdsPesquisas.Active:=false;
frmdados.cdsPesquisas.Close;
frmdados.sqlPesquisas.Sql.Clear;
frmdados.sqlPesquisas.Sql.Text:='SELECT * FROM CONTASARECEBER WHERE CTRECEB_DATAVENCIMENTO='''+data+'''';
frmdados.sqlPesquisas.Open;
frmdados.cdsPesquisas.Active:=true;
frmdados.cdsPesquisas.Open;
somareceber:=0;
while not frmdados.cdsPesquisas.Eof do
begin
Somareceber:= Somareceber + frmdados.cdsPesquisas.FieldByName('CTRECEB_VALOR').Value;
frmdados.cdsPesquisas.Next;
end;
frmdados.cdsFluxo.FieldByName('fluxo_receber').AsFloat:=somareceber;
frmdados.cdsFluxo.ApplyUpdates(0);
dia:=inttostr(i+01);

Quando o for vale 1 passa blz, quando muda para 2 ele não entra no laço do while porque o clientdataset.eof está true.
Alguém pode me ajudar?

Obrigado!
Rafael Luciano

Rafael Luciano

Curtidas 0

Melhor post

Mateus Ribeiro

Mateus Ribeiro

21/10/2015

Bom dia! Antes do "While", seta o seu ClientDataSet para o primeiro registro... Tente isso!

somareceber:=0;
frmdados.cdsPesquisas.First;
while not frmdados.cdsPesquisas.Eof do
GOSTEI 1

Mais Respostas

Rafael Luciano

Rafael Luciano

21/10/2015

Obrigado pela resposta, mas já tentei colocar o first e não adiantou, fiz o teste debugando, e quando ele passa pelo primeiro for o eof fica true e não entra mais no while.
Se alguém puder me ajudar ficarei agradecido.
GOSTEI 0
Total Sistemas

Total Sistemas

21/10/2015

Oi Rafael, vou te dar algumas dicas espero que ajude. Vejo que você usa SQLQuery + DataSetProvider + ClientDataSet. Você pode enxugar seu código e ganhar mais desempenho fazendo da seguinte forma:

frmdados.cdsPesquisas.Close;
frmdados.cdsPesquisas.Command.Text:='SELECT * FROM CONTASARECEBER WHERE CTRECEB_DATAVENCIMENTO='''+data+'''';
frmdados.cdsPesquisas.Open;
somareceber:=0;
while not frmdados.cdsPesquisas.Eof do
begin
Somareceber:= Somareceber + frmdados.cdsPesquisas.FieldByName('CTRECEB_VALOR').Value;
frmdados.cdsPesquisas.Next;
end;
GOSTEI 0
Total Sistemas

Total Sistemas

21/10/2015

Complementando, dei enter sem querer....

Quanto a estar indo para o .eof... coloca um DBGrid e vai debugando pra ver se está trazendo mais de um registro mesmo na sua query...

Abraços!!
GOSTEI 0
Rafael Luciano

Rafael Luciano

21/10/2015

Resolvi o problema fiz outra maneira.
Obrigado pela resposta!!!
GOSTEI 0
POSTAR