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 - String: Datumskriterium geht nicht!

Begonnen von AbsolutNeu, März 27, 2014, 17:41:08

⏪ vorheriges - nächstes ⏩

AbsolutNeu

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

bahasu

Hi,

was passiert wenn Du die " gegen ' tauschst?
... DatePart('m',[terDatumAnfang])=5) And (DatePart('yyyy' ...

Harald
Servus

AbsolutNeu

#2
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

MzKlMu

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

Gruß Klaus

ebs17

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.
Mit freundlichem Glück Auf!

Eberhard