Zu diesem Thema habe ich auf diesem Forum viel gefunden. Nach Durchsicht etlicher Post habe ich gehofft ich kann mein Problem selber lösen, aber leider passt etwas nicht. Ich habe ein Listfeld für die Auswahl von mehreren Kalendertagen. Die Auswahl soll später für eine WHERE Kondition verwendet werden. Untenstehender Code liefert bei mir in der MsgBox nach Anwahl mehrerer Einträge immer ein "Leerfeld". Das Listfeld selber zieht sich die Kalendertage aus einer Tabelle und ist einspaltig. Wenn jemand eine Vermutung hat was ich falsch mache wäre ich für einen Tipp dankbar.
Dim Krit As String, varElement As Variant
Krit = ""
If Not IsNull(Me!ListSelectedDays) Then
For Each varElement In Me!ListSelectedDays.ItemsSelected
Krit = Krit & " OR [Kalendertag] = " & Me!ListSelectedDays.ItemData(varElement)
Next
End If
MsgBox (Krit)
Hallo,
beim ersten Item muss das " Or " abgeschnitten werden:
Dim strSQL As String
strSQL = "Select * from tblTabelle Where "
.
.
If Len(Krit) Then Krit = Mid(Krit ,4)
strSQL= strSQL & Krit
Msgbox strSQL
Hallo, vielen Dank für die rasche Antwort. Aber mein Problem scheint woanders zu liegen, der Part der meine Merhrfachauswahl aufbereiten sollte, liefert bereits kein Ergebnis. Bis zu dem Punkt, das ich das Kriterium in meiner Abfrage verwende bin ich noch gar nicht gekommen. Ich habe mal einen Auszug aus der DB aufbereitet und angehängt, eventuell hat jemand Zeit kurz anzuschauen, wo ich hier auf dem Holzweg bin. Ich möchte die Möglichkeit der Mehrfachauswahl mehr nutzenm bis dato habe ich das sehr umständlich mit Ja/Nein Einträgen in Tabellen gemacht.
Tipp zur Fehlersuche: Code Schritt für Schritt durchlaufen lassen.
Dim Krit As String, varElement As Variant
Krit = ""
Stop '<-- Haltepunkt mit {F8} weiter
If Not IsNull(Me!ListSelectedDays) Then
For Each varElement In Me!ListSelectedDays.ItemsSelected
Krit = Krit & " OR [Kalendertag] = " & Me!ListSelectedDays.ItemData(varElement)
Next
End If
MsgBox Krit
Anm.: die Lösung, warum Krit leer bleibt ist einfach, aber wenn du selbst drauf kommst, hast du mehr davon. ;)
Der daraus entstehende Filterausdruck mit dem Datumswert stimmt nicht, da das Datum nicht SQL-konform in Text konvertiert wird.
mfg
Josef
Ich glaube der Fehler lag darin, dass ich mit "If Not IsNull(Me!ListSelectedDays) " angefangen habe und ein Listenfeld bei dem die Mehrfachauswahl aktiviert ist, keinen Wert über die Value Eigenschaft bzw. immer den Wert Null liefert. Damit wurde meine Auswahl "ignoriert". Sorry wegen des Posts, manchmal sieht man als Anfänger selbst nach langen Recherchen den Wald vor lauter Bäumen nicht mehr. Untenstehend vollständigkeithalber noch der gesamte Code:
Dim Krit As String, varElement As Variant
Krit = ""
If Me!ListSelectedDays.ItemsSelected.Count = 0 Then
MsgBox ("Bitte ein Datum auswählen")
Exit Sub
End If
For Each varElement In Me!ListSelectedDays.ItemsSelected
Krit = Krit & " OR [CalendarDay] = #" & Format(Me!ListSelectedDays.ItemData(varElement), "yyyy-mm-dd") & "#"
Next
If Len(Krit) Then Krit = Mid(Krit, 4)
CurrentDb.Execute "DELETE tblAvailability.*, tblAvailability.CalendarDay " & _
"FROM tblAvailability " & _
"WHERE " & Krit & ";"
End Sub
Ein Listenfeld mit Mehrfachauswahl besitzt keinen Wert. Ich würde das Szenario eher als In-Klausel verbauen, um etwas Platz zu sparen.Private Sub ctlBuildCriterial_Click()
Dim Krit$, i&, items$()
With Me.ListSelectedDays
If .ItemsSelected.Count = 0 Then Exit Sub
ReDim items(.ItemsSelected.Count - 1)
For i = 0 To .ItemsSelected.Count - 1
items(i) = Format$(CDate(.ItemData(.ItemsSelected(i))), _
"\#yyyy-mm-dd\#")
Next
Krit = "CalendarDay In (" & Join(items, ",") & ")"
End With
MsgBox Krit
End Sub