Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
Die neuen Tabellenereignisse, die mit Access 2010 eingeführt wurden, erlauben beispielsweise das automatische Ausführen von Makros beim Einfügen, ändern oder Löschen von Datensätzen. Dies machen wir uns in diesem Beitrag einmal auf ungewöhnliche Weise zunutze: Wir wollen Daten per Copy and Paste aus einer anderen Quelle, also etwa einer Excel-Tabelle, in die Datenbank importieren. Dabei sollen diese gleich analysiert und in die richtigen Tabellen eingefügt werden. Dies erledigen wir am Beispiel von Artikeln und Kategorien, wobei beide gleich auf die entsprechenden Tabellen aufgeteilt und verknüpft werden sollen.
In der Praxis kommt es gelegentlich vor, dass Sie Daten aus anderen Quellen nur auf Umwegen direkt aus der Quelle in eine Access-Datenbank importieren können. Bei Daten aus Excel-Tabellen ist dies sicher kein Problem, denn dies lässt sich in der Regel automatisieren.
Dennoch wollen wir der Einfachheit halber in diesem Beitrag davon ausgehen, dass wir die Daten aus der Excel-Tabelle aus Bild 1 in eine Access-Datenbank importieren möchten.
Bild 1: Diese Daten sollen in die Access-Datenbank importiert werden.
Der Ablauf soll so aussehen, dass Sie die Daten aus der Quelle in die Zwischenablage kopieren, dann zu einer speziell zu diesem Zweck angelegten Access-Tabelle wechseln und die Daten dort einfügen. Das Ergebnis sieht dann etwa wie in Bild 2 aus.
Bild 2: Einfügen der Daten in die übergangstabelle der Access-Datenbank
Das ist nun noch kein Hexenwerk. Der Clou folgt erst noch: Beim Einfügen sollen wie durch Zauberhand die entsprechenden Datensätze in den beiden Tabellen tblArtikel und tblKategorien angelegt werden, die wie in Bild 3 miteinander verknüpft sind. Dazu sind ein paar Schritte nötig, die man sonst per VBA durchführen würde. Dies ist zwar auch machbar, aber wenn man die Daten ohnehin von Hand in die Hilfstabelle tblArtikelimport kopiert, wäre es natürlich praktisch, wenn diese Daten auch direkt automatisch auf die Zieltabellen aufgeteilt würden.
Bild 3: Die beiden Zieltabellen des Imports
Bild 4 zeigt, wie das Ergebnis nach dem Import aussehen soll. Die in das Feld Kategorie eines in die Tabelle tblTabellenimport importierten Datensatzes soll, soweit noch nicht vorhanden, in der Tabelle tblKategorien angelegt werden.
Bild 4: Die automatisch in die Zieltabellen aufgeteilten Daten
Dann muss der Primärschlüsselwert entweder des eingefügten Datensatzes der Tabelle tblKategorien ermittelt werden oder der entsprechende Wert des bereits vorhandenen Datensatzes.
Dieser landet dann gemeinsam mit der Bezeichnung des Artikels in der Tabelle tblArtikel. Die KategorieID stellt in diesem Fall das Fremdschlüsselfeld für die Verknüpfung zwischen den Tabellen tblArtikel und tblKategorien her.
Makro anlegen
Das Makro können Sie auf zwei Arten anlegen: Entweder in der Datenblattansich der Tabelle oder in der Entwurfsansicht. Wenn Sie die Datenblattansicht dazu nutzen möchten, verwenden Sie den Ribbon-Eintrag Ta-bel-le|Nach-folgeereignis-se|Nach Ein-fü-gung, um ein Makro anzulegen, das durch das Einfügen eines Datensatzes ausgelöst wird (s. Bild 5).
Bild 5: Anlegen des Makros, das beim Einfügen eines Datensatzes ausgelöst wird
Alternativ können Sie auch die Entwurfsansicht nutzen. In diesem Fall finden Sie den benötigten Ribbon-Eintrag unter Entwurf|Feld-, Datensatz- und Ta-bel-len-er-eig-nis-se|Da-ten-mak-ros er-stel-len|Nach Einfügung (s. Bild 6).
Bild 6: Einfügen des Makros über die Entwurfsansicht der Tabelle
Nach dem Aufruf eines dieser Ribbon-Befehle erscheint der Entwurf für ein neues Makro. Dieses füllen Sie nun wie in Bild 7.
Bild 7: Makro zum Aufteilen der frisch importierten Daten
Das Makro legt zunächst eine lokale Variable namens varKategorieID fest und füllt diese mit dem Wert 0. Danach sucht sie in der Tabelle tblKategorien nach einem Datensatz, dessen Feld Kategorie den Wert des gleichnamigen Feldes des neuen Datensatzes der Tabelle tblArtikelimport enthält.
Findet diese Makroaktion einen Datensatz, füllt die folgende den Wert des Feldes KategorieID des gefundenen Datensatzes in die lokale Variable varKategorieID.
Die folgende Wenn…Dann-Bedingung prüft, ob varKategorieID danach immer noch den Wert 0 enthält. Dies ist nur der Fall, wenn kein Datensatz gefunden wurde.
Dies führt dazu, dass das Makro einen neuen Datensatz in der Tabelle tblKategorien anlegt. Das Feld Kategorie erhält dabei den Wert des gleichnamigen Feldes des neuen Datensatzes der Tabelle tblArtikelimport.
Wieder legt die folgende Makroaktion den Wert der lokalen Variablen varKategorieID auf einen Primärschlüssel fest – diesmal auf den des neu zur Tabelle tblKategorien hinzugefügten Datensatzes. Damit haben wir nun auf jeden Fall ein Primärschlüsselfeld eines Datensatzes der Tabelle tblKategorien – egal, ob dieses neu angelegt wurde oder bereits ein entsprechender Datensatz vorhanden war.
Nun muss das Makro nur noch den neuen Datensatz zur Tabelle tblArtikel hinzufügen. Dabei trägt es in das Feld Artikel den Wert des entsprechenden Feldes der Tabelle tblArtikelimport ein. Das Fremdschlüsselfeld KategorieID hingegen wird mit dem in der lokalen Variablen varKategorieID gespeicherten Primärschlüsselwert des entsprechenden Datensatzes aus der Tabelle tblKategorien gefüllt.
Variante mit eigenem Makro zum Ermitteln der Kategorie
Dieses Makro können wir noch etwas verfeinern, da es ja auch einmal vorkommen kann, dass von mehreren Stellen aus neue Kategorien angelegt oder ermittelt werden sollen.
In diesem Fall sollten Sie, ähnlich wie man es auch unter VBA mit Funktionen macht, die Makroaktionen, die zum Ermitteln der KategorieID dienen, in ein eigenes Makro auslagern.
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
Testzugang
eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel
diesen und alle anderen Artikel mit dem Jahresabo