Nej for så får jeg samlet antal år og samlet antal måneder, samt samlet antal dage. Dvs. 12, 146 måneder 4382 dage. Det jeg søger er (de 4382) om til 12 år 2 måneder og 2 dage
Det er lidt kringlet men prøv med nedenstående funktion (læg den i et modul):
Public Function ÅrMånedDag(StartDato As Date, SlutDato As Date) As String Dim År As Integer Dim Måned As Integer Dim Dag As Integer
År = DateDiff("yyyy", StartDato, SlutDato) Måned = Month(SlutDato) - Month(StartDato) Dag = Day(SlutDato) - Day(StartDato) If Måned < 0 Or Dag < 0 Then År = År - 1
StartDato = DateAdd("yyyy", År, StartDato) Måned = DateDiff("m", StartDato, SlutDato) If Dag < 0 Then Måned = Måned - 1
StartDato = DateAdd("m", Måned, StartDato) Dag = DateDiff("d", StartDato, SlutDato)
ÅrMånedDag = År & " år, " ÅrMånedDag = ÅrMånedDag & Måned & " måneder og " ÅrMånedDag = ÅrMånedDag & Dag & " dage"
Jeg er lidt i tvivl om hvordan jeg får det ind i min forespørgelse.
Som nævnt i spørgsmålet er jeg en gruppe af personer med flere forskellige perioder tilknyttet. eksempel:
per1: fra 1-2-93 til 2-5-94 fra 4-4-96 til 7-7-97 fra 9-6-98 til 1-4-02
per2: fra 5-2-90 til 5-3-92 fra 5-8-93 til 1-5-96
Nu vil jeg gerne have det samlede antal år, måneder og dage som hver person har opsamlet og helst som en forespørgelse da jeg skal arbejde videre med det.
Følgende giver det samlede antal dage:
Sum(DateDiff("m";[startdato];[slutdato]))
Men hvordan med måneder og år (samt skudår) i en forespørgelse?
Kan jeg bruge jeres eksempler direkte i en forespørgelse? Kræver det ikke en formular (hvilket jeg ikke er interesseret i), eller kan man oprette det som en funktion som kan anvendes i en forespørgelse? Håber at det kan lade sig gøre.
Ok, først et lille bugfix til superjaps svar, rettelsen er markeret til højre med '** Bugfix **.
En anden ting, brug aldrig charset specifikke tegn i kode, såsom æ,ø og å. I det hele taget bør al kode skrives på engelsk, så det kan læses af en lidt større community en danske udviklere.
Til den anden del af dit spørgsmål wired, så har jeg ikke det store at byde på, da jeg ikke er Access bruger.
Public Function AarMaanedDag(StartDato as Date, SlutDato as Date) as String Dim Aar as Integer Dim Maaned as Integer Dim Dag as Integer
Aar = DateDiff("yyyy", StartDato, SlutDato) Maaned = Month(SlutDato) - Month(StartDato) Dag = Day(SlutDato) - Day(StartDato) If (Maaned < 0) Or (Maaned = 0 And Dag < 0) Then Aar = Aar - 1 '** Bugfix **
StartDato = DateAdd("yyyy", Aar, StartDato) Maaned = DateDiff("m", StartDato, SlutDato) If Dag < 0 Then Maaned = Maaned - 1
StartDato = DateAdd("m", Maaned, StartDato) Dag = DateDiff("d", StartDato, SlutDato)
Du laver blot et ny modul, og kopierer den ovenstående kode, og gemmer modulet. Så skulle du faktisk kunne kalde funktionen direkte fra en forespørgsel:
Hvorvidt man nu vælger at bruge æ, ø og å er helt klart et personligt valg. Jeg har ikke noget problem med disse karakterer (og det er faktisk helt tilbage til tiden med DOS, jeg sidst havde det, men det kan skyldes held). Til mit brug af kode skal jeg ikke udveksle kode med ikke-danskere, så jeg kan skrive koden, så jeg synes den er let at læse. Det er da ok, at du synes at koden generelt skal ryddes for danske karakterer, jeg er bare helt uenig i.
Nåh, nu kan jeg se det. Problemet er, at din forespørgsel ikke kan finde AarMaanedDag funktionen. Hvordan har du gemt den i modulet? Har du kopieret ovenstående og sat det ind, eller har du skrevet det selv? Noget tyder på der er en stavefejl i modulet eller i funktionen - kontroller lige det.
Åhhh jeg var kommet til at kalde modulet AarMaanedDag altså det samme som funktionen - det går ikke. Da summen skal fordeles på tre felter aar, maaneder og dage, formoder jeg at jeg skal lave tre moduler, eller en variable i funktionen der indikere hvilken værdi jeg ønsker tilbage. Jeg har nu forstået formålet med moduler og kombinationen med forespørgelser - ganske genialt.
Jeg har skrevet funktionen lidt om, så du nu også skal vælge mellem år, måned og dag (jeg går ud fra det svarer til det du har skrevet):
Public Function AarMaanedDag(StartDato As Date, SlutDato As Date, ResultatType As Integer) As Integer Dim Aar As Integer Dim Maaned As Integer Dim Dag As Integer
Aar = DateDiff("yyyy", StartDato, SlutDato) Maaned = Month(SlutDato) - Month(StartDato) Dag = Day(SlutDato) - Day(StartDato) If (Maaned < 0) Or (Maaned = 0 And Dag < 0) Then Aar = Aar - 1
StartDato = DateAdd("yyyy", Aar, StartDato) Maaned = DateDiff("m", StartDato, SlutDato) If Dag < 0 Then Maaned = Maaned - 1
StartDato = DateAdd("m", Maaned, StartDato) Dag = DateDiff("d", StartDato, SlutDato)
If ResultatType = 1 Then AarMaanedDag = Aar Else If ResultatType = 2 Then AarMaanedDag = Maaned Else AarMaanedDag = Dag End If End If
Jeg tror det skyldes at der for hver periode tælles antal år, måneder og dage, men at der efter hver post-summering ikke tages forbehold for at flytte overskudet af dage over til måneder og overskudet af måneder over til år.
Det var derfor at jeg startede med at ville summere antallet af dage for hver periode og til sidst dele det op i år, måneder og dage...
Jeg kan pt. dog ikke lige finde en løsning på problemet.
Du havde ret i at jeg anvender AarMaanedDag og ikke ÅrMånedDag
Måske hvis man kan lave globale variabler i et modul. Således at man kan checke dem efter hver post-summering (altså for hver periode som som lægges sammen).
Prøv med en ny funktion, der er baseret på antal dage.
Public Function AarMaanedDag2(AntalDage As Long) As String Dim Aar As Integer Dim Maaned As Integer Dim Dag As Integer Dim StartDato As Date Dim SlutDato As Date
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.