Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

SQL-Code aus Abfrage in VBA erzeugt Fehlermeldung

Begonnen von pmmuc, August 07, 2020, 19:33:42

⏪ vorheriges - nächstes ⏩

pmmuc

Hallo,
ich habe ein Problem und bräuchte Hilfe.
In einem Formular habe ich ein Listenfeld, das über verschieden Buttons unterschiedlich gefiltert werden soll.
Wenn ich einen Filter in der Abfrage anlege funktioniert er einwandfrei.
Wenn ich nun den SQL-Code aus der Abfrage in VBA für meinen Button einfüge kommt immer der Fehler ,,Typen unverträglich"
Die Sub für den Button sieht so aus:

Private Sub cmdAuswahlAlles_Click()
    Me!lstGefiltertNachName.RowSource = "SELECT DISTINCT tblRezept.RezeptID, tblRezept.RezTitel AS Rezept, tblRezKategorie.EssenTrinkenIDRef" & _
    "FROM tblRezept RIGHT JOIN tblRezKategorie ON tblRezept.RezeptID = tblRezKategorie.RezeptIDRef " & _
    "WHERE (((tblRezept.RezTitel) Like " * " & [Formulare]![frmRezeptAuswahl]![txtSuchbegriff].[Text] & " * ") And ((tblRezKategorie.EssenTrinkenIDRef) = 4) And ((tblRezept.RezGeloescht) = False)) " & _
    "ORDER BY tblRezept.RezTitel"
End Sub

Hat hier jemand eine Idee was hier falsch ist und wie ich diesen Fehler beheben kann.
Ich war bisher der Meinung den SQL-Code aus einer Abfrage kann ich auch problemlos in VBA einfügen. Offensichtlich gibt es hier Unverträglichkeiten oder Einschränkungen.
Schon mal vielen Dank für Eure Hilfe
pmmuc

markusxy

Bei der ersten Zeile fehlt hinten ein Leerzeichen.
Einfach etwas sorgfältiger arbeiten.  ;)

pmmuc

Vielen Dank für die Antwort,
ich habe nun das Leerzeichen zwischen ..Ref und den Anführungszeichen eingefügt - bringt leider keine Änderung; die Fehlermeldung ist immer noch identisch

Gruß
pmmuc

MzKlMu

#3
Hallo,
Texte müssen in Hochkomma eingeschlossen werden.
" WHERE RezTitel Like '*" & [Formulare]![frmRezeptAuswahl]![txtSuchbegriff].[Text] & "*'" & " And EssenTrinkenIDRef = 4 And RezGeloescht = False ORDER BY RezTitel"Du hast das falsch zusammengesetzt.
Ich denke .Text ist hier auch nicht notwendig. Die Klammerinflation habe ich auch mal beseitigt.
Lasse Dir mit Debug.Print den zusammengesetzten SQL String anzeigen, dann kannst Du prüfen. In etwa so:
Private Sub cmdAuswahlAlles_Click()
Dim strSQL As String
strSQL = "SELECT DISTINCT ........
Debug.Print strSQL
Stop
    Me!lstGefiltertNachName.RowSource = strSQL

Ungetestet.

Kleiner Tip, die Leerzeichen immer vor dem Schlüsselwort einfügen, dann fällt das sofort ins Auge wenn eines fehlt.
Gruß Klaus

pmmuc

Hallo,
noch nicht wirklich erfolgreich.
Mitlerweile sieht mein Cod so aus:
Me!lstGefiltertNachName.RowSource = "SELECT DISTINCT tblRezept.RezeptID, tblRezept.RezTitel AS Rezept, tblRezKategorie.EssenTrinkenIDRef" & _
    " FROM tblRezept RIGHT JOIN tblRezKategorie ON tblRezept.RezeptID = tblRezKategorie.RezeptIDRef" & _
    " WHERE RezTitel Like '*" & [Formulare]![frmRezeptAuswahl]![txtSuchbegriff].[Text] & "*'" & " And EssenTrinkenIDRef = 4 And RezGeloescht = False" & _
    " ORDER BY RezTitel"

und es kommt die Fehlermeldung: Access kann das im Ausdruck angesprochene Feld '|1' nicht finden.
Was ist das Feld '|1' ?

Interessant ist auch, dass wenn ich mit debug.print mir den SQL-Code ausgeben lasse, die "inflationären" Klammern alle wieder da sind.
SELECT DISTINCT tblRezept.RezeptID, tblRezept.RezTitel AS Rezept, tblRezKategorie.EssenTrinkenIDRef FROM tblRezept RIGHT JOIN tblRezKategorie ON tblRezept.RezeptID = tblRezKategorie.RezeptIDRef WHERE (((tblRezept.RezTitel) Like "*" & [Formulare]![frmRezeptAuswahl]![txtSuchbegriff].[text] & "*") AND ((tblRezKategorie.EssenTrinkenIDRef)=4) AND ((tblRezept.RezGeloescht)=False)) ORDER BY tblRezept.RezTitel;
Gruß
pmmuc

MzKlMu

Gruß Klaus

pmmuc

Hallo,
ich wollte soeben meine Access Datei hochladen.
Datei anhängen erlaubt aber keine .accdb Datei
Wie kann ich den vollständigen Code hochladen
Hab leider hier noch keine Erfahrung
Gruß
pmmuc

DF6GL

Hallo,

--lass ".Text" bei der Steuerelement-Referenz weg..

Zitat[Formulare]![frmRezeptAuswahl]![txtSuchbegriff].[Text]




--Zippe die accdb-Datei und vorher "Komprimieren/reparieren" ausführen.
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

ebs17

Zitat... " WHERE RezTitel Like '*" & [Formulare]![frmRezeptAuswahl]![txtSuchbegriff].[Text] & "*'" & " ...
Spätestens hier arbeitet man rein in VBA, und das spricht englisch:
... " WHERE RezTitel Like '*" & Forms.frmRezeptAuswahl.txtSuchbegriff & "*' ...(Sieht auch irgendwie übersichtlicher aus ...)
Mit freundlichem Glück Auf!

Eberhard

pmmuc

Hallo Zusammen,

das war´s!
.[Text] weggelassen und Forms statt Formulare und schon funktioniert es.

Vielen, vielen Dank

DF6GL

Hallo,

und, wenn das Feld "txtSuchbegriff" sich in demjenigen Formular befindet, in dem der Code abläuft:
.
Zitat.
.WHERE RezTitel Like '*" & Me!txtSuchbegriff & "*'" & " And EssenTrinkenIDRef = 4 And RezGeloescht = False" & _
.
.
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