Avatar billede weinreich Nybegynder
25. april 2002 - 16:32 Der er 9 kommentarer og
2 løsninger

dato felt opfører sig meget mærkeligt

Jeg fik lidt hjælp herinde den anden dag ( www.eksperten.dk/spm/200034 ) men der er noget galt. Jeg har oprettet en knap der først indfører en dato baseret på 2 comboboxe i et skjult tekstfelt og derefter åbner en raport der bygger på en query der filtrerer nogle data efter tekstfeltet med datoen.
Dropboxene indeholder for måneder talene 01 - 12 og for årene 00 til 05 (for år 2000 til 2005). Jeg har brugt følgende kode:

    Dim dt As Date
    dt = CDate("31" & "-" & Me.Måned & "-" & Me.År)
    Me.SamletDato = dt
    DoCmd.OpenReport "SamletLagerliste"

hvor SamletDato er tekstfeltet queryen er baseret på.
Men.......... ja der er jo et men.... når jeg har en ulige måned (januar, marts, maj osv) skriver den datoen korrekt: fx 31-01-02 eller 31-05-02
men hvis jeg bruger en lige måned skriver den datoen omvendt: 02-04-31 eller 02-06-31
(året er i alle tilfælde 2002)
Kan nogen forklare mig hvad der er galt?? Jeg har store problemer med det.
Avatar billede terry Ekspert
25. april 2002 - 17:28 #1
I assume that you are refering to the field Me.SamletDato from your query?

First how many months have 31 days in them? So this may be the problem!

Cdate attempts to convert an expression to a date but it cant know what to do with 31-02-2002 for example.

So you need to some how get the CORRECT number of days for th egiven month:
Avatar billede weinreich Nybegynder
25. april 2002 - 17:36 #2
ahh very clever :)
But hmmm how? Is it a
If(Me.Måned = 01 or Me.Måned = 03....
dt = CDate("31" & "-" & Me.Måned & "-" & Me.År)
else
dt = CDate("30" & "-" & Me.Måned & "-" & Me.År)

I´m not to good at the If statements. Could u help me?
By the way I also have to remember february. It will be good enough to always have the 28th.
Avatar billede terry Ekspert
25. april 2002 - 18:13 #3
an easy way is to have a table with the number of days for each month then you use Dlookup to get the number of days. REMEMBER leep years!
There may even be an easier way but I just cant think of it at the moment.
Oh yes! Use DateAdd to add a month and then subtract 1 day
Avatar billede terry Ekspert
25. april 2002 - 19:49 #4
dt = DateAdd("d", DateAdd("m", 1, Format("01-" & Me.Måned & "-" & Me.År, "YYYY-MM-DD")), -1)
Avatar billede terry Ekspert
25. april 2002 - 19:51 #5
oops little error there, although it did work!

dt = DateAdd("d", -1, DateAdd("m", 1, Format("01-" & Me.Måned & "-" & Me.År, "YYYY-MM-DD")))
Avatar billede proaccess Nybegynder
26. april 2002 - 07:17 #6
Følgende giver den sidste i måneden: uanset om det er februar, marts eller april...

dt=DateSerial(Me.År, Me.Måned + 1, 1 - 1)

Fidus: Tag den 1. i næste måned og træk een dag fra...
Avatar billede hansk Nybegynder
29. april 2002 - 12:47 #7
Her er en lille rutine til beregne af dage i en måned. Rutinen tager samtidig højde for skudår.
Kald funktionen som eks: MsgBox DaysInMonth(2000, 2)
Function DaysInMonth(Year As Integer, Month As Integer) As Integer
    Select Case Month
    Case 1, 3, 5, 7, 8, 10, 12
        DaysInMonth = 31
    Case 2
        DaysInMonth = 28
        If Year Mod 4 = 0 Then DaysInMonth = 29
        If Year Mod 100 = 0 Then DaysInMonth = 28
        If Year Mod 400 = 0 Then DaysInMonth = 29
    Case Else
        DaysInMonth = 30
    End Select
End Function
Avatar billede terry Ekspert
29. april 2002 - 12:58 #8
hansk>My and proacess' answers also take into account "skudår"!

weinrich>hows it going here?
Avatar billede hansk Nybegynder
30. april 2002 - 09:32 #9
terry>I agree, was not aware of the versatility in these date functions.
Avatar billede terry Ekspert
30. april 2002 - 09:49 #10
:o)
Avatar billede weinreich Nybegynder
30. april 2002 - 11:29 #11
sorry for the long wait, been away from the job for a while :) But thx for all the answers, I have an idea of what to do now even though I think I will go with proaccess' answer :)
Lars
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