Avatar billede moba Nybegynder
13. september 2004 - 11:05 Der er 5 kommentarer og
1 løsning

dato problem i forespørgsel

Hej
Jeg har en Cprnr som jeg konvertere til dato hvorefter jeg vil beregne alder ud. Jeg bruger
alder i dage: DateValue(Mid([CPRnr];1;2) & "-" & Mid([CPRnr];3;2) & "-" & Mid([CPRnr];5;2))
alder = date() - alder i dage
Problemet er at personer født før 1930 bliver skrevet som 2029 etc. Dvs alder bliver negativ!!! Ikke så godt :-)
Er der noget jeg kan gøre?
Morten
13. september 2004 - 11:20 #1
Jeg har lavet denne funktion, så den beregner fødselsdagen ud fra CPR-nr.
Den benytter de officielle metoder til at beregne hvilket århundrede personen er født:
Function FødselsdatoAfCPR(CPR As String) As Date
'CPR kan angives både MED og UDEN bindestreg

On Error Resume Next
    Dim TestSum  As Long
    Dim Fødselsdato As Date
    Dim a As Integer, b As Integer, c As Integer, d As Integer, e As Integer, F As Integer, G As Integer, H As Integer, i As Integer, j As Integer
    Dim Aar As Integer, Mdr As Integer, Dag As Integer, Aarhundred As Integer
   
    'Fjern evt bindestreg
    CPR = Replace(CPR, "-", "")
   
    a = Mid(CPR, 1, 1)
    b = Mid(CPR, 2, 1)
    c = Mid(CPR, 3, 1)
    d = Mid(CPR, 4, 1)
    e = Mid(CPR, 5, 1)
    F = Mid(CPR, 6, 1)
    G = Mid(CPR, 7, 1)
    H = Mid(CPR, 8, 1)
    i = Mid(CPR, 9, 1)
    j = Mid(CPR, 10, 1)

    TestSum = (4 * a + 3 * b + 2 * c + 7 * d + 6 * e + 5 * F + 4 * G + 3 * H + 2 * i + j)
On Error GoTo Except
    'dag = StrToInt(cpr[1]+Cpr[2])
    Dag = Int(Mid(CPR, 1, 1) + Mid(CPR, 2, 1))
    'Mdr = StrToInt(cpr[3]+Cpr[4])
    Mdr = Int(Mid(CPR, 3, 1) + Mid(CPR, 4, 1))
    'Aar = StrToint(cpr[5]+Cpr[6])
    Aar = Int(Mid(CPR, 5, 1) + Mid(CPR, 6, 1))
    Aarhundred = 0
    Select Case G
        Case 0 To 3: Aarhundred = 1900
        Case 4
        Select Case Aar
            Case 0 To 36: Aarhundred = 1900
            Case 37 To 99: Aarhundred = 2000
        End Select
        Case 5
            Select Case Aar
                Case 0 To 36: Aarhundred = 2000
                Case 58 To 99: Aarhundred = 1800
            End Select
        Case 6
            Select Case Aar
                Case 0 To 36: Aarhundred = 2000
                Case 58 To 99: Aarhundred = 1800
            End Select
        Case 7
            Select Case Aar
                Case 0 To 36: Aarhundred = 2000
                Case 58 To 99: Aarhundred = 1800
            End Select
        Case 8
            Select Case Aar
                Case 0 To 36: Aarhundred = 2000
                Case 58 To 99: Aarhundred = 1800
            End Select
        Case 9
            Select Case Aar
                Case 0 To 36: Aarhundred = 2000
                Case 37 To 99: Aarhundred = 1900
            End Select
    End Select
    FødselsdatoAfCPR = DateSerial(Aarhundred + Aar, Mdr, Dag)
    Exit Function
Except:
    FødselsdatoAfCPR = False

End Function

Læg denne funktion i et modul og brug den til at beregne alderen i stedet for din datevalue
Avatar billede moba Nybegynder
13. september 2004 - 11:42 #2
kan ikke bruge replace?
13. september 2004 - 11:49 #3
Bruger du Access 97?

Men hvis du VED, at der ikke er bindestreg i CPRnummeret, kan du helt fjerne linien:
CPR = Replace(CPR, "-", "")

Den er kun medtaget for at fjerne eventuelle bindestreger
Avatar billede moba Nybegynder
13. september 2004 - 12:02 #4
Respect :-)
Jeg takker.
Morten
13. september 2004 - 12:04 #5
Selv tak :o)

Koden kan nok forkortes lidt, da den oprindelig stammer fra en funktion til at kontrollere om et CPRnr er gyldigt.
Den kode har jeg liggende her:
http://www.makeiteasy.dk/eksempler/VBFunktioner.htm
13. september 2004 - 12:05 #6
...hvis du får brug for det....
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