Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

Bitte teilen Sie uns Ihre Anrede, Ihren Namen und Ihre E-Mail-Adresse mit:

Anrede:
Vorname:
Nachname:
E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 4/2018.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Löschen von in Beziehung stehenden Daten

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).

Anlegen einer Beziehung mit referenzieller Integrität, aber ohne Löschweitergabe

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.

Ohne Löschweitergabe werden verknüpfte Datensätze auf der n-Seite der Beziehung geschützt.

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).

Löschweitergabe zwischen Kunden und Bestellungen

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.

Bei aktiver Löschweitergabe erscheint mit Standardoptionen diese Meldung beim Versuch, einen Datensatz mit verknüpften Daten zu löschen.

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).

Entfernen der Löschweitergabe

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.

Entwurf des Beispielformulars

Bild 6: Entwurf des Beispielformulars

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

Bitte teilen Sie uns Ihre Anrede, Ihren Namen und Ihre E-Mail-Adresse mit:

Anrede:
Vorname:
Nachname:
E-Mail:

© 2003-2018 André Minhorst Alle Rechte vorbehalten.