26. januar 2011 - 10:20Der er
18 kommentarer og 1 løsning
Kopiere en del af et felt i en formular til et andet feldt
Jeg har en formular, hvor brugeren indtaster CPR nummer, men jeg skal også fødselsdatoen, og den er jo identisk med de første 6 cifre (Alle CPR er fra 19XX)
Da jeg bruger CPR nummeret som unik nøgle, kan jeg ikke dele dette op i 2 felter. Omvendt irriterer det mig at brugeren skal taste fødselsdatoen når denne burde kunne indsættes automatisk.
Kort sagt: Jeg ønsker information om hvordan jeg automatisk tager de første 6 cifre af CPR feltet og sætter dem ind i et datofelt.
Løsningen skal være i Acces, jeg ved godt, hvordan jeg skal gøre, hvis jeg kan hente det over i andre programmer, men systemet skal også virke når jeg er indlagt efter at have fået en tagsten i hovedet.
Private virksomheder må som hovedregel registrere oplysninger om personnummer:
•Når det står i lovgivningen, eller •når den registrerede har givet samtykke til registreringen. Det er desuden et krav, at registreringen af et personnummer tjener et relevant og sagligt formål.
mht det juridiske er der absolut ingen problemer, databasen laves til et medicinsk forskningsprojekt og forskeren har indhentet de relevante tilladelser til projektet.
mht det principielt forkerte i at "dobbeltlagre" fødselsdatoen er jeg principielt enig, men har for at de kan bruge databasen uden mig, accepteret. De skel nemt kunne udregne alder på forskellige datoer uden at benytte specialfunktioner som left.
mht implementeringen af ovenstående vil jeg bede om lidt mere hjælp:
1) Jeg har i tabellen lavet datofeltet som et almindeligt datofelt, det går jeg ud fra er korrekt?
2) Jeg har formularen fremme i designvisning, men ved ikke hvor jeg skal skrive left kommandoen. Kan dette skæres ud i pap?
Skal jeg f.eks skrive CPR eller fødselsdato i kontrolelementkilde?
Jeg vil være glad for en "kogebog for idioter", ala: a) I tabellen er CPR et tekstfelt, med maske "CPR" b) I tabellen er fødselsdato et datofelt. c) I formularen højreklikket du på fødselsdagsfeltet, klikker på egenskaber> data>Kontrolelementkilde, der retter du til CPR d) I feltet xxxxxxx skal du skrive Left([CPR];6)
No sweat. Det var ikke for at lege politi. Der er bare en del udviklere derude, som ikke ved at det kan skabe problemer for dem, hvis de kritikløst gemmer cpr-numre.
Jeg håber ikke at jeg fremstår utaknemmelig, jeg er meget glad for at have fået svar. Jeg er bare ikke dygtig nok til access til at gøre brug af det. Sig endelig til, hvis jeg skal give points for det svar jeg har fået, og så oprette en nyt spg til uddybelsen. På forhånd tak.
OK. En god regel er, at man forsøger at undgå redundans - og altså kun gemmer data een gang. Der er ingen grund til at gemme (og slet ikke taste) fødselsdagen, fordi - som du selv nævner - den er jo en del af CRP-nummeret.
Da CPR-nummeret er din nøgle, skal du selvfølgelig have et felt i tabellen til den. Fødselsdagen behøver du ikke et felt til. Det kan du altid "beregne" og vise.
I din formular skal CPR-nummerets kontrolelementkilde være CPRnr (eller hvad dit felt nu hedder).
Fødselsdagsfeltet skal have kontrolelementkilden =Left(CPRnr;6).
Hvis du ofte skal bruge fødselsdagsfeltet, kan du oprette en forespørgsel, som er baseret på den tabel, som din formular er bygget på, og i den oprette et nyt felt, hvor du skriver: Fødselsdag: Left(CPRnr;6) ... og så basere din formular på denne forespørgsel i stedet for tabellen.
Mange tak for hjælpen, nu kom jeg meget videre. Du har helt ret, man skal undgå dobbeltregistrering.
Jeg prøvede nederste version med forespørgslen. og ved første øjekast ser det ud til at virke, forstået på den måde at jeg får det rigtige tal. Men den bliver jo ikke en dato, så jeg kan ikke bruge den i andre forespørgsler.
Det jeg gerne vil med fødselsdagen er at trække forskellige datoer fra databasen fra den for at udregne alder på forskellige tidspunkter.
Jeg kan se at selvom CPR er et tekstfelt, kan jeg godt bruge tallet der kommer frem med left til at regne med, men den tror at 270472 er 270.472 dage og ikke datoen 27-04-72. Dvs 27-04-05 minus 270472 giver 16-10-1264, hvilket formentlig er 270.472 dage før 27/4-2005
Jeg vil jo gerne have at 27-04-2005 minus 27-07-1972(taget fra cpr) giver svaret 33 år = ca 12053 dage.
Har lidt travt, så hurtigt svar: Du kunne jo lege med at oprette en lille funktion, der kan konvertere tekststrengen til en dato. F.eks. (ikke testet):
Function DateString_To_Date(D As String) As Date DateString_To_Date = DateSerial(Right(D, 2), Mid(D, 3, 2), Left(D, 2)) End Function
Funktionen kan placeres i et vilkårligt modul.
Ret så feltet i din forespørgsel til: Fødselsdag: DateString_To_Date(Left(CPRnr;6))
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.