GARANTIR DESCONTO

Fórum Vai para o próximo registro sem dar NEXT...é possivel?? #43370

24/03/2004

0

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

Responder

Posts

24/03/2004

Afarias

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+


Responder

Gostei + 0

24/03/2004

Airton Santos

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.


Responder

Gostei + 0

24/03/2004

Gandalf.nho

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.


Responder

Gostei + 0

24/03/2004

Airton Santos

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


Responder

Gostei + 0

25/03/2004

Gandalf.nho

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


Responder

Gostei + 0

28/03/2004

Airton Santos

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

É muito estranho,

Airton :(


Responder

Gostei + 0

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

Aceitar