GARANTIR DESCONTO

Fórum clientdataset.eof dentro do while não funciona corretamente #535115

21/10/2015

0

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

Responder

Post mais votado

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

Mateus Ribeiro

Mateus Ribeiro
Responder

Gostei + 1

Mais Posts

21/10/2015

Rafael Luciano

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.
Responder

Gostei + 0

21/10/2015

Total Sistemas

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;
Responder

Gostei + 0

21/10/2015

Total Sistemas

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!!
Responder

Gostei + 0

21/10/2015

Rafael Luciano

Resolvi o problema fiz outra maneira.
Obrigado pela resposta!!!
Responder

Gostei + 0

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

Aceitar