Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ZéLuiz

Project raised exception class EDBEngineError with message 'Couldn

Recommended Posts

estou com um problema bem cabeludo!!......estou criando uma tabela auxiliar que pretendo usar pra gerar relatórios, só que o delphi esta me retornando a seguinte mensagem:

 

"Project Poject1.exe raised exception class EDBEngineError with message 'Couldn´t perform the edit because another user changed the record.'. Process stopped. Use Step or Run to continue."

: o problema: ....não estou conseguindo achar a lógica desse problema, pois quando retiro os dados de uma tabela singela, com 2000 registros, tudo é processado perfeitamente, mas quando uso uma tabela um pouco maior, com 21000 registros, ele me retorna esse erro. Outro problema é que não há lógica no "Bug", ele não para sempre no mesmo registro, cada vez é em um e se eu pausar ele de tempos em tempos ele processa normalmente tambem!!!....

 

alguem será que pode me dar uma luz?......

 

segue o código a ser processado:

 

procedure TFrmRMovSintSel.btgerarClick(Sender: TObject);var clin:string;begin rouparep := 0; if dtfin.Date < dtret.Date then tiposaida := 0 else begin //prepara para saidas retroativas  if rbsc.Checked then tiposaida := 1;  if rbsl.Checked then tiposaida := 2;  if rbrc.Checked then tiposaida := 3;  if rbrl.Checked then tiposaida := 4; end; if not (dtfin.Date <= dtin.Date) then begin //compara a data dos componentes   tbroupas.Open;   tbaux.Open;   tbclinicas.Open;   tbsr.Open;   pb.Max := tbsr.RecordCount;   tbsr.IndexName := 'DataSaida';   tbsr.FindNearest([dtIn.date]);   tbsr.Filter:='DataSaida >= '+''''+formatDateTime('mm/dd/yyyy',dtIn.date)+'''';   while not (tbsr.eof) do begin  // avalia em TODA a tabela CADA dado	 if ((int(tbsr['DataSaida']) >= int(dtIn.date)) and (int(tbsr['DataSaida']) <= int(dtfin.date)))  then 	   begin //a data no banco deve estar entre o periodo estabelecido	   if (tbsr['tipo'] = 1) or (tbsr['tipo'] = 3)then begin 		 begin 			 tbroupas.First; // aqui eu procuro em outra tabela um dado para acrescentar ao relatorio			 tbroupas.FindKey([codroupaaux]);			 descroupaaux := tbroupas['roupa']; //dado a ser acrescentado			 tbclinicas.FindKey([tbsr['CodClin']]);// aqui eu procuro em mais uma tabela outro dado para acrescentar ao relatorio			 descclinica := tbclinicas['Clinica']; //dado a ser acrescentado			 tbaux.IndexName := ''; //uso a chave primária como indice			 cdaux := (intToStr(tbsr['tipo'])+intToStr(tbsr['CodClin'])+tbsr['CodRoupa']); //concateno dados para formar os dados chave da tabela auxiliar			 rouparep := 0; //flag pra adicionar ou nao dados novos à tabela			 if tbaux.FindKey([cdaux]) then begin //verifica se existe o dado na tabela auxiliar, existido somo um campo ao campo da tabela auxiliar, nao existindo acrescento um registro				 tbaux.Edit;				 tbaux['QdeRoupa'] := tbaux['QdeRoupa']+tbsr['QtdePecas'];				 tbaux.Post;				 rouparep := 1; 			 end;			 if not (rouparep = 1) then begin  //não foi achado registro na tabela horiginal, adicionando...				tbaux.Append;				tbaux['CodAux'] :=  cdaux;				tbaux['CodSaida'] :=  tbsr['CodControle'];				tbaux['CodRoupa'] :=  tbsr['CodRoupa'];				tbaux['CodClin'] := tbsr['CodClin'];				tbaux['Roupa'] := descroupaaux;				tbaux['Clinica'] := descclinica;				tbaux['QdeRoupa'] :=  tbsr['QtdePecas'];				tbaux['DataSaida'] := tbsr['DataSaida'];				tbaux['Peso'] := tbsr['PesoTotal'];				tbaux['TipoSaida'] := tiposaida;				tbaux.Post;			 end;		  end;//****	   end;   tbsr.next;   pb.Position := pb.Position + 1;   end;//**** end else begin   showmessage('A data final deve ser posterior à data inicial!');   dtin.SetFocus;   tbroupas.close;   tbaux.close;   tbsr.close;end;

 

Grato desde já,

 

Zé!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse erro ocorre pq no momento q você esta executando o evento alguem modificou algum dos dados da tabela, por isso o erro "Couldn´t perform the edit because another user changed the record" com a tabela de 2000 registros executa mais rapido não acontec de alguem mudar nada... mas se alguem mudar... tb vai dar esse erro...

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse erro ocorre pq no momento q você esta executando o evento alguem modificou algum dos dados da tabela, por isso o erro "Couldn´t perform the edit because another user changed the record" com a tabela de 2000 registros executa mais rapido não acontec de alguem mudar nada... mas se alguem mudar... tb vai dar esse erro...

.....então....um detalhe que esqueci de dizer é:......o programa ta rodando localmente!!!......só eu estou usando a base de dados!!!........daí torna o problema mais chato ainda, pq ele ta me retornando um mensagem na qual diz ocorrer um erro que, pelo descrito, é impossível de ocorrer!!!

 

 

:( :( :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.