Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Dolomite am April 28, 2020, 11:55:46

Titel: SQL-Abfrage bedingt durch Mehrfachauswahl im Listenfeld
Beitrag von: Dolomite am April 28, 2020, 11:55:46
Hallo Zusammen,
ich versuche Daten aus einer Tabelle (Projects) zu selektieren basierend auf einer Mehrfachauswahl (Liste4), in der Projektkategorien stehen (also Text). Folgenden Code habe ich (relativer VBA-Laie) zusammengestellt:

Private Sub Befehl21_Click()
Dim strSQL  As Variant
Dim strKrit As String
Dim itm     As Variant
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef

strSQL = "SELECT * FROM [Projects]"
Set dbs = CurrentDb

For Each itm In Me!Liste4.ItemsSelected
    strKrit = strKrit & "," & Me!Liste4.ItemData(itm)
Next itm

If Len(strKrit) <> 0 Then
    strSQL = strSQL & "Where Projects.Projektbezug IN (" & Mid(strKrit, 2) & ")"
End If

Set qdf = dbs.CreateQueryDef("Recordpool", strSQL)
DoCmd.OpenQuery "Recordpool", , acReadOnly

End Sub

Ich erhalte die  Fehlermeldung "Laufzeitfehler '3075': Syntaxfehler (fehlender Operator) in Abfrageausdruck "Projects.Projektbezug IN (Bund (ohne Stern),Stern)'.

Ich habe versucht über Foreneinträge und per Google den Fehler zu finden, leider bis jetzt erfolglos. Kann mir jemand von Euch weiterhelfen?

Dankeschön im Voraus!
Gruß
Markus
Titel: Re: SQL-Abfrage bedingt durch Mehrfachauswahl im Listenfeld
Beitrag von: DF6GL am April 28, 2020, 12:23:14
Hallo,
Zitat

in der Projektkategorien stehen (also Text).

ungünstig. Die Tabelle gehört normalisiert, die Projektkategorien in eine separate Tabelle ausgelagert und über Schlüsselfelder in 1:n-Beziehung gesetzt.


ZitatPrivate Sub Befehl21_Click()
Dim strSQL  As Variant     String

Dim strKrit As String
Dim itm     As Variant
Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef

strSQL = "SELECT * FROM [Projects]  " 'Sicherheitshalber , bzw. erforderlich Leerzeichen anhängen.
Set dbs = CurrentDb

For Each itm In Me!Liste4.ItemsSelected
    strKrit = strKrit & ",'" & Me!Liste4.ItemData(itm) & "'"  ' Weil es sich um "Text" handelt, sind Hochkommata erforderlich.
Next itm

If Len(strKrit) <> 0 Then
    strSQL = strSQL & "Where Projects.Projektbezug IN (" & Mid(strKrit, 2) & ")"
End If
.
.
.
Titel: Re: SQL-Abfrage bedingt durch Mehrfachauswahl im Listenfeld
Beitrag von: Dolomite am April 28, 2020, 12:28:53
Dankeschön Franz für die schnelle Hilfe! Und Du hast Recht, dass die Kategorie eigentlich nicht in die Tabelle gehört, das werde ich noch beheben. Klasse! Bin echt begeistert von diesem Forum.