Fórum Vai para o próximo registro sem dar NEXT...é possivel?? #43370
24/03/2004
0
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
Curtir tópico
+ 0Posts
24/03/2004
Afarias
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
24/03/2004
Airton Santos
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
24/03/2004
Gandalf.nho
Gostei + 0
24/03/2004
Airton Santos
É 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
25/03/2004
Gandalf.nho
Gostei + 0
28/03/2004
Airton Santos
É muito estranho,
Airton :(
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)