ZéLuiz 0 Denunciar post Postado Junho 19, 2006 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
bastard2003 4 Denunciar post Postado Junho 19, 2006 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
ZéLuiz 0 Denunciar post Postado Junho 20, 2006 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