Vai para o próximo registro sem dar NEXT...é possivel??

Firebird

24/03/2004

Colegas,

Estou trabalhando com DELPHI7/IB6/DBX/CLIENTDATASET(CDS).

Mas está acontecendo uma coisa inesperada em meu programa. Trabalho com dois CDS´s.

Acontece que numa rotina de While, o registro do 2.o CDS pula para o proximo sem a instrução NEXT.

Isto é possível ?? eu não tenho relacionamento de índices.

Como o registro pode pular para o próximo sem NEXT. Eu usei o DEBUG várias vezes e verifiquei que isso ocorre.

Alguem já viu isso ??

Sou novato no Interbase. Eu trabalhava com PARADOX.

Obrigado,

Airton

PS: Abaixo está a rotina onde o evento ocorre. O registro do CDSProd pula sem que eu passe pela instrução de NEXT. Eu percebi que, quando o registro do 2.o CDS (MovEst) pula, porque eu dei NEXT, o registro do 1.o CDS pula automáticamente. E isto não poderia acontecer.

// calcula preço medio de compra - ENTRADA
dm.CDSProd.First;
while dm.CDSProd.eof = false do // while Prod
begin
dm.CDSMovEst.FindKey([dm.CDSProdCODIGO.AsString]);
if dm.CDSProdCODIGO.AsString <> dm.CDSMovEstCODIGOPROD.AsString then // nao tem movimento
begin
progressbar1.position:=progressbar1.Position + 1;
dm.CDSProd.Next;
end else // achou movimento
begin
while (dm.CDSProdCODIGO.AsString = dm.CDSMovEstCODIGOPROD.AsString) and
(dm.CDSMovEst.eof = false) do // while MovEst
begin
if (dm.CDSMovEstTIPOOPERACAO.AsString = ´ENTRADA´) and
(dm.CDSMovEstPRECOUNIT.ascurrency <> 0) then
begin
wValor := wValor + (dm.CDSMovEstQtdeUM.asfloat * dm.CDSMovEstPRECOUNIT.asfloat);
wQtde := wQtde + dm.CDSMovEstQtdeUM.asfloat;
end;
dm.CDSMovEst.Next;
end; // fim do while MovEst

if wQtde <> 0 then
begin
dm.CDSProd.Edit;
dm.CDSProdPRMEDCOMPRA.ascurrency := wValor / wQtde;
dm.CDSProd.Post;
dm.cdsprod.applyupdates(-1);
end else
begin
dm.CDSProd.Edit;
dm.CDSProdPRMEDCOMPRA.ascurrency := 0;
dm.CDSProd.Post;
dm.cdsprod.applyupdates(-1);
end;
progressbar1.position:=progressbar1.Position + 1;
dm.CDSProd.Next;
wValor := 0;
wQtde := 0;
end;
end; // fim do while Prod


Airton Santos

Airton Santos

Curtidas 0

Respostas

Afarias

Afarias

24/03/2004

ClientDataSets não tem a ver com o Interbase (ou qualquer outro banco, pois são apenas tabelas de memória)

Não acredito q isso ocorra normalmente no CDS, vc poderia dizer em q momento no código postado ocorre a ´mudança´ de registro??


T+


GOSTEI 0
Airton Santos

Airton Santos

24/03/2004

A. Farias,

Eu tenho a Tabela base que é a PROD e a de movimento que é a MOVEST.
Eu mantenho a tabela base PROD fixa em um registro e fico comparando o codigo de produto com a de movimento MOVEST. Enquanto forem iguais eu faço 2 somas e dou NEXT na de movimento MOVEST. Eu verifiquei pelo DEBUG que no momento em que o codigo de produto da tabela de movimento muda, imediatamente a tabela base muda tambem, mas a tabela base não recebeu next.

É aí que eu fico confuso, pois pelo DEBUG eu vi que não passei por nenhum next para a tabela base.


GOSTEI 0
Gandalf.nho

Gandalf.nho

24/03/2004

As tabelas não estão vinculadas entre si? Se estão, no momento que o registro da tabela pai muda, a tabela filha muda pra acompanhar.


GOSTEI 0
Airton Santos

Airton Santos

24/03/2004

Caro Gandalf,

É exatamente isso !!. Parece que estão vinculadas, pois o codigo de produto é chave no MOVEST (codigo produto+data+hora) e é chave no PROD (codigo de produto). Quando o codigo do produto do MOVEST muda por causa do NEXT, imediatamente muda no PROD. Parece que estão realmente vinculadas. Mas eu não sei nem como se vincula. Eu simplesmente criei as tabelas e acesso a MOVEST com FINDKEY com o codigo do produto da PROD.

Será que o FINDKEY vincula automaticamente ?? (Desculpe a pergunta).

Eu percebo pelo DEBUG que exatamente no momento em que dou NEXT na tabela MOVEST e muda o codigo de produto nela, imediatamente muda o registro na tabela PROD. E não era pra acontecer isso.

É que eu sou novato no interbase e estou apanhando com essas coisas.

Obrigado,

Airton


GOSTEI 0
Gandalf.nho

Gandalf.nho

24/03/2004

A propriedade MasterSource do ClientDataSet filho está setada apontando para a tabela pai?


GOSTEI 0
Airton Santos

Airton Santos

24/03/2004

Não, infelizmente não está setada.

É muito estranho,

Airton :(


GOSTEI 0
POSTAR