Recordset Helper für MS Access – schneller als DLookup & Co.

Domänenfunktionen wie DLookup, DSum oder DCount sind bequem – geraten bei wachsender Datenmenge aber an ihre Grenzen. Dieses kompakte VBA-Modul ersetzt sie durch schnelle, robuste, recordset-basierte Funktionen und bringt sogar Funktionen mit, die Access von Haus aus gar nicht hat.

Wer kennt es nicht: Die integrierten Domänenfunktionen wie DLookup, DSum oder DCount sind bequem – doch bei wachsender Datenmenge und Komplexität geraten sie an ihre Grenzen. Ich stelle ein kompaktes, performantes VBA-Modul vor, das genau hier entlastet: mit modernen, stabilen, recordset-basierten Funktionen – schneller, robuster, flexibler und voll nachvollziehbar. Ohne Add-In, einfach VBA.

Das Modul – was ist drin?

Das Modul ersetzt nicht nur die klassischen Domänenfunktionen, sondern bringt auch Funktionen mit, die Access von Haus aus gar nicht bietet.

Ersatz für die Domänenfunktionen

Für DLookup, DSum, DCount, DMax, DMin, DFirst, DLast (plus TAvg) gibt es T-präfixierte Entsprechungen:

' statt
DLookup("Price", "tblProducts", "ID=123")

' einfach
TLookup("Price", "tblProducts", "ID=123")

Vorteile gegenüber Domänenfunktionen:

  • kein mehrfacher Datenbankzugriff pro Funktionsaufruf
  • bessere Performance
  • vollständig kontrollierbare SQL
  • stabil bei großen Datenmengen
  • einheitliche Fehlerbehandlung
  • einfach zu debuggen

Neue Funktionen, die Access nicht hat

Access bringt viele nützliche Bausteine mit – aber nicht alles. Dieses Modul erweitert deine Toolbox:

Funktion Beschreibung
TList Liefert eine kommaseparierte Liste (z. B. alle Städtenamen in einer Zeile).
TDistinct Gibt alle eindeutigen Werte eines Feldes als Collection zurück.
TGroup Flexible Gruppen-Funktion (SUM, AVG, MAX, MIN, COUNT – per Enum steuerbar) als Dictionary.
TExists Gibt TRUE zurück, wenn ein Wert existiert.

Highlight: ThisDB statt CurrentDb()

CurrentDb() sieht harmlos aus – aber jeder Aufruf öffnet eine neue interne Verbindung.

Achtung: Bei vielen CurrentDb()-Aufrufen drohen Performance-Probleme und die Fehlermeldung „Zu viele Datenbanken geöffnet” (Fehler 3048).

Die Lösung ist eine Property, die eine statische Referenz auf das Datenbankobjekt hält – schnell, effizient und wiederverwendbar:

Public Property Get ThisDB() As DAO.Database

Fazit

Dieses kleine Modul hebt deine Access-Entwicklung auf das nächste Level: schneller, sicherer, transparenter – vollständig in VBA. Die ausführliche Beschreibung findest du wie gewohnt gut dokumentiert direkt im Code.

Download

Ein performantes VBA-Modul für MS Access: recordset-basierte Ersatzfunktionen für DLookup & Co., neue Funktionen wie TList/TDistinct/TGroup/TExists und ThisDB statt CurrentDb().