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 3/2004.

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

Access-FAQ

Karl Donaubauer, Wien

In der Access-FAQ von Karl Donaubauer (www.donkarl.com) finden Sie die meistgestellten Fragen und Anworten zum Thema Microsoft
Access. In dieser Beitragsreihe stellt Karl Donaubauer die wichtigsten Einträge im Detail vor und zeigt Ihnen entsprechende Lösungen anhand praxisnaher Beispiele. Im vierten Teil lernen Sie die Lösungen zu den meistgenannten Problemen der Teilnehmer der deutschsprachigen Access-Newsgroups beim Ermitteln von Informationen zur Datenbank und zur Access-Version und beim Arbeiten mit Ausdrücken und Formeln kennen.

Pfad und Name der aktuellen Datenbank ermitteln

Für so manche Aufgabe ist es unerlässlich zu wissen, wie Pfad, Verzeichnis und Name der aktuellen Datenbank lauten. Sei es, um Operationen mit Dateien durchzuführen oder auch nur in einem Bericht den Pfad der Datenbank als Information mit auszudrucken.

Typische Verwendungsbeispiele sind das Wiedereinbinden von Tabellen oder das Anzeigen von Bildern, die im gleichen Ordner wie die Datenbank oder in einem Ordner relativ über oder unter dem Ordner mit der aktuellen Datenbank stehen.

In Access 2000 hat Microsoft der Access-Bibliothek das Objekt CurrentProject hinzugefügt, das diese Aufgabe gegenüber älteren Access-Versionen wesentlich vereinfacht. CurrentProject besitzt dazu die Eigenschaften FullName, Name und Path.

Fullname enthält den vollständigen Pfad und Namen der Datenbank. Name enthält nur den Namen der Datenbank samt Dateiendung. Path enthält nur den Pfad zur Datenbank.

Angenommen die aktuelle Datenbank heißt Kunden.mdb und befindet sich im Ordner C:\Projekte. Dann sehen die Inhalte der drei Eigenschaften wie in Tab. 1 aus.

Eigenschaft

Beispielwert

CurrentProject.FullName

C:\Projekte\Kunden.mdb

CurrentProject.Name

Kunden.mdb

CurrentProject.Path

C:\Projekte

Tab. 1: Eigenschaften von CurrentProject und Beispielwerte

Dieses Objekt und seine Eigenschaften können Sie nicht nur in VBA verwenden, sondern auch an der Access-Oberfläche. Sie können es zum Beispiel als Steuerelementinhalt eines Textfeldes in einem Formular oder Bericht eingeben:

=CurrentProject.FullName

Dann zeigt das Textfeld den vollständigen Pfad und Namen der aktuellen Datenbank an.

Microsoft hat jahrelang versucht, die Datenzugriffstechnik DAO durch das neuere ADO zu ersetzen. Das CurrentProject-Objekt ist ein Ausdruck dieser Bemühungen, denn die meisten seiner Eigenschaften und Methoden sind auf ADO ausgelegt. ADO konnte sich jedoch, was MDB-Dateien betrifft, bei der Mehrheit der Access-Entwickler nicht gegen DAO durchsetzen. Deshalb fristen auch die damit zusammenhängenden Neuerungen wie CurrentProject bei vielen Entwicklern ein Schattendasein.

Da Sie jedoch bei Verwendung von Access 97 noch gar kein CurrentProject-Objekt zur Verfügung haben, folgen nun ältere Möglichkeiten, Pfad und Name der aktuellen Datenbank zu erhalten.

Sie basieren auf der CurrentDb-Methode. Diese liefert einen Verweis auf die aktuelle Datenbank, deren Pfad und Name man deshalb mithilfe der Name-Eigenschaft erhält. Die Eigenschaft CurrentDb.Name enthält also beispielsweise den Wert C:\Projekte\Kunden.mdb.

Um daraus nur den Namen der Datenbank zu extrahieren, kann man die Dir-Funktion "missbrauchen": Dir(CurrentDb.Name) gibt zum Beispiel den Wert Kunden.mdb aus.

Schwieriger ist das Extrahieren des Pfades. Dazu benötigen Sie die folgende Kombination von Funktionen: Left(CurrentDb.Name,Len(CurrentDb.Name)-Len(Dir(CurrentDb.Name))) ergibt C:\Projekte\.

Möchte man das gleiche Ergebnis wie mit CurrentProject.Path erhalten, also ohne den letzten Backslash, kann man das Ergebnis noch um eine Stelle verkürzen, wie folgender Aufruf zeigt: Left(CurrentDb.Name,Len(CurrentDb.Name)-Len(Dir(CurrentDb.Name))-1).

Hinweis

Die Beispiele und Quellcodes des vorliegenden Beitrags finden Sie auf der beiligenden Heft-CD unter den Namen FAQ4_97.mdb (Access 97) und FAQ4_00.mdb (Access 2000 und höher). (

Diese Technik ist offensichtlich komplizierter. Dafür funktioniert sie in allen Access-Versionen ab Access 95. Sie werden auch kaum einen Unterschied in der Performance im Vergleich zu CurrentProject bemerken.

Die CurrentDb-Varianten sind ebenfalls im VBA-Code und an der Access-Oberfläche anwendbar. Zu beachten ist hier jedoch eine kleine Syntax-Falle. Wenn Sie zum Beispiel in einem Textfeld den Pfad der Datenbank anzeigen möchten, muss in der Eigenschaft Steuerelementinhalt das Semikolon statt des Kommas als Trennzeichen verwendet werden:

=Left(CurrentDb.Name;Len(CurrentDb.Name)-Len(Dir(CurrentDb.Name)))

Access übersetzt diese Eingabe dann selbsttätig in folgenden Ausdruck:

=Links(CurrentDb.Name;Länge(CurrentDb.Name)-Länge(Verz(CurrentDb.Name)))

Access-Ordner und -Version ermitteln

Ähnlich wie beim Verzeichnis und Namen der aktuellen Datenbank kann es auch nützlich sein, das Verzeichnis und die Version des aktuell verwendeten Access während der Laufzeit zu ermitteln.

Beide Informationen erhält man recht einfach mithilfe der SysCmd-Funktion und der passenden Aktionskonstanten dieser vielfältig einsetzbaren und nützlichen Funktion. Den Ordner der aktuell verwendeten msaccess.exe bekommt man mit dem folgenden Befehl:

SysCmd(acSysCmdAccessDir)

Die aktuell verwendete Access-Version erhält man mit dem Befehl:

SysCmd(acSysCmdAccessVer)

Dabei geht es wohlgemerkt nicht um die Version, mit der die Datenbank erstellt wurde oder deren Format sie hat, sondern um die Access-Version, mit der sie momentan geöffnet ist. Genauer gesagt erhält man als Ergebnis den vorderen Teil der Versionsnummer der msaccess.exe. Dieser ist entscheidend, um die Access-Version zu erkennen. Tab. 2 enthält eine Liste der möglichen Ergebnisse.

Abb. 1: Formular frmDBAccess

Versionsnummer

Versionsbezeichnung

8.0

Access 97

9.0

Access 2000

10.0

Access 2002

11.0

Access 2003

Tab. 2: Versionsnummern und Versionsbezeichnungen von Access

Abb. 1 zeigt das Formular frmDBAccess in der Beispiel-Datenbank, in dem Sie Ausdrücke und VBA-Code finden, um sowohl Pfad und Name der Datenbank als auch Pfad und Version von Access zu ermitteln und anzuzeigen.

Leerzeichen in kombiniertem Feld vermeiden

Eine Aufgabe, die in fast jeder Datenbank mehrfach vorkommt, ist das konkatenieren, also zusammenhängen von Texten und Feldinhalten.

Das häufigste Beispiel dafür ist das Zusammenstellen einer Adresse aus einzelnen Adressfeldern. Das übliche Vorgehen beim Kombinieren von Texten sieht so aus:

[Titel] & " " & [Vorname] & " " & [Nachname]

Die drei Felder werden also mit Hilfe des kaufmännischen Und (auch "Ampersand" genannt) verbunden und dazwischen werden Leerzeichen eingefügt.

Es kommt aber vor, dass Daten unvollständig sind, weil zum Beispiel ein Vorname fehlt oder jemand keinen Titel hat. Wenn nun eines der vorderen Felder leer ist, wird das folgende Leerzeichen trotzdem eingefügt und stört, beispielsweise in einem Bericht, in dem die ganze Adresse linksbündig ausgerichtet sein soll.

VBA besitzt die Trim-Funktion, um führende und nachgestellte Leerzeichen zu entfernen.

Trim([Titel] & " " & [Vorname] & " " & [Nachname])

Wenn im Beispiel [Titel] oder [Nachname] keinen Wert enthalten, entfernt Trim das Leerzeichen. Wenn aber [Vorname] keinen Wert hat, stehen zwischen dem Titel und dem Nachnamen trotz des Trim zwei Leerzeichen.

Eine bessere Lösung sieht daher folgendermaßen aus:

[Titel] + " " & [Vorname] + " " & [Nachname]

Oder zwecks Deutlichkeit mit Klammern geschrieben:

([Titel] + " ") & ([Vorname] + " ") & [Nachname]

Man kann Texte auch mit dem Rechenoperator + konkatenieren, was man im Normalfall nicht machen sollte - gerade wegen des hier positiv genutzten Effektes.

Der Plus-Operator hat nämlich - anders als das Ampersand - aus der Mathematik die Verhaltensweise, dass es kein Ergebnis liefert, wenn einer der Operanden fehlt. Wenn im Beispiel also Titel oder Vorname fehlen, werden auch die zugehörigen Leerzeichen nicht zurückgeliefert. Das Einzige, was hier noch passieren kann, ist, dass bei fehlendem Nachnamen ein nachgestelltes Leerzeichen entsteht. Das stört im Normalfall nicht und falls doch, kann man es mit der Trim-Funktion entfernen.

Leeres Feld verhindert
Formelergebnis

Beim vorherigen Thema habe ich die Eigenschaft des Plus-Operators erwähnt, dass er kein Ergebnis liefert, wenn einer der Operanden keinen Wert hat. Das gilt für alle arithmetischen Operatoren, also auch Subtraktion, Multiplikation, Division, Potenzieren und so weiter.

Bei einer Berechnung mit mehreren Feldern wie der folgenden erhält man deshalb nur ein Ergebnis, wenn alle beteiligten Felder einen Wert besitzen:

[Betrag] + [Aufschlag] - [Abzug]

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:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.