Editieren über ODBCDirekt (Access 97)
Veröffentlicht am 30.12.2003
Frage:
Ich arbeite mit Access 97 und SQL-Server 6.5. Nun möchte ich über einen ODBCDirekt-Arbeitsbereich auf eine Server-Tabelle zugreifen. Der Zugriff funktioniert. Ich kann die Datensätze lesen, jedoch nicht mit Edit bearbeiten. Wie könnte der Verbindungsaufbau aussehen?
Antwort:
Zuerst sollte ich vielleicht erwähnen, dass sich der große Vorteil an ODBCDirekt unter Access 97 nicht bemerkbar macht. ODBCDirekt ist vor allem sehr attraktiv, weil man die Jet-Engine gar nicht erst laden muss. Access 97 muss jedoch die Jet-Engine ohnehin laden, um die internen System-Tabellen zu verwalten.
Um eine Datensatzgruppe mit ODBCDirekt zu bearbeiten, würde ich Ihnen „Batch-Updating“ empfehlen. Mit Batch-Updating wird eine Datensatzgruppe auf dem Client-PC lokal bearbeitet und anschließend an den Server zurückgeschickt. Wenn mehrere Clients dieselben Datensätze gleichzeitig aktualisieren (wollen), kann es zu Konflikten kommen. Diese müssen Ihre Prozeduren auch abfangen und lösen (über die BatchCollisions-Auflistung).
Um den Arbeitsbereich für Batch-Updating vorzubereiten, setzen Sie die DefaultCursorDriver-Eigenschaft auf dbUseClientBatchCursor. Wenn Sie das Recordset-Objekt erstellen, setzen Sie den LockEdits-Parameter der OpenRecordset-Methode auf dbOptimisticBatch. Die Datensatzgruppe muss natürlich auch editierbar sein (also kein Snapshot).
Eine Verbindung für Batch-Updating könnte ungefähr so aussehen:
Dim wrk As Workspace
Dim strConnect As String
Dim conTest As Connection
Dim rstTestRecords As Recordset
Set wrk = CreateWorkspace("TestWorkspace", "admin", _
"", dbUseODBC)
wrk.DefaultCursorDriver = dbUseClientBatchCursor
strConnect = _
"ODBC;DSN=TestDB;UID=sa;PWD=;DATABASE=TestDB"
Set conTest = wrk.OpenConnection("", , , strConnect)
Set rstTestRecords = conTest.OpenRecordset _
("SELECT * FROM Kunden WHERE PLZ='40211';", _
dbOpenDynaset, 0, dbOptimisticBatch)
Do While Not rstTestRecords.EOF
rstTestRecords.Edit rstTestRecords!LokalerOrt = -1 rstTestRecords.Update
Loop
rstTestRecords.MoveNext