Löschbestätigung selbst gemacht

Datenbank

Access bietet zwar bereits eine Funktion für Sicherheitsabfragen vor dem Löschen von Datensätzen an, aber in der Praxis zeigt sich, dass diese Abfrage häufig nicht ausreichend ist. So sollten zur Optimierung der Benutzerfreundlichkeit häufig zusätzliche Informationen angezeigt werden oder spezielle Reaktionen erfolgen.

In diesem Tipp zeigen wir Ihnen, wie Sie beliebige eigene Sicherheitsabfragen für das Löschen von Datensätzen in Formulare integrieren und dann gezielt auf die jeweilige Antwort des Anwenders reagieren können.

Wenn dem Anwender vor dem Löschen von Datensätzen eine Sicherheitsabfrage angezeigt werden soll, können Sie bekanntlich eine entsprechende Access interne Abfrage benutzen. Wenn der Anwender einen oder mehrere Datensätze löscht, zeigt Access eine Rückfrage an, die mit einem Klick auf JA oder NEIN zu beantworten ist. Das Aktivieren dieser Abfrage hat den Vorteil, dass unbeabsichtigtes oder unüberlegtes Löschen vermieden wird.

Der Nachteil besteht darin, dass Access nun bei jedem Objekt, das gelöscht werden soll, eine solche Sicherheitsabfrage anzeigt und so bei der Entwicklung neuer und der Verwaltung vorhandener Objekte etwas bremsend wirkt. Allerdings lässt sich die interne Sicherheitsabfrage ausschalten und für Formulare eine eigene Sicherheitsabfrage realisieren. Das hat dann wiederum den Vor teil, dass man eigene Texte und Hin weise verwenden kann.

Die beste Lösung besteht darin, eine Schaltfläche LÖSCHEN in das betreffende Formular aufzunehmen. Das ist zwar nicht unbedingt notwendig, da auch die entsprechenden Befehle aus dem Menü BEARBEITEN benutzt werden könnten, aber über eine Schaltfläche können Sie ein Makro aufrufen, das beide Befehle – DATENSATZ MARKIEREN und LÖSCHEN – zusammenfasst und so dem Anwender etwas mehr Komfort bei der Arbeit mit Ihren Datenbanken bietet.

Dazu erstellen Sie im ersten Schritt ein Makro „DS Löschen“ oder importieren das von uns vorbereitete Makro aus unserer Beispieldatenbank. Gehen Sie dann für den Import folgendermaßen vor:

  1. Rufen Sie das Menü DATEI-EXTERNE DATEN-IMPORTIEREN auf.
  2. Markieren Sie unter „Dateityp“ den Eintrag „Microsoft Access“.
  3. Lokalisieren Sie die Beispieldatenbank und klicken Sie auf die Schaltfläche IMPORTIEREN.
  4. Wechseln Sie auf die Registerkarte „Makros“, markieren Sie das Makro „DS Löschen“ und klicken Sie auf OK.

In Access 2007 wechseln Sie in der Multifunktionsleiste auf die Registerkarte „Externe Daten“ und klicken in der Gruppe „Importieren“ auf die Schaltfläche ACCESS. Lokalisieren Sie im nachfolgenden Dialog per DURCH SUCHEN die Beispieldatenbank, aktivieren Sie die Option IMPOR TIE – REN SIE TABELLEN, ABFRAGEN, FORMULARE… IN DIE AKTUELLE DATEN BANK und klicken Sie auf OK. Markieren Sie danach das Makro, klicken Sie auf OK und bestätigen Sie die Abschlussmeldung mit SCHLIEßEN.

Legen Sie nun im Formular eine Schaltfläche „Löschen“ an und weisen Sie dieser Schaltfläche in der Eigenschaft „Beim Klicken“ das Makro „DS Löschen“ zu.

Ein Formular stellt die Ereignisse „Beim Löschen“, „Vor Löschbestätigung“ und „Nach Löschbestätigung“ zur Verfügung. In den dazugehörigen Ereignisprozeduren lassen sich eigene Abfragen realisieren. Die Ereignisprozeduren verfügen dazu über einen Parameter „Cancel“, den Access nach Aufruf der Prozedur prüft. Steht „Cancel“ auf „True“, so bricht Access den Löschvorgang ab. Der einfachste Weg ist der, eine kleine Meldung anzuzeigen. Klickt der Anwender auf NEIN, wird der Parameter „Cancel“ entsprechend gesetzt, sodass Access keine Löschung vornimmt.

Stellen Sie die Eigenschaft „Vor Löschbestätigung“ auf den Eintrag „[Ereignisprozedur]“ und klicken Sie dann auf die Schaltfläche mit den drei kleinen Punkten.

Hier geben Sie nun folgende Anweisungen ein:

Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
Dim R As Variant

Beep
R = MsgBox(„Datensatz wirklich löschen?“, vbYesNo + vbQuestion, „Löschen:“)
If R = vbNo Then
Cancel = True ‚Nicht löschen
Exit Sub
End If

End Sub

Diese kleine Routine zeigt die Frage „Datensatz wirklich löschen?“ mit einer JA- und einer NEIN-Schaltfläche an. Das Ergebnis, also die Nummer der angeklickten Schaltfläche, wird der Variablen „R“ zugewiesen.

Ist auf die Schaltfläche NEIN geklickt worden, so setzen wir „Cancel“ auf „True“ und verlassen die Prozedur. Andernfalls läuft die Routine weiter durch, „Cancel“ bleibt auf „False“ stehen und Access löscht den Datensatz.

In der Meldung können Sie nun zusätzliche spezifische Hinweise wie beispielsweise „Bitte daran denken, die Kundenadresse auch in der Datenbank ‘XYZ’ zu löschen!“ unterbringen oder die Routine um eigene Anweisungen erweitern, die gegebenenfalls im Falle einer Löschung ausgeführt werden sollen:

Private Sub Form_BeforeDelConfirm(Cancel As Integer, Response As Integer)
Dim R As Variant

Beep
R = MsgBox(„Datensatz wirklich löschen?“, vbYesNo + vbQuestion, „Löschen:“)
If R = vbNo Then
Cancel = True ‘Nicht löschen
Exit Sub
End If
DoCmd OpenReport „Kundenliste“, A_Normal ‘Aktuelle Kundenliste drucken
End Sub

Hier wird zum Beispiel ein Bericht geöffnet, der nach der Löschung die aktualisierte Kundenliste ausdruckt.


Modul: modSubs