Hallo,
ich nutze seit einigen Wochen MS-Access 2010 unter Windows 7.
Kurzbeschreibung:
Innerhalb einer Transaktion möchte ich eine Tabelle mit sog. Durchläufen (tbl_run) aktualisieren und dann mit edit … Änderungen … update einen bestimmten Datensatz der Tabelle zielgerichtet ändern. Wenn ich das Aktualisieren (update mit execute-Prozedur) vor dem .edit durchführe, funktioniert alles einwandfrei. Doch nach dem ersten .edit scheint das Aktualisieren keine Wirkung mehr zu haben.
Zum Hintergrund:
Ich habe eine Tabelle tbl_run mit (u.a.) einer Spalte id, oid (original-ID = ID des ersten DS der Gruppe), version (counter innerhalb der Gruppe), hv (highest version flag, das angibt, ob ein DS die höchste Version repräsentiert) …
- Alle Datensätze mit gleicher oid bilden eine Gruppe.
- Version 0 einer Gruppe wird als Arbeitskopie betrachtet.
- Beim Einchecken eines Formulars soll die Version einen neuen wert erhalten und der Datensatz das hv-flag true bekommen.
Im Programm sieht das wiefolgt aus:
- Transakton starten
- Datensatzset mit Arbeitskopie ermitteln (set rs = CurrentDB.open…)
- Update mit Execute („update tbl_run set hv=false where oid=94 and hv=true“)
… zur Sicherstellung, dass danach alle auf false stehen - Datensatzset zum Schreiben öffnen (rs.edit)
- aktuellen DS ändern (version=3, hv=true)
- DS schreiben (rs.update)
… - Transaktion commit
In dieser Form funktioniert es. Wenn Punkt 3 irgendwann später ausgeführt wird, haben nachher in der Datenbank 2 DS hv=true.
Ich dachte erst, dass das Edit die tbl_run-Zeile beim Update blockiert, darum habe ich mit hv=true versucht, nur die letzte höchste Version zu aktualisieren. Das brachte nichts.
Dann vermutete ich, dass der Datensatz die tbl_run Tabelle blockiert und habe als 7. noch rs.close und set rs=nothing versucht, ohne Erfolg.
Die bei rs.edit erzeugte Arbeitskopie des Datensatzes sollte doch mit rs.update innerhalb der transaktion gespeichert worden sein - oder läuft das innerhalb von Transaktionen anders, d.h. das Update kommt nicht mehr an die bearbeitete Tabelle tbl_run heran?
Kann mir jemand erklären, wie es zu diesem Effekt kommt? Denn wie es ist kann ich den Fehler in diesem Fall zwar korrigieren, laufe aber immer Gefahr, dass Teildaten in Transaktionen nicht gespeichert werden, obwohl ich die Transaktionen verwende, um eben das sicher zu stellen.
Vielen Dank für eure Ideen,
Michael