PDA

Vollständige Version anzeigen : BeginTrans und Rollback


cpetit
25.06.2001, 13:47
Hallo,
kann mir jemand sagen wie man BeginTrans und Rollback benutzt.

Kann in meiner Hilfe nix brauchbares finden.

Bin für jeden Tipp dankbar

Manuela Kulpa
25.06.2001, 17:20
<font face="Verdana" size="2">Hallo cpetit!

Die Architektur von Microsoft Jet ordnet die Verantwortlichkeit für Transaktionen den Workspace-Objekten (also den Arbeitsbereichen) zu. Workspace-Objekte stellen für die Abwicklung einer Transaktion drei Methoden zur Verfügung:

Workspace.BeginTrans (Öffnet einen Transaktionsraum)
Workspace.RollBack (Widerruft die aktuelle Transaktion)
Workspace.CommitTrans(Erklärt die aktuelle Transaktion für gültig und macht ihre Operation zu permanenten Aktualisierung.)

Die folgende Beispielprozedur eröffnet mit BeginTrans einen Transaktionsraum und nimmt darin sequentiell eine Reihe von Aktualisierungen an der Tabelle Kunden (Nordwind.mdb) vor. Da die Änderung aber erst wirksam werden, nachdem die Transaktion mit CommitTrans für gültig erklärt wurde, kann die Prozedur auf Wunsch des Benutzers die bereits mit Update vorgenommenen Änderungen wieder rückgängig machen, indem sie anstelle von CommitTrans die Methode Rollback aufruft.</font>

<FONT SIZE=1 FACE=Courier New><FONT COLOR=#000080>Public</FONT> <FONT COLOR=#000080>Sub</FONT> ChangePosition()

<FONT COLOR=#000080>Dim</FONT> dbNordwind <FONT COLOR=#000080>As</FONT> DAO.Database
<FONT COLOR=#000080>Dim</FONT> rstEmp <FONT COLOR=#000080>As</FONT> DAO.Recordset
<FONT COLOR=#000080>Dim</FONT> wspCurrent <FONT COLOR=#000080>As</FONT> DAO.Workspace

<FONT COLOR=#000080>Set</FONT> wspCurrent = DBEngine.Workspaces(0)
<FONT COLOR=#000080>Set</FONT> dbNordwind = CurrentDb
<FONT COLOR=#000080>Set</FONT> rstEmp = dbNordwind.OpenRecordset(&quot;Kunden&quot;, dbOpenTable)

wspCurrent.BeginTrans

<FONT COLOR=#000080>With</FONT> rstEmp
<FONT COLOR=#000080>Do</FONT> <FONT COLOR=#000080>Until</FONT> .EOF
<FONT COLOR=#000080>If</FONT> !Position = &quot;Vertriebsagent&quot; <FONT COLOR=#000080>Then</FONT>
.Edit
!Position = &quot;Vertriebsassistent&quot;
.Update
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>If</FONT>
.MoveNext
<FONT COLOR=#000080>Loop</FONT>
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>With</FONT>

<FONT COLOR=#000080>If</FONT> MsgBox(&quot;Alle &Auml;nderungen &uuml;bernehmen?&quot;, _
vbQuestion + vbYesNo + vbDefaultButton1, _
&quot;Frage&quot;) = vbYes <FONT COLOR=#000080>Then</FONT>
wspCurrent.CommitTrans
<FONT COLOR=#000080>Else</FONT>
wspCurrent.Rollback
<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>If</FONT>

<FONT COLOR=#000080>If</FONT> <FONT COLOR=#000080>Not</FONT> rstEmp <FONT COLOR=#000080>Is</FONT> <FONT COLOR=#000080>Nothing</FONT> <FONT COLOR=#000080>Then</FONT> rstEmp.<FONT COLOR=#000080>Close</FONT>: <FONT COLOR=#000080>Set</FONT> rstEmp = <FONT COLOR=#000080>Nothing</FONT>
<FONT COLOR=#000080>If</FONT> <FONT COLOR=#000080>Not</FONT> dbNordwind <FONT COLOR=#000080>Is</FONT> <FONT COLOR=#000080>Nothing</FONT> <FONT COLOR=#000080>Then</FONT> dbNordwind.<FONT COLOR=#000080>Close</FONT>: <FONT COLOR=#000080>Set</FONT> dbNordwind = <FONT COLOR=#000080>Nothing</FONT>
<FONT COLOR=#000080>If</FONT> <FONT COLOR=#000080>Not</FONT> wspCurrent <FONT COLOR=#000080>Is</FONT> <FONT COLOR=#000080>Nothing</FONT> <FONT COLOR=#000080>Then</FONT> wspCurrent.<FONT COLOR=#000080>Close</FONT>: <FONT COLOR=#000080>Set</FONT> wspCurrent = <FONT COLOR=#000080>Nothing</FONT>

<FONT COLOR=#000080>End</FONT> <FONT COLOR=#000080>Sub</FONT></FONT>

<font face="Verdana" size="2">Es ist wichtig, im Auge zu behalten, dass der Geltungsbereich (und damit auch die maximale Lebensdauer) von Transaktionen auf der Ebene des Workspace-Objekts liegt, nicht auf der Ebene eines Database- oder Recordset-Objekts. Du kannst im Rahmen einer Transaktion also auch die Objekte mehrerer Datenbanken manipulieren und die Manipulation gegebenenfalls mit Commit für gültig erklären oder mit Rollback widerrufen.

Gruß</font>

cpetit
26.06.2001, 07:39
Hallo,
danke für deine hilfe.
Ich da mal eine Frage, kennst du dich damit aus, ich hab in der deutschen Knowledge Base den fast gleichen Code gefunden den ich benötige.
Das Problem ist das dieser Code erst beim schliesen des Formulars frägt ob die geänderten Daten gespeichert oder die alten wieder hergestellt werden. ich möchte es aber gerne mit einer Schaltfläche machen.
Dann bringt er aber nur Fehlermeldung.
Kannst du mir helfen, wenn ja dann sende ich dir den Code.

Manuela Kulpa
26.06.2001, 08:23
<font face="Verdana" size="2">Hallo cpetit!

Kein Problem, schicke mir die DB (komprimiert und gezippt) zu. Eine kleine Erklärung, wie du es realisieren möchtest, wäre auch sehr hilfreich. Feedback kann ich leider erst am Mittwoch geben.

Gruß
Manuela</font>

A.S.
28.06.2001, 14:23
On Top....

.... oder um mit CPetit zu sprechen: Versteht denn wirklich keiner 'was davon?

Manuela Kulpa
28.06.2001, 17:15
<font face="Verdana" size="2">Eine kleine Anmerkung von mir :)! Cpetit hat gerade eine Schnell-Lösung erhalten, die, bezüglich eines Eintrages hier im Forum, schon spezieller Natur wäre und somit entfällt.

Grundsätzlich aber einer Bitte (nicht nur an Cpetit)!

Ein kleines Zitat aus der Nettiquette:

<font color="#0000FF">Weshalb man keine Antwort bekommt (bzw. nicht sofort Rückantwort)

Es kann viele Ursachen haben, dass niemand auf Eure Frage antwortet.

Euch sollte zunächst bewusst sein, dass Antworten im Forum auf Freiwilligkeit beruhen. Sowohl die Teilnehmer als auch die Moderatoren investieren unentgeltlich ihre Zeit in der Beantwortung von Fragen - und nicht immer ist jemand verfügbar, ...
</font>

Also ...

... die Geduld nicht verlieren, auch wenn es unmöglich erscheint, das ist Geduld (Japanische Weisheit) :)

Gruß</font>