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
Antwort Antwort
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.879 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Lock conflict on no wait transaction ?

  Alt 6. Mär 2011, 20:13
Enteder autocommit oder explizit, aber nicht mischen
Markus Kinzler
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: Lock conflict on no wait transaction ?

  Alt 6. Mär 2011, 20:19
Ich bin für explizit weglassen.
Gruß, Jo
  Mit Zitat antworten Zitat
Hansa

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

AW: Lock conflict on no wait transaction ?

  Alt 6. Mär 2011, 20:33
Äh, was weglassen ? Ganz ohne Transaktionen oder wie ? Mit Firebird ?

Momentaner Stand ist jetzt so (Autocommit = false) :
Delphi-Quellcode:
procedure TForm1.btn1Click(Sender: TObject);
var i,j : Integer;
    anfang : TTime;
    answer : TModalResult;
begin
  anfang := now;
  Randomize;
  for i := 1 to 2000 do begin
    answer := idYes;
    j := Random (25);
    mem1.Lines.Add(IntToStr(i));
    repeat
      if not DB.Connected then
        DB.Open;
      if not WriteTransaction.InTransaction then
        WriteTransaction.StartTransaction;
      if not ReadTransaction.InTransaction then
        ReadTransaction.StartTransaction;
      try
        if DebugHook <> 0 then
          WriteData (j,'IDE '+ IntToStr(10 * i))
        else
          WriteData (j,IntToStr(10 * i));
        if WriteTransaction.InTransaction then
          WriteTransaction.Commit;
        if ReadTransaction.InTransaction then
          ReadTransaction.Commit;
      except
        answer := MessageBox(Self.Handle,'Wiederholen ?','Information',MB_ICONINFORMATION or MB_YESNO);
      end;
    until (Answer = idYes) or (Answer = idNo);
    if Answer = idNo then
      Break;
  end;
  mem1.Lines.Add(IntToStr(i) + ' Diff. : '+ TimeToStr(now-anfang)+' '+IntToStr (j));
end;
Was ist davon zu halten ? Sieht so aus, als würde das so laufen. Allerdings weiss ich nicht genau was da geschrieben wird, sofern "Wiederholen" gedrückt wird.
Gruß
Hansa
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.488 Beiträge
 
Delphi 12 Athens
 
#4

AW: Lock conflict on no wait transaction ?

  Alt 7. Mär 2011, 09:10
"Lock conflict" kann man auch schon zu Begin der Bearbeitung auslösen:

> Benutzer will Objekt bearbeiten
> Dummy-Update auf Objekt

Fall1: Lock conflict
> Rollback
> Meldung an Benutzer
> Ende

Fall2: Objekt ist jetzt für andere Benutzer gesperrt.
> eventuell zusätzlich oder aktualisierte Daten lesen
> Änderungen vornehmen und Posten
> Commit
> Ende
  Mit Zitat antworten Zitat
Hansa

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

AW: Lock conflict on no wait transaction ?

  Alt 7. Mär 2011, 18:13
Jobo, es geht nicht um die Tatsache, dass es Transaktionen gibt. UNd ja, man kann die nicht weglassen. Eine DB braucht eine Transaction und ein Dataset auch usw. und basta. Die "erfinden" sich nicht von alleine eine Transaktion !

Das hier ist allerdings noch wichtig :

Fall2: Objekt ist jetzt für andere Benutzer gesperrt.
> eventuell zusätzlich oder aktualisierte Daten lesen
> Änderungen vornehmen und Posten
> Commit
> Ende
Vor allem das mit den "aktualisierte Daten lesen". Du meinst ja ungefähr so, oder ?
Delphi-Quellcode:
  DS.Close;
  DS.SelectSQL.Text := 'SELECT * FROM TESTTABLE WHERE NR='+IntToStr (Nr);
  DS.Open;
  if not DS.IsEmpty then begin
    DS.Edit;
// neu Lesen, wie weiter ????????
Mit 2. Dataset oder wie ? Mir wäre fast folgendes am liebsten. 3 Datasets. Erstens das Original, zweitens das, was gerade bearbeitet wird. Und dann noch vor dem endgültigen speichern ein neu gelesenes. Dann könnte man nämlich auch eventuell doch zwischenzeitlich gemachte Änderungen behandeln. Nur, wie am besten machen ?
Gruß
Hansa
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: Lock conflict on no wait transaction ?

  Alt 7. Mär 2011, 17:20
Äh, was weglassen ? Ganz ohne Transaktionen oder wie ? Mit Firebird ?
Ganz weglassen natürlich nicht, Transaktionen entstehen ja von allein. Ich meinte natürlich explizites Transaktionshandling im Client, das sollte man (auch in Firebird?!) weglassen können.
Es sei denn, ja weiß ich auch nicht.
Gruß, Jo
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.879 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Lock conflict on no wait transaction ?

  Alt 7. Mär 2011, 21:25
Wegen der verwendeten Versionierung, sind Transaktionen in Firebird unabdingbar ( Alles läuft in Transaktionen)
Markus Kinzler
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#8

AW: Lock conflict on no wait transaction ?

  Alt 7. Mär 2011, 22:05
Welche Versionierung?
Ich kenne mich mit Firebird nicht aus.
Gibt es da besondere Anforderungen oder Gründe für Transaktionen auf Clientseite?
Gruß, Jo
  Mit Zitat antworten Zitat
Hansa

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

AW: Lock conflict on no wait transaction ?

  Alt 7. Mär 2011, 22:37
Welche Versionierung?
Wer nicht mal das weiss, für den ist klar :

Ich kenne mich mit Firebird nicht aus.
Soll jetzt hier etwa einer die absoluten Grundlagen erklären ? In einem Thema, wo es um Mehrplatzsysteme geht oder wie ? Oder wird "lediglich nur" gespammt ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz