Montag, 20. November 2017

Home
Tipps
Bücher
Software
News / Links
Hilfe
Impressum

Sponsored by
QualityHosting

Frage und Antwort
Editieren über ODBCDirekt (Access 97)
von Marcus Sternberg
Problem:
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 der TriniDat GmbH:

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


Ein Service der TriniDat Software-Entwicklung GmbH - Am Wehrhahn 45 - 40211 Düsseldorf

  Suche
Suche starten
  Service
Leserbrief / Frage zu Access
Kontakt
  NewsLetter
NewLetter bestellen
NewsLetter abbestellen
  Partner-Seiten
HyperLink

www.trinidat.de


HyperLink

www.fulldotnet.de