Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Zur Zeit wird keine Benutzertransaktion durchgeführt (https://www.delphipraxis.net/112980-zur-zeit-wird-keine-benutzertransaktion-durchgefuehrt.html)

Sascha-L 30. Apr 2008 16:54

Datenbank: Firebird • Version: 1.5 • Zugriff über: BDE

Zur Zeit wird keine Benutzertransaktion durchgeführt
 
Guten Tag,

In einem unserer alten Delphi 4 Projekte bekommen wir manchmal folgende Fehlermeldung:
Zur Zeit wird keine Benutzertransaktion durchgeführt.

Wieso kommt diese Fehlermeldung, obwohl vor dem Commit oder Rollback auf jeden Fall eine Transaktion gestartet wurde?

Hier der Codeausschnitt:

Delphi-Quellcode:
Function TOptiThread.AddNewInputdatenNewLog(Ex_DrehWinkel: Integer;
                                             Var Ex_LaufIdx: Integer): Boolean;
Begin
  Result := False;
  Ex_LaufIdx := 0;
  If Not Assigned(Cl_StoredProc33) Then Exit;
  If DB.InTransaction = False Then DB.StartTransaction;
  Try
    With Cl_StoredProc33 Do
    Begin
      Cl_DatHelp.R_Data1 := Cl_OneOptidaten.Teleg3ALaufIdx;
      Cl_DatHelp.R_Data2 := Cl_OneOptidaten.IstLaufIdx;
      Cl_DatHelp.R_Data3 := Ex_DrehWinkel;
      Params[0].Value := Cl_OneOptidaten.Teleg3ALaufIdx;
      Params[1].Value := Cl_OneOptidaten.IstLaufIdx;
      Params[2].Value := Ex_DrehWinkel;
      ExecProc;
      DB.Commit;
      Ex_LaufIdx := Params[3].Value;
      Result := True;
    End;
  Except
    BDEFehlerAuswertung(0,'AddNewInputdatenNewLog',Exception(ExceptObject),True);
    DB.RollBack;
  End;
End;

automatix 2. Mai 2008 20:22

Re: Zur Zeit wird keine Benutzertransaktion durchgeführt
 
Hallo!

Eine Möglichkeit wäre z.B., dass der Commit in Ordnung war, aber Params[3].Value eine Exception liefert wie 'Index ausserhalb des gültigen Bereiches', kein Integer etc. Dann würde ein Rollback ausgeführt, aber die Transaktion ist ja schon beendet.
Müssten man aber in der Routine BDEFehlerAuswertung sehen können.
Mit StoredProcedures bin ich nicht so fit. Ist es da vielleicht möglich, dass die Zuweisung auf Ex_LaufIdx nach ExecProc und vor Commit gemacht werden sollte?

Grüße

Peinhard 3. Mai 2008 11:16

Re: Zur Zeit wird keine Benutzertransaktion durchgeführt
 
Ich würde eine 'Transaktionsschleife' ;) immer eher so bauen:

Delphi-Quellcode:
BeginTrans;
try
  DoWasAuchImmer;
except
  RollBackTrans;
  raise; (!)
end;
CommitTrans;
Was den konkreten Fehler hier angeht, kann ich mich auch nur den Vermutungen meines Vorredners anschließen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:49 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 by Thomas Breitkreuz