Insert de vez enquando insere mais registros do mesmo (dupla, tripla, quintuplica inserção)

Delphi

12/05/2010

Pessoal, tenho o seguinte problema:

De vez enquando ao incluir um registro acaba por incluir registros duplicados.


Noto que isso já aconteceu comigo a um ano atrás quando usava SQL Server como banco.

Agora acontece quando estou usando o Firebird.

Uso como componentes de gravação:

SQLConnection+SqlDataset+DataSetProvider+ClientDataset(com comando sql de inserção).

Observei que estes problemas ocorreram no momento em que o servidor só um pouco lento.
Por exemplo ao estar rodando o antivirus.

No sql server só acabou este problema quando pararam de rodar o antivirus no mesmo horário que muitos usuários estão usando o sistema.

Será que se montar stored procedure resolve?

Alguem já vivenciou algo semelhante?
Clayton Silva

Clayton Silva

Curtidas 0

Respostas

Carlos Mazzi

Carlos Mazzi

12/05/2010

Dificilmente seria por processo da maquina, como um antivirus, ou coisa do tipo.. senao servidores comuns, estariam ferrados!   Voce tem algum metodo rodando com algum componente tTimer(relogio), isso pode dificultar algumas coisas, no meio,...   Ou reveja algum laço, que vc tem de teste, ou nos metodos de insercao dos seus cadastros.. (Isso é se acontece em qualquer tela de cadastro de sua aplicacao, caso contrario, vc tem um erro pontual, ou seja, somente em uma ou outra tela...)    
GOSTEI 0
Clayton Silva

Clayton Silva

12/05/2010

Dificilmente seria por processo da maquina, como um antivirus, ou coisa do tipo.. senao servidores comuns, estariam ferrados!   Voce tem algum metodo rodando com algum componente tTimer(relogio), isso pode dificultar algumas coisas, no meio,...   Ou reveja algum laço, que vc tem de teste, ou nos metodos de insercao dos seus cadastros.. (Isso é se acontece em qualquer tela de cadastro de sua aplicacao, caso contrario, vc tem um erro pontual, ou seja, somente em uma ou outra tela...)    
Laço não tem,   Timer tem no form principal.   Vou rever...
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

12/05/2010

sempre que você fizer algo dentro de um timer, desligue-o assim que entrar e religue-o antes de sair, porque se você tiver um procedimento que leva mais tempo que o intervalo do timer, os processos poderão "encavalar". se isso for um problema, faça:


procedure TForm1.Time1Timer(Sender TObject);
begin
  Timer1.Enabled := False; // desliga o timer

  try
    [seus procedimentos e cração de objetos]
  finnaly
    [destroi os objetos criados]
    Timer1.Enabled := True; // religa o timer
  end

end
GOSTEI 0
POSTAR