In den Übersichtsformularen für Kunden und Artikel gibt es seit den ersten Artikeln der Reihe eine Schaltfläche zum Löschen. Solange ein Kunde noch keine Rechnung hat, löscht sie den Kunden. Hat er Rechnungen, bleibt der Kunde stehen, ohne dass die Schaltfläche erklärt, warum. Dass das Löschen scheitert, ist gewollt, die fehlende Rückmeldung nicht. Wie wir vor dem Löschen prüfen, ob zu einem Kunden oder Artikel noch Daten gehören, und wie wir Fehler beim Löschen mit einer Fehlerbehandlung abfangen, liest Du in diesem Artikel.
Beispieldatenbank
Die Beispiele dieses Artikels findest Du in der Datenbank Rechnungsverwaltung_KundenUndArtikelLoeschen.accdb. Sie baut auf der Datenbank aus dem Artikel Rechnungsverwaltung: Ansprechpartner zu Kunden verwalten (www.access-basics.de/726) auf.
Das Problem
Sehen wir uns zuerst an, was bisher passiert. Öffne das Formular frmKundenuebersicht, markiere die Kolbe Elektrotechnik GmbH und klicke auf Kunde löschen. Nach unserer eigenen Rückfrage meldet Access gar nichts und ignoriert das Löschen einfach.
Markieren wir den Datensatz dagegen über den Datensatzmarkierer und löschen ihn mit der Entf-Taste, erscheint die Meldung, dass der Datensatz nicht gelöscht werden kann, weil die Tabelle tblRechnungen in Beziehung stehende Datensätze enthält (siehe Bild 1).
Bild 1: Die Meldung von Access beim Löschen eines Kunden mit Rechnungen
Die Meldung ist inhaltlich richtig. Im Datenmodell haben wir die Beziehung zwischen tblKunden und tblRechnungen mit referentieller Integrität, aber ohne Löschweitergabe angelegt. Ein Kunde, zu dem Rechnungen gehören, lässt sich deshalb nicht löschen, denn Rechnungen, die wir gestellt haben, müssen wir aufbewahren. Die Beziehung schützt zusätzlich alle weiteren Rechnungen eines Kunden.
Hätten wir eine Löschweitergabe eingerichtet, würde Access mit dem Kunden alle seine Rechnungen löschen.
Verbessern wollen wir also die Art, wie das Löschen scheitert. Die Schaltfläche meldet nichts, und die Meldung von Access beim manuellen Löschen nennt Tabellen und Beziehungen, die ein Benutzer nicht kennt.
Außerdem fragen wir zuerst, ob der Kunde wirklich gelöscht werden soll, obwohl das Löschen gar nicht möglich ist. Deshalb prüfen wir vorher und fragen nur, wenn das Löschen möglich ist.
Bei den Artikeln der Rechnungsverwaltung gilt dasselbe: Die Beziehung zwischen tblArtikel und tblRechnungspositionen hat ebenfalls keine Löschweitergabe, und ein Artikel, der in einer Rechnungsposition verwendet wird, lässt sich nicht löschen.
Vorher prüfen statt Fehler abwarten
Unser exklusives Angebot für Dich!
(Das Abo ist jederzeit monatlich kündbar)
Hier geht’s weiter →Die ersten 4 Wochen kostenlos testen – voller Zugriff auf alle Artikel, vollständigen Code und Beispieldatenbanken. Kein Risiko: Wenn es nicht passt, kündigst Du einfach innerhalb der ersten vier Wochen.
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 →![Access [basics]](https://access-basics.de/wp-content/uploads/2021/02/logo400.png)
