Tipps und Tricks 4/2009

Die Tipps-und-Tricks-Sammlung von Access im Unternehmen wird diesmal um das Verknüpfen von Tabellen per Code erweitert. Außerdem zeigen wir Ihnen, wie Sie Ereignisprozeduren vom Eigenschaftsfenster aus ganz schnell anlegen. Wer gern gelegentlich mit instabilen Datenbanken arbeitet, muss diese hin und wieder mal dekompilieren – das geht mit unserer Decompile-Datenbank per Doppelklick und lässt sich ganz schnell einrichten. Schließlich kümmern wir uns um das Verhalten von Textfeldern beim Erhalt des Fokus: Komplett markieren, zum Start oder ans Ende

Tabellen verknüpfen per Code

Eine Tabellenverknüpfung legen Sie normalerweise über den entsprechenden Menübefehl von Access an (unter Access 2007 zum Beispiel über den Ribbon-Eintrag Externe Daten|Access). Wenn Sie diese Aufgabe etwa beim Start der Frontenddatenbank automatisch ausführen lassen möchten, brauchen Sie ein paar Zeilen Code.

Am einfachsten geht dies mit dem VBA-Pendant zum Menübefehl, und zwar mit der TransferDatabase-Methode des DoCmd-Objekts:

DoCmd.TransferDatabase acLink, "Microsoft Access", "<Quelldatenbank>", acTable, "<Name der Verküpfung>", "<Name der Quelltabelle>"

Dies klappt in der Regel ganz gut, führt aber in Einzelfällen zu Unannehmlichkeiten, zum Beispiel beim Einsatz unter der Access 2007-Runtime und dort speziell bei Verwendung von Backenddatenbanken, die nicht auf dem gleichen Rechner wie das Frontend liegen. Dort erscheint nämlich die gleiche Hinweismeldung, die auch beim Öffnen von Datenbankdateien aus nicht vertrauenswürdigen Ordnern erscheint – und zwar bei jedem Aufruf der TransferDatabase-Methode.

Um dies zu umgehen, brauchen Sie ein paar Zeilen Code mehr:

Dim db As DAO.Database
Dim tdf As DAO.TableDef
Set db = CurrentDb
Set tdf = db.CreateTableDef("tblVersion", 0,
"tbl_VersionFE", ";DATABASE=z:\ShopSoft.accdb")
db.TableDefs.Append tdf
db.TableDefs.Refresh
Set tdf = Nothing
Set db = Nothing

Die CreateTableDef-Methode schafft es, eine Verknüpfung ohne nervende Hinweismeldungen herzustellen. Die folgende Append-Methode fügt die noch im leeren Raum stehende Verknüpfung zur Auflistung TableDefs hinzu und die Refresh-Methode sorgt schließlich dafür, dass die Verknüpfung auch gleich im Datenbankfenster erscheint.

Ereignisprozedur per Mausklick

Wenn Sie eine Ereignisprozedur anlegen, geschieht dies normalerweise durch die folgenden Schritte:

  • Sie markieren das betroffene Element.
  • Sie zeigen das Eigenschaftsfenster an, sofern dieses noch nicht aktiviert ist.
  • Sie wählen die Registerseite Ereignis aus.
  • Dann wählen Sie entweder aus dem Kombinationsfeld den Eintrag [Ereignisprozedur] aus und klicken auf die Schaltfläche mit den drei Punkten oder Sie klicken direkt auf diese Schaltfläche und wählen aus dem nun erscheinenden Dialog den Eintrag Codegenerator aus (siehe Bild 1).
  • pic001.png

    Bild 1: Auswahl eines Werkzeugs zum Füllen einer Ereigniseigenschaft

  • Schließlich landen Sie im VBA-Editor und können den dort bereits angelegten Prozedurrumpf füllen.

Es gibt mindestens zwei Alternativen zu dieser Vorgehensweise, die schneller sein können:

  • Sie öffnen den VBA-Editor direkt, öffnen das Klassenmodul des jeweiligen Formulars oder Berichts, wählen im Kombinationsfeld links oben im Codefenster den Namen des betroffenen Steuerelements und im rechten Kombinationsfeld die benötigte Ereignisprozedur aus.
  • Sie aktivieren eine spezielle Option von Access und brauchen dann beim Anlegen der Ereignisprozedur über das Eigenschaftsfenster nur noch auf die Schaltfläche mit den drei Punkten für die gewünschte Eigenschaft zu klicken.

Letztere Version dürfte die schnellste sein. Die Option, die Sie dazu einstellen müssen, heißt Immer Ereignisprozeduren verwenden.

Sie finden diese unter Access 2003 und älter im Optionen-Dialog (Extras|Optionen) im Bereich Formulare/Berichte und unter Access 2007 in den Access-Optionen im Bereich Objekt-Designer|Formulare/Berichte.

Folgende Nullen statt führender Nullen

Ein Kunde wollte mal IDs mit Nullen bis auf fünf Stellen aufgefüllt haben. Die Zahlen 1, 27, 392 und 4433 sollten also so aussehen: 10000, 27000, 39200, 44330. Falls Sie auch mal so etwas brauchen, können Sie dies natürlich per VBA lösen – im vorliegenden Fall sollte dieses Format aber einfach in einer Abfrage untergebracht werden. Natürlich kann man dort auch eine VBA-Funktion integrieren, aber das muss ja nicht sein.

Stattdessen verwenden wir die ganz selten genutzte StrReverse-Funktion, die eine Zeichenkette umdreht. Dies führt zwar nicht direkt zum Ziel, aber auf folgendem Umweg schon.

Sie drehen also zunächst die Zahlen mit folgender Funktion um:

StrReverse(Zahl)

Für die Zahl 392 ergibt dies 293. Jetzt kommt die üblicherweise zum Anfügen führender Nullen verwendete Format-Funktion ins Spiel. Wenn Sie einer Zahl so viele Nullen voranstellen möchten, bis diese fünf Stellen aufweist, geht dies etwa so:

Format(Zahl, "00000")

Wenn Sie für Zahl den obigen Ausdruck einsetzen, sieht das so aus:

Format(StrReverse(Zahl), "00000")

Das Ergebnis für 392 lautet nun 00293. Sehen Sie es Wir brauchen nun nur noch erneut die StrReverse-Funktion einzusetzen und erhalten das gewünschte Ergebnis:

StrReverse(Format(StrReverse(Zahl), "00000"))

Decompile ganz einfach

Es kann aus verschiedenen Gründen notwendig sein, das VBA-Projekt einer Datenbankdatei zu dekompilieren, das heißt, es in einen Zustand zurückzuversetzen, der eine erneute Kompilierung des VBA-Projekts erfordert.

Unter http://www.trigeminal.com/usenet/usenet004.asp finden Sie ausführliche Informationen zu diesem Thema.

Wichtig ist zu wissen, dass der Code eines VBA-Projekts immer in kanonischer und in kompilierter Form vorliegt. Der kanonische Code ist dabei der, den Sie auch editieren können, der kompilierte Code ist das, was Access schließlich ausführt. Daher wird der Code vor der Ausführung immer kompiliert.

Dieses Kompilat kann aber korrupt sein und Fehler enthalten, was eine erneute Kompilierung erforderlich machen kann. Und auch wenn Sie einzelne Teile eines VBA-Projekts, wie etwa Module durch schlichtes ändern einer einzigen Codezeile zu einem Kandidaten für eine Kompilierung machen, reicht dies noch nicht aus, um das komplette Projekt erneut zu kompilieren. Dies erreichen Sie durch das Öffnen der Datenbankdatei mit dem Kommandozeilenparameter /decompile.

Die komplette Anweisung sieht unter einer Access 2007-Standardinstallation etwa so aus:

"c:\Programme\Microsoft Office\Office12\MSAccess.exe" "<Datenbankpfad und -name>" /decompile

Wenn Sie an einem Projekt arbeiten und dieses häufiger abstürzt, kann das Dekompilieren ein adäquates Mittel zum Reparieren des Projekts sein. Sie können sich dann eine kleine Batch-Datei namens Decompile.bat erstellen und die obige Zeile dort eintragen.

Ein Doppelklick auf Decompile.bat sorgt dann für das Dekompilieren des VBA-Projekts in der Datenbankdatei und normalerweise für ein problemloses Weiterarbeiten damit.

Programmierer möchten aber gelegentlich eine neue Version ihrer Anwendung erstellen und legen dazu ein neues Verzeichnis mit dem neuen Versionsstand an, den sie dann weiterhin einsetzen.

Die Decompile.bat-Datei übernimmt man dabei wie alle anderen benötigten Dateien in das neue Verzeichnis – allerdings müssen Sie dann nochdas Verzeichnis der Zieldatenbank ändern.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar