verwendetes Datenbanksystem: Microsoft Access 2013
Moin,
ich habe eine Tabelle "Ausgaben" in dieser gibt es das Feld "Datum" mit dem Datentyp "DateTime". Nun möchte ich nur die DataRows aus dem DataTable bekommen, welche mit einem bestimmten Monat und Jahr übereinstimmen.
Bedeutet: Der User kann dem Programm sagen "Gibt mir alle Datensätze, welche im Januar 2015 erstellt wurden."
Nun komme ich nicht so ganz weiter.
DataRow[] rows = base_db.Ausgaben.Select("Datum = #" + monat + "/" + jahr + "#");
Sowohl dies als auch LIKE bringen mir eine Exception. Leider finde ich nirgens eine genaue Erklärung zu meinem Problem.
Gibt es da eine kurze Lösungsmöglichkeit, oder muss ich erst das genaue Enddatum des Monats herausfinden, um eine "BETWEEN"-Anweisung zu schreiben?
Gruß,
K0nsch
(Unabhängig davon, ob der von p!lle gegeben Link hilft oder nicht: Wenn du schon sagst
Sowohl dies als auch LIKE bringen mir eine Exception. wäre es gut diese Exception auch zu zeigen. So kann man dir viel besser helfen.){gray}
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Schau mal hier:
>
Danke ich hab mal ein wenig rumprobiert.
Bei
DataRow[] rows = base_db.Ausgaben.Select("Jahr([Datum]) = " + jahr + " UND Monat([Datum]) = " + monat);
bringt er eine"System.Data.EvaluateException" da er Jahr() nicht kennt.
Sowohl dies als auch LIKE bringen mir eine Exception.
wäre es gut diese Exception auch zu zeigen. So kann man dir viel besser helfen.){gray}
Bei meinem o.g. Versuch bringt die Entwicklungsumgebung> Fehlermeldung:
Ein Ausnahmefehler des Typs "System.FormatException" ist in mscorlib.dll aufgetreten.
Zusätzliche Informationen: Die Zeichenfolge wurde nicht als gültiges DateTime erkannt.
als gültiges DateTime erkannt.
Was stimmt damit nicht?
[Artikel] Debugger: Wie verwende ich den von Visual Studio?
evtl. einmal die Werte überprüfen
Ich bin kein Access-Freund und schon gar kein Profi. Aber hast du mal geschaut, was in der Variable drin steht?
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Hi,
was dort schief geht hat nichts mehr mit Access zu tun...
Siehe:
LG
PS: Was du dort offensichtlich tust - ist ALLE Daten laden - und für die Ansicht soll dann wohl lokal gefiltert werden. (Nicht immer so schlau alle Daten zu laden wenn man schon Filterkriterien an die Hand bekommt) Die Abfragesyntax richtet sich dann noch oben genannten Links.
Bei
C#-Code:
DataRow[] rows = base_db.Ausgaben.Select("Jahr([Datum]) = " + jahr + " UND Monat([Datum]) = " + monat);
bringt er eine"System.Data.EvaluateException" da er Jahr() nicht kennt.
Probier das mal mit Year(Datum) und Month(Datum)
Der Kern von Access spricht englisch. Das ist wie bei jeder anderen SQL-Datenbank.
Bei meinem o.g. Versuch bringt die Entwicklungsumgebung
Fehlermeldung:
Ein Ausnahmefehler des Typs "System.FormatException" ist in mscorlib.dll aufgetreten.
Zusätzliche Informationen: Die Zeichenfolge wurde nicht als gültiges DateTime erkannt.
Zwischen den #-Zeichen muß ein komplettes Datum stehen. Hier fehlt doch der Tag. Monat und Jahr ist eben kein gültiges Datum.
Gibt es da eine kurze Lösungsmöglichkeit, oder muss ich erst das genaue Enddatum des Monats herausfinden, um eine "BETWEEN"-Anweisung zu schreiben? Warum denn nicht? Es ist doch einfach zu schreiben
Datum >= #01.10.2015# AND Datum < #01.11.2015#
Da muß man nicht umständlich dem Monatsletzten berechnen.