VBA ADO Datensatz sperren im Multi-User-Betrieb, Access 2000

27/05/2009 - 13:10 von Raimund Gryszik | Report spam
Hallo Profis!

Wir möchten einzelne Datensàtze einer Tabelle exklusiv für einzelne Benutzer
sperren. D.h. sobald ein Benutzer den Datensatz öffnet, sollen
Öffnungsversuche anderer Benutzer abgewiesen werden. Solange, bis der erste
den Datensatz wieder schließt. Folgender Versuch schlug fehl:

Dim Conn As New ADODB.Connection
Dim ARS As New ADODB.Recordset

Conn.CursorLocation = adUseClient
Conn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;" & _
"DATA SOURCE=N:\Test\Testdatenbank.mdb"

ARS.CursorLocation = adUseClient
ARS.Filter = "ID = eindeutig" ' es wird nur ein DS gefunden
ARS.Open "SPERRTABELLE", Conn, adOpenKeyset, adLockPessimistic
PAUSE

An dieser Stelle soll das Programm anhalten, der DS ist geöffnet. Wenn ein
anderer Benutzer nun den selben DS mit dem selben Coding öffnet, bekommt er
keine Fehlermeldung! Auch können beide User in den DS schreiben, der letzte
gewinnt!

Die Testdatenbank ist übrigens identisch mit
Application.Currentproject.Connection, denn die Sperrtabelle ist da natürlich
drin (verlinkt auf eine Backend-mdb). Liegt hier vielleicht das Problem
irgendwo ??

Vielen Dank für Tipps

Raimund Gryszik, Berlin

PS: Wenn das mit ADO nicht geht, geht's vielleicht irgendwie mit SQL? Beim
Lesen des Threads von Zwillsperger/Habermacher vom 31.1.2007 wird mir
schwindlig. Geht es auch kürzer? Auf jeden Fall können wir kein
Bildschirmformular für diese Tabelle gebrauchen, denn die Sperren haben einen
anderen Zweck, nàmliche zentrale/eindeutige Nummernvergabe/Themensperrung.

In anderen Threads ist öfter die Rede von Timestamp-Feldern, die man
hinzufügen soll und die das Problem lösen. Habe ich in Access 2000 nicht
gefunden, was ist das?

Bitte keine Hinweise auf Deadlocksituationen durch Zombiesperren, denn das
Problem ist bekannt. Auch ein Umstieg auf andere DB-Maschinen kommt bei uns
wegen zentraler Groß-DV nicht in Frage.
 

Lesen sie die antworten

#1 Mark Doerbandt
27/05/2009 - 13:27 | Warnen spam
Hallo, Raimund,

Raimund Gryszik:

Auf jeden Fall können wir kein Bildschirmformular für diese Tabelle gebrauchen,
denn die Sperren haben einen anderen Zweck,
nàmliche zentrale/eindeutige Nummernvergabe/Themensperrung.



ok, ich beziehe mich mal darauf. Ich halte Deinen Ansatz für
fragwürdig. Wenn ich eine eindeutige (ggf. auch fortlaufende)
Nummernvergabe erreichen will, erzeuge ich mir z.B. eine GUID (wird
nicht weiter verwendet, dient nur zur eindeutigen Kennzeichnung der
Session beim Speichern) und versuche diese in eine zentrale Tabelle zu
speichern, zusammen mit der nàchsten Nummer (auf dieser liegt
natürlich ein Unique Index). Gelingt mir das, kann ich es über die
Prüfung der GUID bestàtigen, wenn nicht: neuer Versuch. Kommt ohne
Sperrungen nur mit Logik aus.

Gruss - Mark

Informationen fuer Neulinge in den Access-Newsgroups unter
http://www.doerbandt.de/Access/Newbie.htm

Bitte keine eMails auf Newsgroup-Beitràge senden.

Ähnliche fragen