Home > Artikel > Ausgabe 5/2011 > Daten per Kombinationsfeld auswählen und löschen

Daten per Kombinationsfeld auswählen und löschen

  PDF ansehen

  Download PDF und Beispieldatenbank

Wenn Sie den Benutzern Ihrer Datenbank die Gelegenheit bieten möchten, Datensätze gezielt zu löschen, lässt sich das ganz leicht etwa mit einem Kombinationsfeld und einer Schaltfläche erreichen. Mit dem Kombinationsfeld wählt der Benutzer den zu löschenden Datensatz aus und die Schaltfläche startet den eigentlichen Löschvorgang.

Beispieldatenbank

Die Beispiele zu diesem Artikel finden Sie in der Datenbank 1105_DatenPerKombifeldLoeschen.mdb.

Beispiel: Artikel löschen

Das Beispiel zu diesem Artikel soll ein Formular enthalten, in dem der Benutzer einen Artikel auswählt und diesen mit einem Klick auf eine Schaltfläche löscht. Die Auswahl des zu löschenden Artikels soll der Einfachheit halber über ein Kombinationsfeld erfolgen, dass die Felder ArtikelID und den Artikelname der Tabelle tblArtikel als Datensatzherkunft enthält.

Zum Nachvollziehen des Beispiels erstellen Sie ein neues Formular namens frmArtikelLoeschen und fügen ein Kombinationsfeld und eine Schaltfläche wie in Bild 1 hinzu. Das Kombinationsfeld nennen Sie cboArtikelID und die Schaltfläche cmdArtikelLoeschen. Damit das Kombinationsfeld die Artikel aus der Tabelle tblArtikel zur Auswahl anbietet, klicken Sie in den Eigenschaften des Kombinationsfeldes auf Datensatzherkunft und dann auf die rechts erscheinende Schaltfläche mit den drei Punkten. Es öffnet sich der Abfrageeditor. Dort fügen Sie aus der Liste der Tabellen den Eintrag tblArtikel hinzu und ziehen die beiden Felder ArtikelID und Artikelname in das Entwurfsraster. Stellen Sie außerdem die Sortierung für das Feld Artikelname auf Aufsteigend ein.

Entwurfsansicht des Formulars zum Löschen von Artikeln

Bild 1: Entwurfsansicht des Formulars zum Löschen von Artikeln

Schließen Sie den Abfrageentwurf und prüfen Sie, ob Access den folgenden Ausdruck in die Eigenschaft Datensatzherkunft übernommen hat – dies ist der SQL-Code der Abfrage:

SELECT tblArtikel.ArtikelID, tblArtikel.Artikelname FROM tblArtikel;

Stellen Sie außerdem die beiden Eigenschaften Spaltenanzahl und Spaltenbreiten auf die Werte 2 und 0cm ein. Auf diese Weise wird die erste Spalte mit den Werten des Feldes ArtikelID mit der Breite 0 angezeigt und somit ausgeblendet, das zweite Feld Artikelname nimmt den verbleibenden Platz ein. Nach einem Wechseln in die Formularansicht können Sie das Auswählen des zu löschenden Artikels bereits testen (siehe Bild 2).

Auswahl eines Artikels per Kombinationsfeld

Bild 2: Auswahl eines Artikels per Kombinationsfeld

Löschen per Mausklick

Fehlt noch die Schaltfläche cmdLoeschen: Diese soll nach dem Anklicken den aktuell ausgewählten Datensatz aus der Tabelle tblArtikel löschen. Dazu legen Sie zunächst eine leere Ereignisprozedur für das Ereignis Beim Klicken an. Wählen Sie dazu in der Entwurfsansicht des Formulars den Eintrag [Ereignisprozedur] für die Eigenschaft Beim Klicken der Schaltfläche aus und klicken Sie dann auf die Schaltfläche mit den drei Punkten. Der VBA-Editor zeigt nun die leere Prozedur an:

Private Sub cmdArtikelLoeschen_Click()

End Sub

Diese Prozedur füllen wir nun mit einigen Anweisungen, die in Aktionsabfragen per VBA ausführen genauer erläutert werden:

Private Sub cmdArtikelLoeschen_Click()

     Dim db As DAO.Database

     Dim lngArtikelID As Long

     Dim strSQL As String

     Set db = CurrentDb

     lngArtikelID = Me!cboArtikelID

     strSQL = "DELETE FROM tblArtikel WHERE ArtikelID = " & lngArtikelID

     db.Execute strSQL

     Set db = Nothing

End Sub

Wenn wir davon ausgehen, dass der Benutzer einen Eintrag des Kombinationsfeldes ausgewählt hat, wird lngArtikelID mit dem Wert des Feldes ArtikelID des betreffenden Artikels gefüllt, also beispielsweise mit dem Wert 10. Der SQL-Ausdruck sieht dann etwa so aus:

DELETE FROM tblArtikel WHERE ArtikelID = 10

Die folgende Execute-Anweisung führt diese Aktionsabfrage aus und löscht den Datensatz, soweit dieser vorhanden ist. Das sollte jedoch der Fall sein, da er soeben noch durch den Benutzer ausgewählt werden konnte.

Fertig – das Auswählen des zu löschenden Datensatzes und das anschließende Löschen funktionieren!

Finetuning

Allerdings dürfen Sie niemals davon ausgehen, dass der Benutzer ein solches Formular nach Ihren Vorstellungen verwendet. Sie wissen, dass Sie einen Artikel auswählen müssen und diesen dann durch einen Klick auf die Schaltfläche löschen können. Benutzer tun jedoch gelegentlich unerwartete Dinge.

Zum Beispiel probieren sie Schaltflächen aus, ohne die vorher zu erledigenden Schritte durchzuführen. In diesem Fall löst das den Fehler aus Bild 3 aus.

Wurde kein Datensatz ausgewählt, führt ein Klick auf die Schaltfläche zu diesem Fehler.

Bild 3: Wurde kein Datensatz ausgewählt, führt ein Klick auf die Schaltfläche zu diesem Fehler.

Was ist hier passiert? Wenn Sie auf die Schaltfläche Debuggen klicken, erfahren Sie mehr. Es erscheint dann nämlich der VBA-Editor und die fehlerhafte Zeile wird farbig hinterlegt (siehe Bild 4). In diesem Fall handelt es sich um die folgende Zeile:

Nach einem Klick auf die Debuggen-Schaltfläche zeigt der VBA-Editor die fehlerhafte Zeile an.

Bild 4: Nach einem Klick auf die Debuggen-Schaltfläche zeigt der VBA-Editor die fehlerhafte Zeile an.

lngArtikelID = Me!cboArtikelID

Da der Benutzer keinen Eintrag aus dem Kombinationsfeld cboArtikelID ausgewählt hat, enthält dieses den Wert Null. Wir kommen in einem späteren Artikel auf die Funktion dieses Wertes zurück. Aktuell reicht die Information, dass Null kein Zahlenwert ist und deshalb nicht der Long-Variablen lngArtikelID zugeordnet werden kann. Genau das löst den hier aufgetretenen Fehler auf.

Also bauen Sie eine Prüfung ein, die sicherstellt, dass der Benutzer mit dem Kombinationsfeld einen Wert auswählt und erst dann auf die Schaltfläche cmdArtikelLoeschen klickt. Die folgenden Zeilen fügen Sie direkt vor der Zeile Set db = CurrentDb ein:

If IsNull(Me!cboArtikelID) Then

     MsgBox "Wählen Sie erst den zu löschenden Artikel aus."

     Exit Sub

End If

Wenn der Benutzer noch keinen Datensatz ausgewählt hat, erscheint nun eine entsprechende Meldung und die Prozedur wird beendet.