AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Lock conflict on no wait transaction ?
Thema durchsuchen
Ansicht
Themen-Optionen

Lock conflict on no wait transaction ?

Ein Thema von Hansa · begonnen am 6. Mär 2011 · letzter Beitrag vom 8. Mär 2011
 
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

Lock conflict on no wait transaction ?

  Alt 6. Mär 2011, 17:29
Datenbank: Firebird • Version: 2.X • Zugriff über: FibPlus
Hi,

ich will mit dieser Prozedur gleichzeitige Zugriffe im Netzwerk simulieren :

Delphi-Quellcode:
procedure TForm1.WriteData (Nr : integer;bez : string);
begin
  DS.Close;
  DS.SelectSQL.Text := 'SELECT * FROM TESTTABLE WHERE NR='+IntToStr (Nr);
  DS.Open;
  if not DS.IsEmpty then begin
    DS.Edit;
    DS.FieldByName('NR').AsInteger := Nr;
    DS.FieldByName('BEZ').AsString := 'Edit ' + bez;
  end
  else begin
    DS.Insert;
    DS.FieldByName('NR').AsInteger := Nr;
    DS.FieldByName('BEZ').AsString := 'Ins ert ' + bez;
  end;
  DS.Post;
end;

procedure TForm1.btn1Click(Sender: TObject);
var i,j : Integer;
    anfang : TTime;
begin
  anfang := now;
  DB.Open;
  Randomize;
  for i := 1 to 2000 do begin
    j := Random (2);
    WriteData (j,IntToStr(10 * i));
    mem1.Lines.Add(IntToStr(i) + ' Diff. : '+ TimeToStr(now-anfang)+' '+IntToStr (j));
  end;
  WriteTransaction.Commit;
end;
Durch das Random (2) ist ja klar, dass es irgendwo bald krachen wird. Soll es ja auch. Nach kurzer Zeit kommt (sofern das Programm mehrfach gestartet wird) dann auch dieser Fehler :

Zitat:
EFIBInterBaseError. Meldung: 'Form1.DS.UpdateQuery:
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
Lock conflict on no wait transaction.
Deadlock.
Update conflicts with concurrent update.
Ich habe 2 Transaktionen mit diesen Parametern :

TRParams (ReadTransaction) :

read
nowait
read_committed
rec_version


TRParams (WriteTransaction) :

write
nowait
concurrency

Bei Database ist ReadTransaction las DefaultTransaction und WriteTransaction als DefaultUpdateTransaction gesetzt.

Dann noch das Dataset DS. AutoCommit steht auf true. Transaction : ReadTransaction. UpdateTransAction : WriteTransaction.

Jetzt die Frage : wie behandelt man solche Fehler jetzt am besten ? Solche Fehler werden im Realeinsatz zwar eher selten auftreten, behandeln muss man sie aber trotzdem. Wie machen das andere? Sollte man die Transaction-Parameter vielleicht anders setzen ?
Gruß
Hansa
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz