PDA

Vollständige Version anzeigen : Parameterabfrage "zwischen ... und ..." mit Month-Werten


kleinkariert
11.05.2011, 08:50
Hallo Leute,
ich dachte dieses Problem müssen schon mehrere Leute gehabt haben, aber weder im Forum noch über google finde ich da etwas.
Ich habe mir in einer Abfrage ein Monatsfeld gebastelt, in dem die Monate als Zahlen von 1-12 dargestellt werden (Abfrage: Month([Datum])).
Nun möchte ich eine Auswertung über mehrere Monate machen, z.b. Januar bis März. Also habe ich eine Parameterabfrage eingebaut: zwischen [Monat1] und [Monat2]. Wenn ich aber für Monat1=1 eingebe und für Monat2=3, dann bekomme ich nicht nur 1, 2 und 3 sondern auch 10, 11 und 12. Weil da eine "1" vorne dran steht. Will ich aber nicht! Wie kann ich das ändern?

Hab es schon mit dem Datenformat Zahl versucht, aber das klappt auch nicht. "01" kann man auch nicht eingeben, dann kommt gar nix. Steht ja auch eben nur "1" drin. Ansonsten funktioniert die Abfrage (2-4 o.ä.).

Danke schonmal und Gruß,
melli

Josef P.
11.05.2011, 08:55
Hallo!

Welchen Datentyp hast du für die Parameter [Monat1] und [Monat2] in der Parameterabfrage festgelegt?

mfg
Josef

kleinkariert
11.05.2011, 09:13
Hab eigentlich gar nichts festgelegt. Muss ich das? Wenn ja, wie mache ich das in einer Abfrage?
Ich hatte nur mal probiert, die Formatierung zu ändern (in ein Zahlenformat), das hat aber nichts geholfen.

Maxel
11.05.2011, 09:43
Hallo melli,

schau mal im Menü unter Abfrage - Parameter...

Da lässt sich das einstellen.

Atrus2711
11.05.2011, 09:43
Hi,

im Entwurf müsste es irgendwo die Möglichkeit geben, Parameter zu deklarieren. Hab leider kein 2003 mehr zur Hand....

Aber notfalls per SQL:
PARAMETERS von Long, bis Long;
SELECT ...
FROM ...
WHERE Feld Between [von] And [bis]

ebs17
11.05.2011, 10:10
Wenn 1, 2, 3, 10, 11, 12 zwischen 1 und 3 liegen, liegt eine Textsortierung vor. Daher die Frage, wie das "Monatsfeld gebastelt" wurde.

kleinkariert
11.05.2011, 10:13
Jaaaa, das ist es!
So wie Maxel sagt, unter Menü "Abfrage" bei "Parameter" kann man das einstellen. Ich hab es jetzt auf Single gesetzt und schon habe ich nur noch Monat 1, 2 und 3.

Super, vielen Dank für die schnelle Hilfe! Danke auch für das angehängte Bildchen, das macht es immer einfacher!

kleinkariert
11.05.2011, 10:15
Genau, mit dem Text hab ich mir schon gedacht, nur hab ich es mit einer Umformatierung versucht, nicht mit Datentyp ändern. Diese Möglichkeit kannte ich noch nicht.
Da das Feld automatisch erzeugt wird über Month([Datum]) hatte ich natürlich auch keinen Einfluss auf den Datentyp (z.B. wie in einer Tabelle).

Atrus2711
11.05.2011, 10:28
Auf das Feld brauchst du auch keinen Einfluss haben: Month liefert immer Integers zurück. Also sollte auch der Parameter ein Integer sein. Single ist überdimensioniert und hat ggf. Fließkommaprobleme.

kleinkariert
11.05.2011, 10:57
Doch, bei mir hat das Month definitiv kein Integer zurückgeliefert. Ich weiß auch nicht warum. Bisher hatte ich das Problem nie. Oder ist es mir nur nie aufgefallen? Ich habe extra noch ne neue Abfrage gebaut: gleiches Problem.

Ich dachte Single wäre platzsparender, aber ich hab´s jetzt noch in Integer geändert.

Josef P.
11.05.2011, 11:03
bei mir hat das Month definitiv kein Integer zurückgeliefert.
Wie hast du das geprüft? - Hast du die VarType-Funktion in der Abfrage verwendet?
Aufgrund des Problems mit dem Textvergleich darfst du auf jeden Fall nicht darauf zurückschließen, dass Month(..) keine Integer-Datentyp lieferte - für den Textvergleich waren die nicht typisierten Parameter verantwortlich.

Im Prinzip stand dort dann nämlich: <code>.. where Month(Datumsfeld) between "1" and "2"</code>

mfg
Josef

gpswanderer
11.05.2011, 11:07
Hallo,
bei mir hat das Month definitiv kein Integer zurückgeliefert.doch, Month liefert definitiv eine Zahl. Das siehst Du schon daran, dass das Feld rechtsbündig dargestellt wird. Das Problem sind die undefinierten Parameter. Was ja behoben ist.

Toast78
11.05.2011, 11:33
Na hoffentlich musst du diese Auswertung nicht jahresübergreifend fahren :rolleyes:

Lanz Rudolf
11.05.2011, 12:14
Hallo
ich gehe sollche selectionen immer anders an.

doch zuerst:
Abfrage: Month([Datum])).
dein Datumsfeld in der Tabelle heist Datum das würte ich als erstes ändern
(Dringend) den Datum ist ein reserviertes Wort in Access !

ich würde wenn ich Jan bis März selectieren müsste immer mit dem ganzen Datum arbeiten
WHERE DatumFeld Between "01.01.2011" und "31.01.2011"

Erster Tag im Monat: DateSerial(Year(Now()), Month(Now()), 1)
lezter Tag im Monat: DateSerial(Year(Now()), Month(Now()) + 1, 1) - 1

und alles richtig aufbereiten für SQL:
z.B. mit einer Solchen Routine:
Public Function StrDatumFuerSql(dat As Date) As String
StrDatumFuerSql = Format$(DateValue(dat), "\#yyyy\-mm\-dd\#")
End Function
der aufruf würde dann etwa so aussehen:
"between " & _
StrDatumZeitFuerSql(CDate(StrVon)) & " And " & StrDatumZeitFuerSql(datBis)

kleinkariert
11.05.2011, 12:15
Achsooo, na dann hab ich das falsch verstanden. Der Integer-Datentyp war also schon vorher da, nur hab ich aufgrund meines nicht-definierens der Parameter das irgendwie mit Text vermischt und dann eine Text-Ausgabe bekommen.

@Toast: nee, muss ich nicht. Aber wo wäre das Problem?

gpswanderer
11.05.2011, 12:18
Hallo,
nee, muss ich nicht. Aber wo wäre das Problem?Dann musst Du noch das Jahr in der Abfrage einbeziehen bzw.