Hallo zusammen,
ich habe im Abfrage - Entwurf folgende funtionierende Abfrage erstellt:
SELECT tbl_Termine.terID, tbl_Termine.terDatumAnfang, tbl_Termine.terDatumEnde, tbl_Termine.terUhrzeit, tbl_Termine.terGrund, tbl_Termine.terBeachten
FROM tbl_Termine
WHERE (((DatePart("m",[terDatumAnfang])=5) And (DatePart("yyyy",[terDatumAnfang])=2014)));
Nun wollte ich diese Abfrage einem Sql-String zuweisen:
strListSQL = "SELECT tbl_Termine.terID, tbl_Termine.terDatumAnfang, tbl_Termine.terDatumEnde, tbl_Termine.terUhrzeit,tbl_Termine.terGrund, tbl_Termine.terBeachten " & _
"FROM tbl_Termine " & _
"WHERE (((DatePart("m",[terDatumAnfang])=5) And (DatePart("yyyy",[terDatumAnfang])=2014)));"
Der Editor markiert den Befehl immer rot. Bei Datepart habe ich schon die Komma durch Semikolon ersetzt brachte auch nichts.
Wo liegt der Fehler?
Die 5 und 2014 sollen später die ausgewählten Werte einer Kombobox werden. Wie lautet der Code dann?
Mfg AbsolutNeu
Hi,
was passiert wenn Du die " gegen ' tauschst?
... DatePart('m',[terDatumAnfang])=5) And (DatePart('yyyy' ...
Harald
Hallo Harald,
ja da bin ich jetzt auch drauf gekommen. Die Anführungszeichen sind das Problem.
Nur ich weiß nicht, wie ich das lösen kann.
Ich habe folgende Varianten ausprobiert:
1. So wie oben beschrieben
2. Nur Hochkomma gesetzt -> im Direktfenster wird bei der Select Anweisung das m auch in Hochkomma dagestellt also nicht richtig
3. "WHERE ((DatePart(" & "'m'" & ",[terDatumAnfang])=5))"
m wird auch mit Hochkomma dargestellt
4. "WHERE ((DatePart(" & ""m"" & ",[terDatumAnfang])=5))"
Editor meckert,
Also mir fällt im Moment nichts mehr ein :(
Mfg
AbsolutNeu
Zusatz:
Die Lösung lautet:
"WHERE ((DatePart(" & Chr(34) & "m" & Chr(34) & ",[terDatumAnfang])=5));"
Noch einen schönen Abend
Mfg
AbsolutNeu
Hallo,
DatePart erzeugt einen String der ungeeignet ist. Besser ist es Month bzw. Year zu verwenden.
... WHERE Month([terDatumAnfang])=5 And Year([terDatumAnfang])=2014
Mit Kombis:
" WHERE Month([terDatumAnfang])=" & cboMonat & " And Year([terDatumAnfang])=" & cboJahr
Und die Klammerinflation bist Du dann auch los.
WHERE terDatumAnfang BETWEEN DateSerial(2014, 5, 1) AND DateSerial(2014, 6, 0)
Ein Kriterium in gezeigter Weise ermöglicht dann auch eine Nutzung eines möglicherweise vorhandenen Index, im Unterschied zu den vorangegangenen Varianten.
Indexnutzung ... Performance auch bei größeren Datenmengen - bei Datenbanken erwartet man so etwas regelmäßig.