Avatar billede breum Nybegynder
26. januar 2011 - 10:20 Der 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.
Avatar billede mugs Novice
26. januar 2011 - 10:28 #1
I en forespørgsel kan du lave et udtryk således:

udtryk1: Left([CPRNR];6)
Avatar billede hugopedersen Nybegynder
26. januar 2011 - 10:29 #2
Se evt. på funktionen Left

Left([Felt]; 6)  (på forms er det ; i VBA er det ,)
Avatar billede hugopedersen Nybegynder
26. januar 2011 - 10:30 #3
Ja der skrev mugs så samtidig med mig :-)
Avatar billede mugs Novice
26. januar 2011 - 10:30 #4
Principielt mener jeg, det er forkert at gemme fødselsdato i tabellen, idet du jo altid kan uddrage data.

Men du kan i VBA sætte et felt = left funktionen:

Me.Fødselsdato = Left([CPRNR],6)
Avatar billede breum Nybegynder
26. januar 2011 - 12:21 #5
Det bliver ikke mig selv der kommer til at lave forespørgslerne, derfor skal de være nemme at gå til. Derfor vil jeg gerne have feltet med.
Avatar billede breum Nybegynder
26. januar 2011 - 12:22 #6
Tak for svar, jeg prøver Left og vender tilbage med points.
Avatar billede fdata Forsker
26. januar 2011 - 19:01 #7
(... og husk så lige, at det som udgangspunkt ikke er lovligt at registrere CPR-numre)
Avatar billede hugopedersen Nybegynder
27. januar 2011 - 07:19 #8
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.

Kilde: http://www.datatilsynet.dk
Avatar billede hugopedersen Nybegynder
27. januar 2011 - 07:23 #9
Eller hvis det skal være kedeligt:
Lov om behandling af personoplysninger
https://www.retsinformation.dk/Forms/R0710.aspx?id=828
Avatar billede fdata Forsker
27. januar 2011 - 20:15 #10
Yep - og det er vist tilfældet i meget få situationer - for private virksomheder. Derfor skrev jeg: "som udgangspunkt er det ikke lovligt"
Avatar billede breum Nybegynder
31. januar 2011 - 09:20 #11
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)

kan det mon lade sig gøre?
Avatar billede fdata Forsker
31. januar 2011 - 21:36 #12
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.

M.h.t. teknikken: Take it away, mugs  :o)
Avatar billede breum Nybegynder
02. februar 2011 - 12:42 #13
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.
Avatar billede fdata Forsker
02. februar 2011 - 19:33 #14
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.

OK?
Avatar billede breum Nybegynder
04. februar 2011 - 11:03 #15
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.

AlderVedTesten: [Laboratoriesvar]![Blodprvdato]-[Birthdayfromcpr]![Fødselsdag]

virker såles ikke.

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.
Avatar billede fdata Forsker
07. februar 2011 - 18:29 #16
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))
Avatar billede breum Nybegynder
10. februar 2011 - 10:11 #17
endnu ikke testet, men noget andet er kommet op, så der går lidt tid før jeg får tid til at kigge på det, derfor points nu.
Avatar billede breum Nybegynder
10. februar 2011 - 10:14 #18
Mange tak for hjælpen, jeg glæder mig til det virker
Avatar billede fdata Forsker
11. februar 2011 - 10:49 #19
Takker for point ;o)
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