Tipps und Tricks 1/2013

In dieser Folge unserer Tipps und Tricks erfahren Sie, wie Sie Datensätze zweier Tabellen in einer einzigen Abfrage zusammenführen, wie Sie Berichte mehrfach drucken und wie Sie die Daten in Haupt- und Unterformular synchron anzeigen – so, dass das Hauptformular jeweils den im Unterformular markierten Datensatz anzeigt und umgekehrt.

Daten zusammenführen per Abfrage

Manchmal geschehen beim Entwickeln ungeplante Dinge. So kann es beispielsweise geschehen, dass Sie zwei Versionen einer Datenbank besitzen – zum Beispiel eine veraltete, archivierte Version und eine aktuelle. Wenn Sie dann durch Zufall (etwa durch versehentliches Öffnen der älteren Version) die alte Version weiterentwickeln, aber in der anderen die Daten pflegen, können Sie am einfachsten die aktuellen Daten in die weiterentwickelte Version übernehmen.

Sie könnten dann natürlich schnell alle Datensätze löschen und mit den Daten der neuen Tabelle füllen oder die komplette Tabelle löschen und neu anlegen. Beides führt zu Problemen: Beim Neuerstellen der Datensätze stimmen Beziehungen nicht mehr oder die Beziehungen müssen gar für eine komplett neu angelegte Tabelle neu aufgebaut werden.

Einfacher ist die folgende Methode, die in zwei Schritten nicht mehr vorhandene Datensätze der alten Version entfernt und die vorhandenen Datensätze aktualisiert.

Das Beispiel bezieht sich auf die Tabellen tblArtikel und tblArtikel_Geaendert, wobei tblArtikel den alten Datenbestand repräsentiert und tblArtikel_Geaendert den neuen, geänderten Datenbestand. Dabei gibt es gelöschte, geänderte und neu angelegte Datensätze.

Die Tabelle tblArtikel_Geaendert können Sie dabei in die Zieldatenbank kopieren oder einfach nur eine Verknüpfung erstellen – wir haben diese einfach kopiert.

Zunächst kümmern wir uns darum, die in der Tabelle tblArtikel_Geaendert gelöschten Datensätze auch aus der Tabelle tblArtikel zu löschen.

Das Entfernen der Datensätze aus der Tabelle tblArtikel, die zwischenzeitlich aus der Tabelle tblArtikel_Geaendert gelöscht wurden, übernimmt die Aktionsabfrage aus Bild 1. Diese enthält die Tabelle tblArtikel als Datenherkunft. Um alle Artikel dieser Tabelle zu ermitteln, die nicht mehr in der Tabelle tblArtikel_Geaendert vorhanden sind, verwenden wir eine Unterabfrage. Diese lautet SELECT ArtikelID FROM tblArtikel_Geaendert und liefert alle noch vorhandenen Datensätze. Das Feld ArtikelID eines jeden Datensatzes der Tabelle tblArtikel wird nun mit den ermittelten Werten verglichen. Ist der Wert nicht vorhanden, ist die Bedingung erfüllt und der Datensatz kann gelöscht werden.

pic001.png

Bild 1: Löschen der nicht mehr vorhandenen Datensätze

Danach werfen wir einen Blick auf die geänderten und neu hinzugefügten Datensätze. Genau genommen gehen wir dabei nicht sonderlich differenziert vor, sondern gleichen einfach die kompletten Daten ab. Der Clou liegt hierbei darin, beide Vorgänge in einem Rutsch zu erledigen, sprich: mit einer einzigen UPDATE-Abfrage und ohne INSERT INTO-Abfrage.

Dazu erstellen Sie eine neue, leere Abfrage und ziehen die Ziel- und die Quelltabelle in die Entwurfsansicht. Damit jeder Datensatz mit seinem Pendant abgeglichen wird, erstellen Sie eine Beziehung zwischen den Feldern ArtikelID der beiden Tabellen tblArtikel und tblArtikel_Geaendert. Damit liefert das Abfrageergebnis aber nur solche Artikel, bei denen die ArtikelID in beiden Tabellen vorkommt. Wir wollen jedoch auch die Artikel im Ergebnis der Abfrage sehen, die zwar in der Tabelle tblArtikel_Geaendert enthalten sind, aber nicht in der Tabelle tblArtikel – also alle Artikel, die neu hinzugekommen sind.

Dies lässt sich leicht über die Eigenschaften der Beziehung zwischen den beiden Tabellen realisieren. Klicken Sie doppelt auf den Beziehungspfeil und wählen Sie im nun erscheinenden Dialog den Eintrag Beinhaltet alle Datensätze der Tabelle tblArtikel_Geaendert … aus (s. Bild 2).

pic002.png

Bild 3: Aktualisieren und Hinzufügen geänderter Datensätze

Dadurch fügt Access zum Beziehungspfeil eine Pfeilspitze in Richtung der Tabelle tblArtikel hinzu (s. Bild 3). Nun fehlen noch drei Schritte zur Fertigstellung der Abfrage, wie sie in der Abbildung erscheint:

pic003.png

Bild 2: Einstellen der Beziehungseigenschaften

  • Ziehen Sie alle Felder der Tabelle tblArtikel in das Entwurfsraster.
  • Wandeln Sie die Abfrage über den Kontextmenüeintrag Abfragetyp|Aktualisierungsabfrage in eine Aktualisierungsabfrage um.
  • Fügen Sie der Zeile Aktualisieren jeweils einen Ausdruck hinzu, der aus dem Namen der Quelltabelle (also tblArtikel_Geaendert), einem Punkt und dem passenden Feldnamen besteht – also beispielsweise tblArtikel_Geaendert.ArtikelID für die Spalte des Feldes ArtikelID.

Fertig! Wenn Sie nun einige Datensätze der Tabelle tblArtikel_Geaendert löschen, neue Datensätze hinzufügen oder bestehende Datensätze ändern, brauchen Sie nur die beiden Aktionsabfragen qryGeloeschteArtikelEntfernen und qryArtikelZusammenfuehren auszuführen.

Gegebenenfalls gibt es eine Einschränkung beim Löschen der Daten: Sollte es noch Datensätze in der Tabelle tblArtikel geben, die mit Datensätzen anderer Tabellen verknüpft sind, und ist keine Löschweitergabe definiert, können die Datensätze nicht gelöscht werden. Dazu müssen Sie erst auf die gleiche Weise die Datensätze der verknüpften Tabellen aktualisieren oder Löschweitergabe definieren.

Bericht mehrfach drucken

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