Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 2/2008.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Verwenden Sie praktische VBA-Funktionen, um den Datenzugriff zu vereinfachen.

Techniken

DAO, SQL, Abfragen

Voraussetzungen

Access 97 und höher

Beispieldateien

DAOVereinfachen.mdb

Shortlink

574

Datenzugriff per VBA vereinfachen

André Minhorst, Duisburg

Der Datenzugriff etwa per Datensatzgruppe erfordert immer wieder die gleichen Handgriffe: Database-Objekt deklarieren und instanzieren, Recordset-Objekt deklarieren und instanzieren und dann ran an die Daten. Gleiches gilt für das Absetzen von SQL-Anweisungen mit der Execute-Methode oder für das Ausführen von Parameterabfragen. Wir zeigen, wie Sie sich dies merklich vereinfachen können und noch dazu Code einsparen.

CurrentDB ersetzen

Wenn Sie einmal eine typische Datenbank durchsuchen, werden Sie vermutlich zahllose Aufrufe der CurrentDB-Funktion und noch mehr Einsätze der OpenRecordset-Methode des Database-Objekts finden. Dies ist - wenn auch meist nicht dramatisch - eine Performance-Bremse. Ein Database-Objekt mit einem Verweis auf die aktuelle Datenbank erzeugt man am besten nur einmal, und dann erst wieder, wenn der Verweis aus irgendeinem Grund verloren geht.

Die folgenden beiden Zeilen zur Deklaration der Variablen und zum Zuweisen des Database-Objekts sparen Sie künftig ein:

Dim db As DAO.Database

Set db = CurrentDb

Stattdessen verwenden Sie erstens eine öffentliche Variable, die den Verweis auf die aktuelle Datenbank nach seiner Erzeugung speichert:

Public m_dbs As DAO.Database

Zweitens benötigen Sie eine Funktion, die den Wert dieser Variablen ausliest und zurückgibt und die Variable gegebenenfalls erst noch füllt:

Function dbs() As DAO.Database

    If m_dbs Is Nothing Then

        Set m_dbs = CurrentDB

    End If

    Set dbs = m_dbs

End Function

Diese beiden Elemente bringen Sie in einem Standardmodul namens mdlEasyDataAccess unter. Und drittens setzen Sie diese Funktion nun überall ein, wo Sie sonst auf die Variable verwiesen hätten, die einen Verweis auf das Database-Objekt enthält - üblicherweise db genannt. Dies sieht dann für das Öffnen einer Datensatzgruppe so aus:

Dim rst As DAO.Recordset

Set rst = dbs.OpenRecordset("tblArtikel", dbOpenDynaset)

Eine Deklaration und Zuweisung einer Database-Variablen - wie oben db - ist nun nicht mehr erforderlich, Sie benötigen nur noch die im oben beschriebenen Standardmodul mdlEasyDataAccess erläuterten Elemente.

OpenRecordset ersetzen

Als Nächstes räumen wir mit der altehrwürdigen OpenRecordset-Methode auf. Auch wenn das eingefleischten Accesslern längst nicht mehr auffällt, nämlich dass dort IntelliSense nicht richtig funktioniert. Dies wirkt sich so wie in Abb. 1 aus: IntelliSense zeigt zwar die Parameterliste, aber nicht die verfügbaren Werte für die einzelnen Parameter an. Nun verwendet man in den meisten Fällen die Konstante dbOpenDynaset und die übrigen Parameter fallen gänzlich weg, doch hin und wieder wäre eine Erinnerung an die übrigen Konstanten doch nett. Dies erreichen Sie, indem Sie die folgende Funktion zum Modul mdlEasyDataAccess hinzufügen:

pic001.tif

Abb. 1: Die OpenRecordset-Methode mit unvollständigem IntelliSense

Function OpenRS(sSQL As String, OpenType _

    As eDAOOpenType) As DAO.Recordset

    Set OpenRS = dbs.OpenRecordset(sSQL, _

    OpenType)

End Function

Sie lässt die beiden letzten Parameter außer acht, weil diese in der Praxis seltener eingesetzt werden, verwendet aber als Datentyp für den zweiten Parameter namens Type diese benutzerdefinierte Enumeration:

Enum eDAOOpenType

eOpenDynaset = DAO.dbOpenDynaset

eOpenSnapshot = DAO.dbOpenSnapshot

eOpenTable = DAO.dbOpenTable

End Enum

Weisen Sie dem Recordset-Objekt rst seinen Inhalt nun nicht mehr mit der OpenRecordset-Methode des Database-Objekts zu, sondern mit der Funktion OpenRS, dann sieht dies im VBA-Editor wie in Abb. 2 aus: Die Konstanten für die Option Type werden hier wie gewünscht angezeigt. Sie brauchen hier also gar keinen Verweis mehr auf das aktuelle Database-Objekt - die Funktion OpenRS bezieht dieses selbstständig über die Funktion dbs.

pic002.tif

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Verwandte Beiträge:

Schnelle Domänenfunktionen

Indizierung mit Access

DAO: Tabellen, Felder und Co. bearbeiten

Performanter Webzugriff auf MySQL-Datenbanken

Aktionsabfragen mit SQL

© 2003-2015 André Minhorst Alle Rechte vorbehalten.