PDA

Vollständige Version anzeigen : Mehrfachauswahl selectfeld an delete query übergeben


galaxy
29.04.2009, 20:25
Hallo,

Ich habe ein Formular (Formular1) welches mir einfach eine Liste (Liste2) mit mehrfachauswahl bereitstellt und einen button der nach betaetigung eine delete query (query1) laufen laesst, welche alle datensaetze anhand der ausgewaehlten elemente im selectfeld aus Tabelle1 loeschen soll. Bin nicht gerade ein Meister in VBA

Query zum fuellen des select Feldes: select distinct feld from tabelle1;

delete query sieht so aus: delete from tabelle1 where feld = GetListValues()

Im Modul1 habe ich folgende Funkton erstellt:

Function GetListValues()

Dim Gruppe As String
Dim i As Integer


For i = 0 To Formulare!Formular1!Liste2.ListCount - 1
If Formulare!Formular1!Liste2.Selected(i) Then Gruppe = Gruppe & Formulare!Formular1!Liste2.ItemData(i) & ","
Next i

' soll das letzte Komma loeschen
If Gruppe <> "" Then
Gruppe = Left(Gruppe, Len(Gruppe) - 1)
End If

Hier weiss ich aber nicht mehr genau was ich schreiben muss um die Werte an meine Query zu übergeben

End Function

Aber leider funktioniert das hier nicht. Fehlermeldung: "Objekt erforderlich" (in der Zeile: For i = 0 To Formulare!Formular1!Liste2.ListCount - 1)(Formular ist aber offen und ein Wert ist ausgewählt). Eigentlich sollte das Problem (Uebergabe von mehrfachselektion an query where clause) im Netz zu finden sein, aber ich konnte nichts finden was mein Problem löst.

Kann mir jemand helfen ? Vielmals Merci im Voraus

ps: Optimal waere noch wenn ich im Selectfeld auch einen Eintrag All haette, sodass dann kein Where clause an meine Delete query gehangen wird. Es soll dann also alles geloescht werden

Arne Dieckmann
29.04.2009, 20:29
VBA kennt nur Forms - ersetze also alle Vorkommen von Formulare durch Forms

Und dann zum Löschen in etwa so:

strSQL="DELETE FROM Tabelle WHERE TabellenFeld in(" & Gruppe & ")"
Currentdb.Execute strSQL

Beachte: Falls das Tabellenfeld ein Textfeld ist, musst du die einzelnen Werte (weiter oben) in Hochkommata setzen

Eine extra Löschabfrage würde ich dafür nicht im Datenbankfenster anlegen. Die "all"-Geschichte kannst du mit einer UNION-Abfrage als Datenherkunft erledigen und die alleinige Auswahl von "all" als Sonderfall vor dem Zusammensetzen von strSQL behandeln.