Supportnet / Forum / Datenbanken
Transaktion in Access97 geht nicht
Frage
Hallo an alle und dich,
steh schon seit Tagen auf dem Schlauch und weis mir keinen Rat. Wer kann mir den entscheidenden Tipp geben um die Transaktion und Rollback zum Arbeiten zu bringen.
Ab Samstag bin ich wieder da. Werde die Lösung dann zurückmelden. Schon mal vielen Dank für deinen Beitrag
von Anton
Die Transaktion geht über mehrere Prozeduren und Formulare.
Daher muss die Deklaration der Varialben (Objekte) im Kopfbereich des Moduls geschehen.
Dim wspT As Workspace, dbsT As Database
Diese Funktion wird von einer Prozedur aus aufgerufen. Sie setzt die Transaktion in Gang.
Das geht ohne Fehlermeldung; ob das auch arbeitet kann ich nicht sagen.
Public Function fktEintrag() ´ Die Transaktion vorbereiten.
Set wspT = DBEngine.Workspaces(0) ´ Verweis auf Standardarbeits-Bereichsobjekt holen.
Set dbsT = CurrentDb ´ Verweis auf aktuelle Datenbank holen.
wspT.BeginTrans ´ Transaktion starten.
End Function
Diese Funktion wird zum Schluss aufgerufen und soll die Transaktion abschließen.
Das geht ohne Fehlermeldung; ob das auch arbeitet kann ich nicht sagen.
Public Function fktFertig()
wspT.CommitTrans ´ Die Transaktion fertigschreiben.
Set dbsT = Nothing ´ Verweis auf aktuelle Datenbank zurücksetzen.
Set wspT = Nothing ´ Verweis auf Arbeitsbereichsobjekt zurücksetzen.
End Function
Diese Funktion wird aufgerufen, wenn ein Fehler auftritt. Alle vorausgehenden Aktionen sollten dann
zurückgesetzt werden. Das tut es aber nicht !!!
Public Function fktZurueck() ´ Die Transaktion zurücksetzen.
wspT.Rollback ´ Transaktion zurücksetzen.
Set dbsT = Nothing ´ Verweis auf aktuelle Datenbank zurücksetzen.
Set wspT = Nothing ´ Verweis auf Arbeitsbereichsobjekt zurücksetzen.
End Function
Antwort 1 von trekking
Es liegt vielleicht daran, dass du .beginnrans und .rollback nicht in einer funktion verwendest sondern in mehreren.
Vielleicht kannst du das ganze so umschreiben, dass es in einer funktion steht und du alles andere dazwischen setzt.
Wenn du wissen willst ob deine funktion arbeitet, dann kannst du das im LokalFenster der VBA Umgebung sehen indemm du einen Haltepunnkt setzt.
Naja, viel ist es nicht aber vielleicht bringts was. Um genaueres zu sagen reichen deine Infos nicht. Zum Beispiel: Ist .rollback in einen On_Error Fehlerbehandlung eingebaut oder wie sonst stellst du fest, dass ein Fehler aufgetreten ist.
Gruß Trekking
Vielleicht kannst du das ganze so umschreiben, dass es in einer funktion steht und du alles andere dazwischen setzt.
Wenn du wissen willst ob deine funktion arbeitet, dann kannst du das im LokalFenster der VBA Umgebung sehen indemm du einen Haltepunnkt setzt.
Naja, viel ist es nicht aber vielleicht bringts was. Um genaueres zu sagen reichen deine Infos nicht. Zum Beispiel: Ist .rollback in einen On_Error Fehlerbehandlung eingebaut oder wie sonst stellst du fest, dass ein Fehler aufgetreten ist.
Gruß Trekking
Antwort 2 von Anton1
Hallo lieber Trekking,
habe nun die Ursache in der MS-Knowledgebase gefunden. Für Access97 gilt: Ein Recorset in der Transaction unterbricht diese. Wenn ein Commit folgt geschieht nicht´s - wenn ein Rollback folgt wird ein abfangbarer Fehler ausgegeben.
http://support.microsoft.com/default.aspx?scid=kb;de;506905
Die Lösung wird so angegeben: Setze den Recordset außerhalb der Transaction.
Das befriedigt mich aber nicht, weil bei dem Vorgang mehrere Recorsets mitwiken und auch bei manchen Datensätzen mit mehreren Formularen manuell gesucht werden muss!
Ja, da werd ich mir schon eine andere Lösung ausdenken müssen.
Danke für deinen Beitrag sagt dir Anton1
habe nun die Ursache in der MS-Knowledgebase gefunden. Für Access97 gilt: Ein Recorset in der Transaction unterbricht diese. Wenn ein Commit folgt geschieht nicht´s - wenn ein Rollback folgt wird ein abfangbarer Fehler ausgegeben.
http://support.microsoft.com/default.aspx?scid=kb;de;506905
Die Lösung wird so angegeben: Setze den Recordset außerhalb der Transaction.
Das befriedigt mich aber nicht, weil bei dem Vorgang mehrere Recorsets mitwiken und auch bei manchen Datensätzen mit mehreren Formularen manuell gesucht werden muss!
Ja, da werd ich mir schon eine andere Lösung ausdenken müssen.
Danke für deinen Beitrag sagt dir Anton1

