Laden...

Select-Abfrage einer DataTable nach einem bestimmten Jahr und Monat

Erstellt von K0nsch vor 8 Jahren Letzter Beitrag vor 8 Jahren 4.178 Views
K
K0nsch Themenstarter:in
9 Beiträge seit 2015
vor 8 Jahren
Select-Abfrage einer DataTable nach einem bestimmten Jahr und Monat

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

1.040 Beiträge seit 2007
vor 8 Jahren
2.207 Beiträge seit 2011
vor 8 Jahren

(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}

K
K0nsch Themenstarter:in
9 Beiträge seit 2015
vor 8 Jahren

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.

J
251 Beiträge seit 2012
vor 8 Jahren

als gültiges DateTime erkannt.

Was stimmt damit nicht?

[Artikel] Debugger: Wie verwende ich den von Visual Studio?
evtl. einmal die Werte überprüfen

2.207 Beiträge seit 2011
vor 8 Jahren

Ich bin kein Access-Freund und schon gar kein Profi. Aber hast du mal geschaut, was in der Variable drin steht?

[Artikel] Debugger: Wie verwende ich den von Visual Studio?

1.029 Beiträge seit 2010
vor 8 Jahren

Hi,

was dort schief geht hat nichts mehr mit Access zu tun...

Siehe:

  1. https://msdn.microsoft.com/de-de/library/det4aw50(v=vs.110).aspx
  2. http://www.csharp-examples.net/dataview-rowfilter/

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.

S
93 Beiträge seit 2008
vor 8 Jahren

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.

W
955 Beiträge seit 2010
vor 8 Jahren

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.