Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: EBlajs am Februar 28, 2017, 11:40:10

Titel: Mehrfachauswahl im Listfeld liefert kein Ergebnis
Beitrag von: EBlajs am Februar 28, 2017, 11:40:10
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)
Titel: Re: Mehrfachauswahl im Listfeld liefert kein Ergebnis
Beitrag von: DF6GL am Februar 28, 2017, 11:53:36
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

Titel: Re: Mehrfachauswahl im Listfeld liefert kein Ergebnis
Beitrag von: EBlajs am Februar 28, 2017, 12:23:18
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.
Titel: Re: Mehrfachauswahl im Listfeld liefert kein Ergebnis
Beitrag von: Josef P. am Februar 28, 2017, 13:32:48
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
Titel: Re: Mehrfachauswahl im Listfeld liefert kein Ergebnis
Beitrag von: EBlajs am Februar 28, 2017, 13:35:54
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
Titel: Re: Mehrfachauswahl im Listfeld liefert kein Ergebnis
Beitrag von: Lachtaube am Februar 28, 2017, 13:42:18
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