Home > Artikel > Ausgabe 5/2017 > Meldungen bei Datensatzänderungen

Meldungen bei Datensatzänderungen

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Access bietet einige Sicherheitsmaßnahmen, um den Benutzer vor unbewussten und nicht wiederherstellbaren Änderungen von Daten zu schützen. Dabei erscheinen zu bestimmten Gelegenheiten wie etwa vor dem Löschen von Datensätzen entsprechende Warnmeldungen. Das kann auch geschehen, wenn der Benutzer Daten durch den Aufruf von VBA-Anweisungen löschen will oder dies per Aktionsabfrage erledigt. Dieser Artikel zeigt, wo Access eingreift und wie Sie das Verhalten für Ihre Zwecke anpassen können.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1705_MeldungenBeiDatensatzaenderungen.accdb.

Wo tauchen Warnmeldungen auf?

Als Erstes sehen wir uns an, wo überhaupt Warnmeldungen auftauchen, wenn der Benutzer Datensatzänderungen durchführt.

Dies bereits in der Datenblattansicht einer Tabelle der Fall. Versuchen Sie hier, einen Datensatz zu löschen, erscheint die Meldung aus Bild 1. Diese taucht auf, nachdem der zu löschende Datensatz bereits verschwunden ist. Klicken Sie hier auf Nein, wird der Datensatz wiederhergestellt.

Meldung beim manuellen Löschen aus der Datenblattansicht

Bild 1: Meldung beim manuellen Löschen aus der Datenblattansicht

Die gleiche Meldung erscheint auch bei allen weiteren Datenblattansichten, also etwa von Abfragen oder in Formularen.

Die zweite Gelegenheit zum Anzeigen von Meldungen ist das Ausführen von Aktionsabfragen wie zum Beispiel die Abfrage zum Löschen von Daten aus Bild 2. Auch hier bewirkt ein Klick auf Ja, dass die Abfrage tatsächlich ausgeführt wird und Nein, dass die Daten erhalten bleiben.

Meldung beim Löschen per Aktionsabfrage

Bild 2: Meldung beim Löschen per Aktionsabfrage

Nächste Gelegenheit ist das Löschen von Datensätzen über DAO, und zwar mit der Delete-Methode für den aktuell im Recordset markierten Datensatz.

Folgende Prozedur öffnet ein Recordset auf Basis der Tabelle tblBestelldetails, bewegt den Datensatzzeiger zum ersten und wieder zum ersten Datensatz, damit rst.RecordCount die korrekte Anzahl Datensätze ausgibt, löscht dann den aktuellen Datensatz und gibt erneut die Anzahl der Datensätze aus:

Public Sub LoeschenMitDAO_I()

Dim db As DAO.Database

Dim rst As DAO.Recordset

Set db = CurrentDb

Set rst = db.OpenRecordset("SELECT * FROM tblBestelldetails", dbOpenDynaset)

rst.MoveLast

rst.MoveFirst

Debug.Print rst.RecordCount

If Not rst.EOF Then

'ersten Datensatz löschen

rst.Delete

End If

Debug.Print rst.RecordCount

End Sub

Im Direktbereich können Sie ablesen, dass genau ein Datensatz gelöscht wurde – wobei allerdings diesmal keine Meldung mit einer Rückfrage an den Benutzer ausgegeben wurde.

Aktionen im Recordset führen also direkt zum Löschen des Datensatzes.

Wie sieht es mit dem Löschen per Execute-Anweisung aus? Schauen wir es uns anhand des folgenden Beispiels an:

Public Sub LoeschenMitDAO_II()

Dim db As DAO.Database

Set db = CurrentDb

db.Execute "DELETE FROM tblBestelldetails WHERE BestellungID = 10250", dbFailOnError

Debug.Print db.RecordsAffected

End Sub

Hier haben wir die Execute-Methode des Database-Objekts mit einer DELETE-Anweisung aufgerufen. Es werden Datensätze gelöscht, aber auch hier gibt es keine Rückfrage an den Benutzer.

Hat der Benutzer gar keine Möglichkeit, bei Datenänderungen über VBA über die anstehenden Änderungen informiert zu werden – außer gegebenenfalls über selbst programmierte Meldungen? Doch, wenn Sie die Methode RunSQL des DoCmd-Objekts wie in Bild 3 aufrufen.

Meldung beim Löschen per DoCmd.RunSQL

Bild 3: Meldung beim Löschen per DoCmd.RunSQL

Klicken Sie hier auf Ja, wird die Abfrage durchgeführt, Nein führt allerdings zu einem Laufzeitfehler (siehe Bild 4). In diesem Fall müssen Sie noch eine Fehlerbehandlung zum Code hinzufügen, die beispielsweise wie folgt aussieht:

Meldung beim Abbrechen einer RunSQL-Anweisung

Bild 4: Meldung beim Abbrechen einer RunSQL-Anweisung

On Error Resume Next

DoCmd.RunSQL strSQL

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!