Unter Access gibt es verschiedene Abfragetypen. Neben den verschiedenen Auswahlabfragen sind die Aktionsabfragen ebenfalls wichtiger Bestandteil. Auch Aktionsabfragen kann man prima über den Abfrageentwurf programmieren. Dieser Artikel stellt die vier verschiedenen Aktionsabfragen vor, mit denen Du Datensätze zu einer Tabelle hinzufügen, die Daten bestehender Datensätze ändern, bestehende Datensätze löschen oder auch neue Tabellen auf Basis einer Auswahlabfragen anlegen kannst.
Beispieldatenbank
Die Beispiele dieses Artikels findest Du in der Datenbank AbfragenBasics_Aktionsabfragen.accdb.
Arten von Aktionsabfragen
Es gibt vier verschiedene Typen von Aktionsabfragen:
- Anfügeabfragen: Fügen neue Datensätze zu einer vorhandenen Tabelle hinzu.
- Aktualisierungsanfragen: Aktualisieren bestehende Datensätze einer Tabelle.
- Löschabfragen: Löschen Datensätze aus einer Tabelle.
- Tabellenerstellungsabfragen: Erstellen eine neue Tabelle auf Basis der angegebenen Auswahlabfrage.
Erstellen einer Anfügeabfrage
Wenn wir die Ribbonbefehle im Bereich Erstellen|Abfragen betrachten, suchen wir vergeblich nach Einträgen zum Erstellen der oben aufgeführten Abfragetypen (siehe Bild 1). Hier ist allein der Befehl Abfrageentwurf zu finden, und auch ein Klick auf die Schaltfläche Abfrage-Assistent eröffnet keine offensichtlichen Möglichkeiten zum Erstellen von Aktionsabfragen.
Bild 1: Anlegen einer neuen Abfrage als Basis für eine Aktionsabfrage
Wenn wir allerdings einmal auf Abfrageentwurf klicken und somit eine neue, leere Abfrage in der Entwurfsansicht anzeigen, erscheinen im Ribbon unter Abfrageentwurf die gewünschten Einträge (siehe Bild 2).
Bild 2: Die Befehle tauchen erst im Entwurf einer neuen Auswahlabfrage auf.
Datensätze löschen per Löschabfrage
Die Löschabfrage ist am einfachsten aufgebaut, daher schauen wir uns diese als Erstes an. Ausgehend von einer frisch angelegten Abfrage ziehen wir als Erstes die Tabelle in den Abfrageentwurf, aus der wir Datensätze löschen wollen – zum Beispiel die Tabelle tblKunden.
Nachdem wir die Tabelle gespeichert haben, fügen wir das Feld KundeID zum Entwurfsraster hinzu und klicken im Ribbon auf die Schaltfläche Abfrageentwurf|Abfragetyp|Löschen (siehe Bild 3).
Bild 3: Erster Entwurf einer Löschabfrage
Dies ändert einige Zeilen im Entwurfsraster:
- die Zeilen Sortierung und Anzeigen fallen weg und
- die Zeile Löschen wird eingeblendet.
Ohne weitere Änderungen wie beispielsweise das Setzen eines Kriteriums können wir nun mit dem Ribbonbefehl Abfrage-ent-wurf|Er-geb-nisse|An-sicht|Da–ten-blattansicht die voraussichtlich von der Aktionsabfrage betroffenen Datensätze anzeigen (siehe Bild 4).
Bild 4: Voraussichtlich von der Aktion betroffene Datensätze
Dies sind allerdings nur die Datensätze, die durch die aktuellen Kriterien ausgewählt werden würden. Welche tatsächlich gelöscht werden, hängt noch von anderen Faktoren ab – zum Beispiel davon, ob die Daten dieser Tabelle gegebenenfalls noch mit anderen Tabellen verknüpft sind und eine Löschbeschränkung vorliegt. Es könnte zum Beispiel sein, dass ein Kunde bereits mit einem Datensatz der Tabelle tblBestellungen verknüpft ist, was ein Löschen verhindern würde.
Die tatsächliche Aktion der Abfrage führen wir dann mit einem Klick auf die Schaltfläche Ausführen im Ribbon aus. Dies zeigt zunächst noch eine Meldung an, die der Benutzer bestätigen muss (siehe Bild 5). Erst wenn das geschehen ist, wird die Aktionsabfrage ausgeführt.
Bild 5: Meldung vor dem Löschen von Datensätzen
In unserem Beispiel geschieht das, was wir bereits beschrieben haben: Die meisten Datensätze sind bereits mit Bestellungen verknüpft und werden nicht gelöscht (siehe Bild 6).
Bild 6: Meldung wegen Schlüsselverletzungen
Kriterien zur Löschabfrage hinzufügen
Eigentlich kommt eine Löschabfrage mit einem Feld aus. Erst wenn wir Kriterien für die zu löschenden Datensätze definieren wollen, müssen wir die Felder hinzufügen, die für die Festlegung der Kriterien benötigt werden. Wenn wir also beispielsweise alle Kunden löschen wollen, die noch keiner Bestellung zugeordnet sind, und somit die Meldung von oben umgehen wollen, können wir eine Unterabfrage als Kriterium des Feldes KundeID hinterlegen:
Nicht In (SELECT KundeID FROM tblBestellungen WHERE tblBestellungen.KundeID = tblKunden.KundeID)
Nach dem Hinzufügen dieser Unterabfrage (siehe Bild 7) löscht die Löschabfrage nur noch die beiden Datensätze der Tabelle tblKunden, die noch keiner Bestellung zugeordnet sind und so verhindern wir auch die Anzeige der zweiten Meldung.
Bild 7: Unterabfrage als Kriterium vor dem Löschen von Datensätzen
Bestätigungen beim Ausführen von Aktionsabfragen unterbinden
Wenn Du nicht möchtest, dass die Meldungen angezeigt werden, mit denen der Benutzer angeben kann, ob er die Abfrage tatsächlich durchführen will, kannst Du diese deaktivieren. Dazu öffnest Du mit Datei|Optionen die Access-Optionen und wechselst dort zum Bereich Clienteinstellungen. Hier findest Du unter Bearbeiten relativ weit unten die Option Bestätigen. Wenn Du hier den Haken bei Aktionsabfragen entfernst, werden solche Meldungen in Zukunft nicht mehr angezeigt (siehe Bild 8).
Bild 8: Einstellen der Optionen für Aktionsabfragen
Der Bereich Clienteinstellungen, in dem sich diese Option befindet, deutet darauf hin, dass die Einstellung nur für den aktuellen Client gilt und beim Weitergeben der Datenbank nicht übernommen wird – dazu müsste man andere Schritte unternehmen, deren Beschreibung an dieser Stelle den Rahmen sprengen würde.
Datensätze ändern per Aktualisierungsabfrage
Das Ändern der Daten einer Tabelle kann verschiedene Gründe haben. Vielleicht möchtest Du leere Felder mit Inhalten füllen, vorhandene Inhalte ändern oder vielleicht sollen auch vorhandene Daten aus Feldern entfernt werden. Die Vorgehensweise ist immer ähnlich, nur wenn die Änderung eines Feldes auf Basis der vorhandenen Daten geschehen soll, dann gibt es einen kleinen Unterschied.
Feldinhalte ersetzen per Aktualisierungsabfrage
Im ersten Beispiel wollen wir die Inhalte eines Feldes ersetzen, wenn dieses einen bestimmten Wert aufweist. Wir wollen die Daten der Tabelle tblKunden international machen und die Bezeichnungen der Länder auf Englisch umstellen – zunächst nur für Deutschland.
Dazu erstellen wir zuerst wieder eine neue, leere Abfrage in der Entwurfsansicht. Dieser fügen wir die Tabelle tblKunden hinzu. Dann ziehen wir die beiden Felder KundeID und Land in das Entwurfsraster.
Um die Auswahlabfrage in eine Aktualisierungsabfrage umzuwandeln, klicken wir im Ribbon auf die Schaltfläche Abfrageentwurf|Abfragetyp|Aktualisieren.
Dies fügt die Zeile Aktualisieren hinzu, der wir im Feld Land den Wert “Germany” hinzufügen (siehe Bild 9).
Bild 9: Abfrage zum Ändern des Landes von Deutschland in Germany
Entscheidend ist nun, dass wir für die gleiche Spalte noch das Kriterium “Deutschland” angeben, denn sonst würde die Abfrage für alle Datensätze den Wert Germany eintragen – auch für solche, die im Feld Land einen anderen Wert als Deutschland aufweisen.
Anschließend können wir die Abfrage wie bereits bei der Löschabfrage noch testen, das heißt, wir können anzeigen, auf welche Datensätze sich die Änderungen auswirken. Das Ergebnis aus Bild 10 zeigt, dass wir wohl die richtigen Datensätze erwischen werden.
Bild 10: Testen der Abfrage zum Ändern des Landes
Wir wollen die Aktionsabfrage diesmal nicht mit dem Ribbonbefehl Abfrageentwurf|Ergebnisse|Ausführen starten, sondern schließen diese und klicken diesmal doppelt auf den Namen der Abfrage im Navigationsbereich von Access. Je nachdem, ob Du die Anzeige von Bestätigungsmeldungen wie oben beschrieben deaktiviert hast, erscheint nun noch eine Rückfrage oder Access ändert die betroffenen Datensätze direkt.
Feldinhalte ändern per Aktualisierungsabfrage
Der Unterschied zu der zuvor beschriebenen Abfrage ist, dass wir diesmal den Feldwert auf Basis des zuvor enthaltenen Werts anpassen wollen. Dazu gibt es verschiedene Anlässe:
- Datumsangaben um eine bestimmte Menge von Tagen nach vorn oder hinten verändern
- Preis um x Prozent erhöhen oder senken
- Bestimmten Texten Informationen hinzufügen oder Teile der Texte ersetzen
In allen Fällen wollen wir den neuen Inhalt des Feldes aufbauend auf dem alten Inhalt gestalten und müssen daher auf den Feldinhalt zugreifen.
Im folgenden Beispiel wollen wir die Preise aller Artikel der Kategorie Gewürze um 10 Prozent erhöhen. Dazu erstellen wir eine neue Abfrage, der wir die Tabelle tblArtikel hinzufügen. Aus dieser Tabelle ziehen wir die Felder KategorieID und Einzelpreis in das Entwurfsraster. Für das Feld KategorieID legen wir den Wert 2 als Kriterium fest. Diesen Wert müssen wir zuvor aus der Tabelle tblKategorien für die Kategorie Gewürze ermitteln.
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: