Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Mehrfachauswahl im Listfeld liefert kein Ergebnis

Begonnen von EBlajs, Februar 28, 2017, 11:40:10

⏪ vorheriges - nächstes ⏩

EBlajs

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)

DF6GL

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

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

EBlajs

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.

Josef P.

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

EBlajs

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

Lachtaube

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
Grüße von der (⌒▽⌒)