Avatar billede -anders- Juniormester
19. marts 2006 - 10:33 Der er 15 kommentarer og
1 løsning

Forespørgsler og datokriterier

Hej Eksperter
Jeg sidder med en opgave hvor jeg skal oprette et antal forespørgsler, det et must at disse bliver gemt som objekter.

I forespørgslerne er det et datofelt "AftaleDato", jeg søger hjælp til syntaxen for at trække data for forskellige perioder skrevet direkte i kriteriefeltet for datofeltet jvf. nedenstående:

1. Poster for den aktuelle uge

2. Poster for næste uge

3. Poster for sidste uge

4. Poster for den aktuelle måned

5. Poster for næste måned

6. Poster for sidste måned

7. Poster for det aktuelle år

8. Poster for for næste år

9. Poster for sidste år.

Altså 9 forspørgsler ialt, en for hver periode. Jeg kan godt få det til at virke i VBA jvf. nedenstående kodeeks.

'Aktuel måned Kode start'
Dim sSQL As String
sSQL = "Select * From Qaftaleoversigt WHERE format(AftaleDato, ""yyyymm"") = format(Dateadd(""m"", 0, date()), ""yyyymm"")"
'Kode slut'

'Næste måned kode start'
Dim sSQL As String
sSQL = "Select * From Qaftaleoversigt WHERE format(AftaleDato, ""yyyymm"") = format(Dateadd(""m"", 1, date()), ""yyyymm"")"
'Kode slut'

Det fint nok i VBA, men i den aktuelle opgave er det som sagt et must at forspørgslerne bliver gemt som objekter i databasen.

Jeg har så søgt rundt her  på E og fundet nedenstående som faktisk viser poster for den aktuelle måned, syntaxen er skrevet direkte i kriteriefeltet for AftaleDatofeltet:

'Kode start'
Between DateSerial(Year(Date());Month(Date());1) And DateSerial(Year(Date());Month(Date())+1;1-1)
'Kode slut'

Problemet er at jeg bare ikke forstår syntaxen,jeg har også forsøgt at ændre på den for at vise andre perioder feks. næste måned, men jeg kan ikke få det til at virke.

Er der nogen der kan hjælpe :o)

Hilsen Anders.
Avatar billede mugs Novice
19. marts 2006 - 10:39 #1
Groft sagt er DateSerial et numerisk udtryk for en given dato.

Denne er:
DateSerial(Year(Date());Month(Date());1)

Den numeriske værdi for dagen idag (Date()).
Avatar billede terry Ekspert
19. marts 2006 - 10:51 #2
Her is a link which I think should help you on your way. With the examples given, you should be able to better understanding on how DateSerial works and get the other queries to work too.
If not drop a line and I'll see what I can do.

http://support.microsoft.com/default.aspx?scid=KB;en-us;q88657

mvh
Terry
Avatar billede -anders- Juniormester
19. marts 2006 - 11:07 #3
Hej terry, tak for linket, det meget lærerigt, men jeg har problemer med at få det til at virke, hvis jeg feks.indsætter denne som kriterie i mit dataofelt i forspørgslen vises der ikke nogen poster når jeg efterfølgende køre forspørgselen, og der er poster i den aktuelle måned:

DateSerial(Year(Date()); Month(Date()); 1)
Avatar billede mugs Novice
19. marts 2006 - 11:10 #4
Indsæt det som et udtryk:

Udtryk1:DateSerial(Year(Date()); Month(Date()); 1)
Avatar billede -anders- Juniormester
19. marts 2006 - 11:13 #5
Hej mugs, det har jeg prøvet, men så vises alle poster, og ikke kun poster for den aktuelle måned
Avatar billede -anders- Juniormester
19. marts 2006 - 11:15 #6
Det som at der skal en eller anden form for between med i syntaxen
Avatar billede -anders- Juniormester
19. marts 2006 - 11:18 #7
Okay denne ser ud til at vise poster for den aktuelle måned:
Between DateSerial(Year(Date());Month(Date());1) And DateSerial(Year(Date());Month(Date())+1;1-1)

Denne ser ud til at vise poster for sidste måned:
Between DateSerial(Year(Date());Month(Date());1) And DateSerial(Year(Date());Month(Date())-1;1+1)

Så langt så godt, men hvad med ugeperioderne,års persioderne måske DateSerial ikke er vejen frem her
Avatar billede mugs Novice
19. marts 2006 - 11:53 #8
Nu har jeg næsten aldrig arbejdet med DateSerial. Men i et udtryk kan du indsætte funktionen DatePart, som uddrager f.eks. Uge fra en given dato:

Udtryk1: DatePart("ww";[Dit datofelt];1;0)
Avatar billede terry Ekspert
19. marts 2006 - 14:42 #9
you have to select th edate field using dateserial and also use it in the criteria

Example for current month:

SELECT tblDato.*, DateSerial(Year([dato]),Month([dato]),1) AS Expr1
FROM tblDato
WHERE (((DateSerial(Year([dato]),Month([dato]),1))=DateSerial(Year(Date()),Month(Date()),1)))
Avatar billede terry Ekspert
19. marts 2006 - 14:45 #10
so the select changes the date field (dato) to the first day of the month for each dates myear/month. Then the criteria gets set to the first day of the current year and month.
Avatar billede terry Ekspert
19. marts 2006 - 14:47 #11
myear/month = year/month

So a date 24/09/2005 would get selected as 01/09/2005
which obvioulsy doesnt get included if you use a criteria
01/03/2006
Avatar billede -anders- Juniormester
19. marts 2006 - 15:18 #12
Hej terry
Tak for indlæggende, jeg kan nu få vist alle poster for den aktuelle måned, men det kniber med forige måned, og næste måned, samt alle ugekriterierne. Jeg arbejder lige videre med det, og vender tilbage :o)
Avatar billede kjulius Novice
20. marts 2006 - 02:36 #13
Aktuelle uge:

SELECT Qaftaleoversigt.AftaleDato
FROM Qaftaleoversigt
WHERE (((Qaftaleoversigt.AftaleDato) between Date()-Weekday(Date(),2)+1 and Date()-Weekday(Date(),2)+7));

Næste uge:

SELECT Qaftaleoversigt.AftaleDato
FROM Qaftaleoversigt
WHERE (((Qaftaleoversigt.AftaleDato) between Date()-Weekday(Date(),2)+8 and Date()-Weekday(Date(),2)+14));


Forrige uge:

SELECT Qaftaleoversigt.AftaleDato
FROM Qaftaleoversigt
WHERE (((Qaftaleoversigt.AftaleDato) between Date()-Weekday(Date(),2)-6 and Date()-Weekday(Date(),2)));



Aktuelle måned:

SELECT Qaftaleoversigt.AftaleDato
FROM Qaftaleoversigt
WHERE Qaftaleoversigt.AftaleDato between Date()-Day(Date())+1 and Dateadd("m",1,Date())-Day(DateAdd("m",1,Date()));


Næste måned:

SELECT Qaftaleoversigt.AftaleDato
FROM Qaftaleoversigt
WHERE Qaftaleoversigt.AftaleDato between Dateadd("m",1,Date())-Day(DateAdd("m",1,Date()))+1 and Dateadd("m",2,Date())-Day(DateAdd("m",2,Date()));

Forrige måned:

SELECT Qaftaleoversigt.AftaleDato
FROM Qaftaleoversigt
WHERE Qaftaleoversigt.AftaleDato between Dateadd("m",-1,Date())-Day(DateAdd("m",-1,Date()))+1 and Date()-Day(Date());



Aktuelle år:

SELECT Qaftaleoversigt.AftaleDato
FROM Qaftaleoversigt
WHERE Qaftaleoversigt.AftaleDato Between dateserial(year(date()),1,1) And dateserial(year(date())+1,1,1)-1;

Næste år:

SELECT Qaftaleoversigt.AftaleDato
FROM Qaftaleoversigt
WHERE Qaftaleoversigt.AftaleDato Between dateserial(year(date())+1,1,1) And dateserial(year(date())+2,1,1)-1;

Forrige år:

SELECT Qaftaleoversigt.AftaleDato
FROM Qaftaleoversigt
WHERE Qaftaleoversigt.AftaleDato Between dateserial(year(date())-1,1,1) And dateserial(year(date()),1,1)-1;
Avatar billede -anders- Juniormester
20. marts 2006 - 10:49 #14
Hej kjulius
Tak for dit fine indlæg, det ser spændende ud :o),når jeg kommer hjem fra arbejdet, tester jeg, og vender tilbage
Avatar billede -anders- Juniormester
20. marts 2006 - 13:46 #15
Hej kjulius, jeg har nu prøvet dine forslag igennem, og det virker perfekt, tusind tak for hjælpen, så fik jeg langt om længe slået alt det datohalløj på plads :o). Hvis du lægger et svar er der point til dig.

>terry, dit link var meget lærerigt, og er ganske bestemt et nyttigt sted, jeg opretter et spørgsmål med link til dette her , da jeg gerne vil honnorere med lidt point for det gode link, også tak til mugs for indlæg. For god ordens skyld lægger jeg mine versioner af kjulius indlæg som er skrevet direkte i designgitter under datofeltet i de enkelte forsprøgsler:

Denne uge:
Between Date()-Weekday(Date();2)+1 And Date()-Weekday(Date();2)+7

Næste uge:
Between Date()-Weekday(Date();2)+8 And Date()-Weekday(Date();2)+14

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

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

Næste måned:
Between DateAdd("m";1;Date())-Day(DateAdd("m";1;Date()))+1 And DateAdd("m";2;Date())-Day(DateAdd("m";2;Date()))

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

Dette år:
Between DateSerial(Year(Date());1;1) And DateSerial(Year(Date())+1;1;1)-1

Næste år:
Between DateSerial(Year(Date())+1;1;1) And DateSerial(Year(Date())+2;1;1)-1

Sidste år:
Between DateSerial(Year(Date())-1;1;1) And DateSerial(Year(Date());1;1)-1

Jeg har dog lidt svært ved at gennemskue hvorfor Næste måned's syntax er så meget længere en de andre, men det virker :o).
Avatar billede kjulius Novice
20. marts 2006 - 17:55 #16
Fint... :-)
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