Erro em Loop / Sistema ADO

Delphi

31/08/2005

Bom Dia Pessoal !

Uso FB / IB em conjunto com o sistema ADO no delphi 7 e estou com o seguinte problema em uma query:

while not qryItens.eof do begin
prazo := copy(qryItensPRAZO_ENTR.Value,10,1);
dias := StrToInt(copy(qryItensPRAZO_ENTR.Value,1,3));
if prazo = ´C´ then begin
qryItens.Edit;
qryItensPREV_ENTR.Value := date+dias;
qryItens.Post;
end; // Dias Corridos
end; // While

Mas quando ele tenta fazer o loop manda a mensagem de erro: ´A linha não pode ser encontrada para Atualização. Alguns valores podem ter sido alterados desde que ela foi lida pela ultima vez...´

Alguem poderia ajudar, vi que o problema esta nas variaveis, sera que elas nao conseguem ganhar novos valores a cada volta do loop?
[]´s


Neves777

Neves777

Curtidas 0

Respostas

Rjun

Rjun

31/08/2005

Acho que está faltando um [b:7996b83a12]qryItens.Next[/b:7996b83a12] no seu código.

while not qryItens.eof do 
begin 
  prazo := Copy(qryItens.FieldByName(´PRAZO_ENTR´).Value, 10, 1); 
  dias := StrToInt(Copy(qryItens.FieldByName(´PRAZO_ENTR´).Value, 1, 3)); 
  if prazo = ´C´ then 
  begin 
    qryItens.Edit; 
    qryItensPREV_ENTR.Value := date+dias; 
    qryItens.Post; 
  end; // Dias Corridos 
  qryItens.Next; 
end; // While 



GOSTEI 0
Neves777

Neves777

31/08/2005

Na pressa de passar o código para ca esqueci de escrever o qryItens.Next, mas ele esta sim no codigo e nao esta dando certo

Código:

while not qryItens.eof do
begin
prazo := Copy(qryItens.FieldByName(´PRAZO_ENTR´).Value, 10, 1);
dias := StrToInt(Copy(qryItens.FieldByName(´PRAZO_ENTR´).Value, 1, 3));
if prazo = ´C´ then
begin
qryItens.Edit;
qryItensPREV_ENTR.Value := date+dias;
qryItens.Post;
end; // Dias Corridos
QRYITENS.NEXT;
end; // while


GOSTEI 0
Rjun

Rjun

31/08/2005

Não era mais fácil você criar uma query e fazer a atualização via comando SQL.


GOSTEI 0
Neves777

Neves777

31/08/2005

Não consigui fazer isso por conta dos parametros que têm de ser passsado para a qry, vc podeia me dar uma ajuda???
Obrigado


GOSTEI 0
Rjun

Rjun

31/08/2005

Quais os parâmetros que devem ser passados? No seu código não tem nada que não possa ser conseguido na própria tabela. Eu não conheço IB, então eu te passo o código pro SQL Server e vc modifica pro IB. A única diferença deve estar nas funções de conversão de string para inteiro e para pegar uma substring.

UPDATE Teste2
  SET Prev_Entr = GETDATE() + CAST(SUBSTRING(Prazo_Entr, 1, 3) AS INTEGER)
WHERE
  SUBSTRING(Prazo_Entr, 10, 1) = ´C´



GOSTEI 0
Neves777

Neves777

31/08/2005

Obrigado Rjun, adaptei esse cod que vc me passou ao IB e funcionou perfeitamente, tenho que perder a mania de fazer esse tipo de atualizaco pelo delphi, e usar sempre o SQL para resolver o problema.

Obrigado
[]´s


GOSTEI 0
POSTAR