Frage zu Access97-Programmierung

Hallo zusammen

Ich arbeite mit Access und MS-SQL-Server. Wenn ich nun z.B. eine Anzahl Datensätze manipulieren möchte, dann gehe ich wie folgt vor:


Public Function MyFunction()
Dim ActDB As Database, rsTables As Recordset

On Error GoTo ErrHandle

Set ActDB = CurrentDb()
Set rsTables = ActDB.OpenRecordset(„SELECT * FROM xxx WHERE xxx =xxx“, dbOpenDynaset, dbSeeChanges)

Do While Not rsTables.EOF
rsTables.Edit
rsTables!Updated =Date
rsTables.Update
rsTables.MoveNext
Loop

ExitHere:
On Error Resume Next
rsTables.Close
ActDB.Close
Set ActDB = Nothing
Exit Function

ErrHandle:
ShowErrorBox (Err)
Resume ExitHere

End Function


Das funktioniert auch bestens. Ich wollte nur mal fragen, ob das andere auch so machen, oder ob es bessere Lösungen gibt?

Ich arbeite übrigens mit Access 97.

TIA & Gruss
Martin Bucher, Zürich

Na ja - eigentlich ist so etwas ja eine Aufgabe für einen Update-Trigger im SQL-Server. Nachteil: Deine Anwendung ist dann auf SQL-Server angewiesen und läuft nicht mehr in gewünschter Weise mit nicht-SQL-Server-Tabellen…

Reinhard

Habe vergessen zu erwähnen, dass der Recordset dynamisch aufgrund einer aktion eines Anwenders aufgebaut wird und dass div. Abfragen zwischen dem DO WHILE LOOP laufen.

Mir geht es eigentlich mehr um den OpenBefehl bzw. das Close und set Nothing.

Gruss
Martin Bucher, Zürich

Nun ja - man kann natürlich eine Menge mehr aus einem SQL Server herausholen, z.B. per Stored Procedure, mit den erwähnten Triggers usw… Auch wäre wohl ein UPDATE auf der Server-Seite wesentlich schneller als das Durchackern des Recordsets. Und wenn da diverse Abfragen und Auswertungen zwischendrin laufen, kann man auch versuchen, diese in Stored Procedures zu verpacken.
Die Frage ist halt, ob sich der Aufwand lohnt. Stored Procedures sind lausig zu debuggen - wenn Deine Anwendung in dieser Form zufriedenstellend läuft, solltest Du sie so lassen. Performanz ist ja kein Wert an sich… (Und: Never touch a running system!)

Das Close und Set = Nothing hintereinander ist wohl ein wenig doppelt bis dreifach gemoppelt - aber schaden tut’s ja auch nicht…

Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]