Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
Wenn Sie die Beziehung zwischen zwei Tabellen festlegen, haben Sie die Möglichkeit, referenzielle Integrität für die Daten zu definieren. Ist dies geschehen, legen Sie mit der Option Löschweitergabe auch noch fest, ob verknüpfte Daten beim Löschen von Datensätzen auf der einen Seite der Beziehung ebenfalls gelöscht werden sollen. Wenn Sie solche Daten in Formularen löschen, erhalten Sie unter Umständen Systemmeldungen, die für den Endnutzer der Anwendung nur wenig Aussagekraft haben. Dieser Beitrag zeigt, wie Sie mit dem Löschen von in Beziehung stehenden Daten umgehen können.
Unsere Südsturm-Beispieldatenbank liefert ausreichend Tabellen und Beziehungen, um die verschiedenen Konstellationen des Einsatzes der Löschweitergabe oder eben des Weglassens der Löschweitergabe zu beurteilen.
Löschweitergabe oder nicht
Wie und wo wirkt die Löschweitergabe eigentlich In der Beziehung zwischen Kunden und Anreden sind diese nicht definiert (siehe Bild 1).

Bild 1: Anlegen einer Beziehung mit referenzieller Integrität, aber ohne Löschweitergabe
Dies sorgt dafür, dass Sie in einer 1:n-Beziehung zwischen einer Kunden- und einer Anreden-Tabelle zwar Kunden löschen können, ohne dass die Datensätze der Anreden-Tabelle davon berührt werden. Sie können aber keine Anreden löschen, die bereits mindestens einem Kunden zugeordnet wurden. Wenn Sie dies dennoch versuchen, erhalten Sie etwa in der Datenblattansicht die Meldung aus Bild 2.

Bild 2: Ohne Löschweitergabe werden verknüpfte Datensätze auf der n-Seite der Beziehung geschützt.
Wenn hier nun die Option Löschweitergabe aktiviert wäre, würde das Löschen einer Anrede dazu führen, dass auch alle damit verknüpften Kunden-Datensätze gelöscht würden – und das wäre einigermaßen fatal. Deshalb sollten Sie die Löschweitergabe nicht einfach so festlegen.
Eine Stelle, an der die Löschweitergabe sinnvoll ist, ist etwa die Beziehung von Kunden und Bestellungen. Wenn ein Kunde Sie auffordert, alle Kundendaten zu löschen, sind davon natürlich auch die Bestellungsdaten betroffen – Sie können ja keinen Datensatz in der Tabelle tblBestellungen behalten, ohne dass dieser einem Kunden zugeordnet ist. Wir gehen an dieser Stelle davon aus, dass Sie die Kunden- und Bestelldaten tatsächlich nicht mehr benötigen und diese löschen können. In diesem Fall legen Sie für die Beziehung zwischen den Tabellen tblKunden und tblBestellungen die Eigenschaft Löschweitergabe an verwandte Datensätze fest (siehe Bild 3).

Bild 3: Löschweitergabe zwischen Kunden und Bestellungen
Ist dies der Fall und die Option Client-einstellungen|Be-ar-beiten|Bestätigen|Datensatzänderungen in den Access-Optionen ist aktiviert, erhalten Sie vor dem Löschen eines Kunden-Datensatzes, dem bereits Bestelldatensätze zugeordnet sind, die Meldung aus Bild 4.

Bild 4: Bei aktiver Löschweitergabe erscheint mit Standardoptionen diese Meldung beim Versuch, einen Datensatz mit verknüpften Daten zu löschen.
Wie Sie solche Meldungen durch eigene Meldungen ersetzen, können Sie im Beitrag Löschen in Formularen: Ereignisse nachlesen (www.access-im-unternehmen.de/1128). Wir schauen uns nun an, wie Sie die Meldungen, die beim Fehlschlagen des Löschvorgangs von Datensätzen ohne Löschweitergabe erscheinen, durch eine selbst definierte Meldung ersetzen können.
Eigene Meldung bei gescheitertem Löschen
Die obige Meldung Der Datensatz kann nicht gelöscht oder geändert werden, da die Tabelle „tblKunden“ in Beziehung stehende Datensätze enthält können Sie nicht so einfach deaktivieren – auch nicht, wenn Sie die Access-Option Clienteinstellungen|Bearbeiten|Bestäti-gen|Daten-satzänderungen deaktivieren.
Es gibt auch scheinbar keine Möglichkeit, per VBA in den Aufruf dieser Meldung einzugreifen – was auch logisch scheint, dann die Meldung kann ja auch komplett über die Benutzeroberfläche ausgelöst werden.
Die einzige Möglichkeit, hier einzugreifen, wird klar, wenn Sie diese Hinweismeldung anders interpretieren – nämlich als Fehlermeldung! Dennoch bleibt die Frage: Wo können wir eine Fehlermeldung unterbinden, die gar nicht per VBA ausgelöst wird Die Lösung ist nicht leicht zu erraten, aber letztlich doch einfach.
Erstens gelingt dies ausschließlich in Formularen und nicht in der Datenblattansicht von Tabellen oder Abfragen. Zweitens erledigen wir das mit der Ereignisprozedur, die durch das Ereignis Bei Fehler des Formulars ausgelöst wird.
Für das Beispiel entfernen wir nun zunächst den Haken bei der Option Löschweitergabe an verwandte Datensätze der Beziehung zwischen den Tabellen tblKunden und tblBestellungen. Damit sorgen wir also dafür, dass die oben erwähnte Meldung wieder erscheint statt der Rückfrage, ob die verknüpften Datensätze mitgelöscht werden sollen (siehe Bild 5).

Bild 5: Entfernen der Löschweitergabe
In einem Beispielformular, das einfach die Tabelle tblKunden mit allen Feldern im Detailbereich und dem Wert Datenblatt für die Eigenschaft Standardansicht verwendet (siehe Bild 6), wollen wir den Einsatz der Ereignisprozedur Bei Fehler demonstrieren.

Bild 6: Entwurf des Beispielformulars
Nur für Abonnenten
Ab hier wird’s wirklich spannend – der Rest ist exklusiv für Abonnenten.
Mit dem Abo von Access im Unternehmen bekommst du den kompletten Artikel – inklusive vollständigem Code, Beispieldatenbank und Schritt-für-Schritt-Erklärung.
So sparst du dir stundenlanges Herumprobieren, vermeidest teure Fehler in deiner Access-Anwendung und kannst Lösungen direkt in deinem Unternehmen einsetzen, statt nur darüber zu lesen.
Teste Access im Unternehmen jetzt 4 Wochen lang kostenlos: Voller Zugriff auf alle Artikel, Downloads und Beispieldatenbanken. Kein Risiko – wenn es für dich nicht passt, kündigst du einfach innerhalb der ersten vier Wochen.
Bereits Abonnent? Hier einloggen
Kostenlos & unverbindlich
Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?
Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?
In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.
Jetzt kostenloses Access-Audit anfordern →