Hallo,
in einer Abfrage greife ich auf eine VBA-Funktion zurück, um mir für jeden Datensatz einen Wert berechnen zu lassen.
In der Funktion arbeite ich mit einem DAO-Recordset, da für die Berechnung Werte aus einer bestehenden Tabelle herangezogen werden.
Zur Erstellung des Recordset könnte ich z.B
Set rst = CurrentDB.OpenRecordset("Tabelle1")
benutzen.
Oben erzeugtes Recordset würde durch den mehrmaligen Codeaufruf durch die Abfrage für jeden Datensatz neu erzeugt, was zu einer erheblichen Ablaufverzögerung führt.
Um diese zu vermeiden habe ich rst als öffentliche Variable außerhalb der Prozeduren deklariert und erzeuge jetzt das Recordset nur beim ersten Aufruf der Funktion durch:
If rst Is Nothing Then Set rst = ...
Das Problem ist dabei nur, dass nach Abschluss aller Berechnungen je Datensatz der Abfrage das Recordset bestehen bleibt und nicht wieder zurückgesetzt wird.
Damit habe ich Schwierigkeiten bei der Tabellenbearbeitung (Entwurfsansicht gesperrt) und bei nachträglichen Aktualisierungen der Quelltabelle die nicht automatisch zu einer Aktualisierung des Recordset führen. Das heißt bei Neuaufruf der Abfrage wird u.U. mit den alten Werten der Quelltabelle gerechnet und die Abfrage liefert falsche Ergebnisse.
Wie schaffe ich es nun, dass das Recordset nur während des Ausführens der Abfrage bestehen bleibt, nicht ständig neu erzeugt wird aber nach Darstellung des Abfrageergebnisses wieder zurückgesetzt wird (rst.close, set rst = nothing)?
Ich brauche also etwas ähnliches wie ein „Abfrage-Fertig“-Ereignis oder auch „Abfrage-Schließen“-Ereignis.
Dachte auch schon an einen Timer o.ä., welcher nach gewisser Inaktivität der Funktion das Recordset zurücksetzt.
Hat jemand Ideen?
Wie kann man das realisieren?
Vielen Dank für jeden Hinweis!
Nette Grüße, tester