Avatar billede krasmussen Praktikant
25. september 2003 - 11:42 Der er 30 kommentarer og
1 løsning

Fødselsdag ud fra CPR-Nummer

Jeg bruger Access 2002.

Jeg har en liste (rapport), hvor jeg hvis personen har fødselsdag den dag som listen udskrives vil enten:

1 - Indsætte et ikon / flag e.a.
2 - Give linien eller et felt en anden farve og eller str.

Feltet CPR-nummer har formatet dd-mm-yyyy

NB! Jeg er ny i access, så helst et svar på "Dansk"
Avatar billede terry Ekspert
25. september 2003 - 11:58 #1
En CPR nummer har format
ddmmyycccc

cccc=Kontrol cifer!
Avatar billede jkrons Professor
25. september 2003 - 12:09 #2
Jeg går ud fra at dit cprnummerfelt er et almindeliogt datofelt, som du selv skriver, og at det hedder CPR. Så kan du bruge følgende metode:

Opret et nyt modul eller brug et, du allerede har, og kopier følgende kode til modulet:

Function FindFod(cpr As Date) As String
    fMaan = DatePart("m", cpr)
    fDat = DatePart("d", cpr)
    NuMaan = DatePart("m", Date)
    nudat = DatePart("d", Date)
    If fMaan = NuMaan And fDat = nudat Then
        FindFod = "Hurra"
    Else
        FindFod = ""
    End If
End Function

Gem modulet.

I en forespørgsel henter du nu de relevante felter til din liste. I et "nyt tomt" felt i gitteret skriver du fx Fødselsdag: FindFod([CPR])

Så laver du din rapport baseret på forespørgslen. Så vil den skrive Hurra ud for de, der har fødselsdag. Du kan selv finde på en mere kreativ tekst.
Avatar billede jkrons Professor
25. september 2003 - 12:15 #3
Du kan også finde et billede af et flag på nettet. I rapportens designvisning indsætter du så et billedfelt, med dit billed i i detaljesektionen ud for den enkelte række. Giv feltet et relevant navn.

Dernæst kan du gå i egenskbaer for detaljesektionen og vælge Hændelsen VedFormatering. Her indsætter du så denne kode:

Private Sub Detaljesektion_Format(Cancel As Integer, FormatCount As Integer)
If Me!Fødselsdag = "Hurra" Then
Me!Feltnavn.Visible = True
Else
Me!Feltnavn.Visible = False
End If
End Sub

Hvor feltnavn skal erstatted med navnet på dit felt.
Avatar billede krasmussen Praktikant
25. september 2003 - 12:19 #4
CPR-Nummeret indeholder selvfølgelig også kontrolcifrene - MEN er oprettet som tekstfelt.....Hvordan så ??
Avatar billede jkrons Professor
25. september 2003 - 12:31 #5
Prøv at skifte den første kode i modulet ud med følgende:

Function FindFod(CPR As String) As String
    fmaan = Mid(CPR, 3, 2)
    fdat = Left(CPR, 2)
    numaan = Mid(Date, 4, 2)
    nudat = Left(Date, 2)
    Debug.Print fmaan & " " & numaan
    Debug.Print fdat & " " & nudat
    If fmaan = numaan And fdat = nudat Then
        FindFod = "Hurra"
    Else
        FindFod = ""
    End If
End Function
Avatar billede jkrons Professor
25. september 2003 - 12:34 #6
Ovenstående forudsætter at et CPR-nummer ser uf som følger:

121212-4567

skriver du 12-12-12-4567 skal du ændre første linje til
fmaan = Mid(CPR, 4, 2)
Avatar billede krasmussen Praktikant
25. september 2003 - 13:01 #7
Perfekt - tak for hjælpen (og en besparelse på 8-9 timers læsning.....)
Avatar billede jkrons Professor
25. september 2003 - 13:01 #8
Velbekomme :-)
Avatar billede krasmussen Praktikant
25. september 2003 - 13:49 #9
Jeg kan forresten se, at du har hjulpet andre omkring problemer med by+postnummer.....jeg fanger bare ikke helt pointen. Kan du med få ord forklare hvordan jeg når jeg i en form taster postnummer i ét felt automatisk får hentet bynavn i "by"-feltet. Jeg har allerede tabellen med postnr+by og kan nemt lave foresp. som henter når jeg beder om prompt på postnummer

Jeg hælder selvfølgelig nogle point efter det hér
Avatar billede krasmussen Praktikant
25. september 2003 - 14:18 #10
Lige et tillægsspm. til det oprindelige: Jeg bruger funktionen med fødselsdag i en forespørgsel med flere tbl. hvor CPR er i begge : Hvor skal jeg angive hvilket CPR-felt der skal læses i ???
Avatar billede jkrons Professor
25. september 2003 - 15:24 #11
Sidstnævnte er "nemt". skriv bare FindFod([Tabelnavn].[CPR]) i stedet.

Det med post/By vender jeg tilbage med lidt senere.
Avatar billede krasmussen Praktikant
25. september 2003 - 15:37 #12
Så får jeg en err.-msg. om at navnet er tvetydigt (når jeg bruger ovenstående)
Avatar billede jkrons Professor
25. september 2003 - 15:42 #13
Du skal skrive navnet på den tabel, hvor feltet skal tages frat kommer fra i den første parentes.
Avatar billede krasmussen Praktikant
25. september 2003 - 16:14 #14
Det gør jeg faktisk min syntax er :

FindFod([t_borgerstamdata].[CPR]), men fejlen kommer alligevel???
Avatar billede jkrons Professor
25. september 2003 - 16:15 #15
Bruger du to cpr-felter i forespørgslen?
Avatar billede krasmussen Praktikant
25. september 2003 - 16:50 #16
Nej dvs. at CPR slet ikke er med i forespørgslen, men eksisterer i begge tabeller
Avatar billede jkrons Professor
25. september 2003 - 16:51 #17
Prøv at tage det med i forespørgslen fra den ene tabel (den rigtige), og undlad evt. at vise feltet.
Avatar billede krasmussen Praktikant
25. september 2003 - 17:00 #18
Mener du, at jeg bare skal tage feltet med -og samtidig lave det fiktive felt "Fødselsdag" ?
Avatar billede jkrons Professor
25. september 2003 - 17:02 #19
Jeps! Men fjern fluebenet i Vis for CPR i gitteret.
Avatar billede krasmussen Praktikant
25. september 2003 - 17:09 #20
Hmmmmmm...... samme fejl, kan jeg evt. maile dig forespørgslen
Avatar billede jkrons Professor
25. september 2003 - 17:22 #21
Helt i orden. Send den til jkr@lyngby.nu
Avatar billede jkrons Professor
25. september 2003 - 18:01 #22
Jeg har modtaget din fil og ser på den lidt senere
Avatar billede jkrons Professor
25. september 2003 - 18:48 #23
Du har lagt funktionen ind i to forskellige moduler, men med samme navn. Både i "Fødselsdag i dag" og i "Fødselsdag i dag Tester". Omdøb eller slet en af funktionerne til at hedde noget andet end FindFod, så kører det.-
Avatar billede jkrons Professor
25. september 2003 - 19:09 #24
Omkring postnummer/by problematikken er der flere måder at løse det på. Hvis du bare skal kunne finde bynavn på grund af postnummer er her en måde:

I et modul (fx samme som du før har brugt) indlægger du følgende kode:

Function FindBy(pn As Long) As String
    FindBy = DLookup("[by]", "t_postnumre", "[postnummer] = " & pn)
End Function

I den formular hvor bynavnet skal findes på grundlag af postnummeret lægger du følgende kode ind i By-tekstboksens kontrolelementkilde =FindBy([Postnummer])

Hvis du så låser Bynavnsfeltet vil bynavnet automatisk blive vist når du indtaster postnummeret, og man kan ikke ved en fejltagelse komme til at overskrive det med noget andet.

Jeg returnerer din database, så kan du se i formularen F_StamdataBorger, hvordan jeg har gjort.

Jeg vil iøvrigt anbefale dig at se på din tabulatorrækkefølge i formularerne :-)
Avatar billede krasmussen Praktikant
25. september 2003 - 19:27 #25
OK jeg har slettet "test modulet", men bliver promptet for t_borgerstamdata.CPR uden at jeg har angivet det som kriterie, koden er som du har beskrevet i FELT og total står til GRUPPÈR EFTER.....
Avatar billede jkrons Professor
25. september 2003 - 19:30 #26
Fjern totalen helt. Den har ingen betydning her. Slet feltet med CPR. Det har du alligevel ikke brug for.

Prøv at se på databasen. Jeg har sendt den tilbage, så den må være på trapperne.
Avatar billede vanni Nybegynder
25. september 2003 - 20:23 #27
terry> Er du begyndt på danski? :o)
Avatar billede jkrons Professor
26. september 2003 - 11:52 #28
Fik du det hele til at virke?
Avatar billede krasmussen Praktikant
26. september 2003 - 14:54 #29
Nej ikke fødselsdag, når der er de 2 berømte tabeller
Avatar billede jkrons Professor
26. september 2003 - 16:08 #30
Fik du min mail omkring det forkerte tabelnavn?
Avatar billede krasmussen Praktikant
26. september 2003 - 17:18 #31
Ja den fik jeg rettet - jeg har mailet dig et skærmdump af indholdet af "Felt" samt fejlen, men du har ret det må være et krav at kende sine tablenames :-|
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