Neuigkeiten:

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

Mobiles Hauptmenü

SQL-Abfrage bedingt durch Mehrfachauswahl im Listenfeld

Begonnen von Dolomite, April 28, 2020, 11:55:46

⏪ vorheriges - nächstes ⏩

Dolomite

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

DF6GL

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
.
.
.
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

Dolomite

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.