Avatar billede -anders- Juniormester
01. januar 2009 - 02:53 Der er 24 kommentarer og
1 løsning

Dynamisk forspørgsel, datokriterier, kvartaler

Hej eksperter

Først et godt nytår til alle her på E :o)

Jeg har en db til registrering af hændelser, efterhånden er der oprettet mange poster. For at lette overblikket har jeg implemteret nogle dynamiske forspørgsler der viser poster for faste perioder. Kriteriene for disse forspøgsler indsættes direkte i kriteriefeltet under datofeltet i mine forspørgsler, se nedestående:

Poster for aktuel uge:
Between Date()-Weekday(Date();2)+1 And Date()-Weekday(Date();2)+7

Poster forrige uge:
Between Date()-Weekday(Date();2)-6 And Date()-Weekday(Date();2)

Poster for aktuel måned:
Between Date()-Day(Date())+1 And DateAdd("m";1;Date())-Day(DateAdd("m";1;Date()))

Poster forrige måned:
Between DateAdd("m";-1;Date())-Day(DateAdd("m";-1;Date()))+1 And Date()-Day(Date())

Ovenstående forspørgsler virker fint, og køre helt automatisk. Well nu ville jeg gerne lave yderligere 2 forspørgsler, en der viser alle poster for det aktuelle kvartal, og en for sidste kvartal. Jeg har forsøgt at ændre den med posterne for den aktulle måned, hvor jeg har skiftet "m" ud med "q", i den tro at det så ville virke, det gør så det ikke.

Er det muligt også at lave dynamiske kvartalsforspørgsler efter samme princip som ovenstående. Desværre er jeg ikke skrap til datosyntakser, så jeg lidt på bar bund.

Hilsen Anders.
Avatar billede -anders- Juniormester
01. januar 2009 - 03:07 #1
Glemte lige at nævne, at jeg arbejder i Access 2003
Avatar billede terry Ekspert
01. januar 2009 - 11:32 #2
Hi Anders and Happy New Year to you too.

Just to make sure I know what your after. When you say "kvartal" do you mean the current month and following two, or do you want to see the actual quarter year your currently in? IE January to March, April to June and so on?
Avatar billede terry Ekspert
01. januar 2009 - 11:41 #3
Using "q" as the interval in the DateAdd function just adds 3 months to the date but if this is what your after then it should work.
EG for next 3 months from days date:

Between Date() And DateAdd("q";1;Date())


Why do you use Date()-Day(Date())+1 ?
isnt it the same as

Date()
Avatar billede -anders- Juniormester
01. januar 2009 - 12:40 #4
Hej terry

Tak for indlægget, ja ideen var at disse kvartalsforespørgsler skulle vise alle poster for det aktuelle kvartal i det indeværende år, altså som du siger jan, feb, marts - april, maj juni etc.
Avatar billede -anders- Juniormester
01. januar 2009 - 12:48 #5
De forspørgsler jeg nævner i mit spørgsmål stammer fra denne tråd:

http://www.eksperten.dk/spm/696302
Avatar billede terry Ekspert
01. januar 2009 - 13:21 #6
From the link you give, which is going back quite a while there is a link to a microsoft article. The article actually indicates how to get the first day of the current quarter. So using that and a DateAdd it should give you a period.

Between DateSerial(Year(Date()), Int((Month(Date()) - 1) / 3) * 3 + 1, 1)
AND DateAdd("m",3, DateSerial(Year(Date()), Int((Month(Date()) - 1) / 3) * 3 + 1, 1))
Avatar billede terry Ekspert
01. januar 2009 - 13:23 #7
I'm off out shortly but if you cant get it working and you can send me your dB I'll see what I can do later today.

ekspertenATsanthell.dk

AT = @
Avatar billede -anders- Juniormester
01. januar 2009 - 13:29 #8
Hej terry

Mange tak, jeg tester det igennem, og vender tilbage
Avatar billede -anders- Juniormester
01. januar 2009 - 13:48 #9
Hej igen terry

Nu har jeg testet det igennem, og det ser ud til at virker efter henstigten, se nedenstående, hvor syntaksen er sat ind i datofeltet på mine forspørgsler:

Poster, aktuelt kvartal:
Between DateSerial(Year(Date());Int((Month(Date())-1)/3)*3+1;1) And DateAdd("m";3;DateSerial(Year(Date());Int((Month(Date())-1)/3)*3+1;1))

Poster sidste kvartal:
Between DateSerial(Year(Date());Int((Month(Date())-1)/3)*3+1;1) And DateAdd("m";-3;DateSerial(Year(Date());Int((Month(Date())-1)/3)*3+1;1))

Tusind tak for hurtig hjælp, det jeg glad for :o). Læg et svar, så er der velfortjente point på vej.
Avatar billede terry Ekspert
01. januar 2009 - 13:49 #10
Something you might notice. Adding 3 months to the first day o fthe quarter actually gives the first day o fthe next quarter, so you may need another dateAdd to subtract on eday to get back to the last day of the quarter.
Ot instead of using between you could maybe use

>= and <
Avatar billede -anders- Juniormester
01. januar 2009 - 13:55 #11
Okay, det husker jeg, husk at poste et svar, så du kan få point
Avatar billede terry Ekspert
01. januar 2009 - 16:33 #12
Here it comes :o)
Avatar billede kjulius Novice
03. januar 2009 - 13:25 #13
Jeg tror ikke det vil virke helt efter hensigten. BETWEEN tager begge datoer med (både fra og til datoen) - i hvert fald i Access, det er lidt forskelligt fra db til db, desværre.

Derfor vil terrys forespørgsel ikke virke efter hensigten. Den medtager den første dag i næste kvartal.

Men du har jo hans Microsoft link, hvor beregningen af slutdatoen kvartalet er angivet, så det vil du hurtigt kunne rette til...
Avatar billede -anders- Juniormester
03. januar 2009 - 13:34 #14
Hej kjulius

Tak for indlægget, først vil jeg sige at jeg igennem lang tid har haft stor fornøjelse af dine periode-forspørgsler jv. tråden jeg henviser til o:)

Jeg har endnu ikke fået det rettet det til, da jeg er en komplet novice når det handler om udregning af datoer etc.

Hvis du har et forslg til rettelsen giver jeg gerne point til dig for dette i et nyt spørgsmål, hvad siger du til det.

Hilsen Anders.
Avatar billede terry Ekspert
03. januar 2009 - 13:54 #15
Try two citeria

>= DateSerial(Year(Date());Int((Month(Date())-1)/3)*3+1;1)

< DateAdd("m";-3;DateSerial(Year(Date());Int((Month(Date())-1)/3)*3+1;1))
Avatar billede terry Ekspert
03. januar 2009 - 13:54 #16
or all in one

>= DateSerial(Year(Date());Int((Month(Date())-1)/3)*3+1;1) AND < DateAdd("m";-3;DateSerial(Year(Date());Int((Month(Date())-1)/3)*3+1;1))
Avatar billede -anders- Juniormester
03. januar 2009 - 14:03 #17
hej terry

Nu kan jeg få den med det aktuelle kvartal til at virker med nedenstående:

>=DateSerial(Year(Date());Int((Month(Date())-1)/3)*3+1;1) And <DateAdd("m";3;DateSerial(Year(Date());Int((Month(Date())-1)/3)*3+1;1))

Men sidste kvartal kan jeg ikke få til at virke, jeg bruger den samme som ovenstående hvor jeg blot -3, men den vil ikke, se nedenstående:

>=DateSerial(Year(Date());Int((Month(Date())-1)/3)*3+1;1) And <DateAdd("m";-3;DateSerial(Year(Date());Int((Month(Date())-1)/3)*3+1;1))
Avatar billede terry Ekspert
03. januar 2009 - 14:25 #18
You need the start date (lowest) first I think
>=DateAdd("m";-3;DateSerial(Year(Date());Int((Month(Date())-1)/3)*3+1;1)) AND DateSerial(Year(Date());Int((Month(Date())-1)/3)*3+1;1)
Avatar billede -anders- Juniormester
03. januar 2009 - 14:32 #19
Okay, hvis jeg bruger sidste forslag, viser forspørgslen, kun poster for 1. januar 2009, mystisk
Avatar billede -anders- Juniormester
03. januar 2009 - 14:40 #20
Okay igen

Nu tror jeg den er der, hvis jeg indsætter nedenstående vises alle poster for sidste kvartal

>=DateAdd("m";-3;DateSerial(Year(Date());Int((Month(Date())-1)/3)*3+1;1)) And <DateSerial(Year(Date());Int((Month(Date())-1)/3)*3+1;1)

Det holdt hårdt på. Jeg opretter et nyt spørgsmål med link til dette, så du kan få nogle flere point
Avatar billede terry Ekspert
03. januar 2009 - 14:44 #21
In Immedeiate window (CTRL+G in VB)
enter the following and then press return
?DateAdd("m",-3,DateSerial(Year(Date()),Int((Month(Date())-1)/3)*3+1,1))

it shows
01-10-2008



then the same with
?DateSerial(Year(Date()),Int((Month(Date())-1)/3)*3+1,1)

01-01-2009

So the date intervals should actually be OK !
Avatar billede terry Ekspert
03. januar 2009 - 14:45 #22
OK, didnt see your last comment Anders.

Dont worry about the extra points, 100 is enough :o)
Avatar billede -anders- Juniormester
03. januar 2009 - 14:47 #23
Nej, slet ikke, nu har jeg oprettet det, så gider du lægge et svar :o)
Avatar billede kjulius Novice
03. januar 2009 - 14:50 #24
Tak for roserne, Anders. :-)

Jeg ser, at I allerede har klaret ærterne selv, hvilket jeg også formodede ville ske. terry plejer jo at leve op til sit alias og følge sagerne helt til dørs. :-)
Avatar billede -anders- Juniormester
03. januar 2009 - 15:06 #25
Hej kjulius

Ja det gik, og helt enig, terry er super. Hvor er det fantatisk at have så kompetente brugere som jer her på E, som ofre lidt af jeres fritid for sølle point, blot for at hjælpe andre o:)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester