Avatar billede ribo Nybegynder
07. april 2008 - 15:20 Der er 12 kommentarer og
2 løsninger

Beregne antal medlemmer ml. 10 og 12 år ved hjælp af cpr. nr.

Når jeg skal finde antal medlemmer over 18 år i en medlemsdatabase bruger jeg: "<18" i en forespørgsel under cpr. nr. Men hvordan finder jeg lige antal medlemmer mellem f.eks 10 år og 18 år i samme forespørgsel?
Avatar billede jensen363 Forsker
07. april 2008 - 15:23 #1
Du kan benytte UNION til flere forskellige kriterieudtræk fra samme tabel
Avatar billede ribo Nybegynder
07. april 2008 - 15:25 #2
Kan du komme med noget mere konkret, da jeg ikke er helt inde i access.
Avatar billede jensen363 Forsker
07. april 2008 - 15:29 #3
Ok, en UNION vil ser nogenlunde således ud :

SELECT Count(tblMedlemmer.ALDER) AS Antal
FROM tblMedlemmer
WHERE (((tblMedlemmer.ALDER)>18));
UNION
SELECT Count(tblMedlemmer.ALDER) AS Antal
FROM tblMedlemmer
WHERE (((tblMedlemmer.ALDER)Between 10 and 18));
Avatar billede ribo Nybegynder
07. april 2008 - 15:36 #4
Øh, havde nu håbet på en nemmere løsning:-) Noget i retning af en stump kode indtastet i forespørgslen under beregn alder fra cpr. nr.

Hvordan og hvor lægger jeg den union ind i databasen?
Avatar billede jensen363 Forsker
07. april 2008 - 16:49 #5
En nem løsning er der ikke ( hvis du skal have beregnet alderen korrekt ), men her er måske noget modulkode der kan hjælpe :

Først skal du have denne modulkode

Public Function Alder(Dato As Date) As Integer
    If DateSerial(Year(Date), Month(Dato), Day(Dato)) > Date Then
        Alder = DateDiff("yyyy", Dato, Date) - 1
    Else
        Alder = DateDiff("yyyy", Dato, Date)
    End If
End Function

Så virker denne SQL:

SELECT tblMedlemmer.CPR, alder(CDate(IIf(CDate(Mid([CPR],1,2) & "/" & Mid([CPR],3,2) & "/" & Mid([CPR],5,2))<=Date(),CDate(Mid([CPR],1,2) & "/" & Mid([CPR],3,2) & "/" & Mid([CPR],5,2)),DateAdd("yyyy",-100,CDate(Mid([CPR],1,2) & "/" & Mid([CPR],3,2) & "/" & Mid([CPR],5,2)))))) AS Alder
FROM blMedlemmer
WHERE (((alder(CDate(IIf(CDate(Mid([CPR],1,2) & "/" & Mid([CPR],3,2) & "/" & Mid([CPR],5,2))<=Date(),CDate(Mid([CPR],1,2) & "/" & Mid([CPR],3,2) & "/" & Mid([CPR],5,2)),DateAdd("yyyy",-100,CDate(Mid([CPR],1,2) & "/" & Mid([CPR],3,2) & "/" & Mid([CPR],5,2))))))) > 18));
Avatar billede jensen363 Forsker
07. april 2008 - 16:50 #6
Tilsvarende

SELECT tblMedlemmer.CPR, alder(CDate(IIf(CDate(Mid([CPR],1,2) & "/" & Mid([CPR],3,2) & "/" & Mid([CPR],5,2))<=Date(),CDate(Mid([CPR],1,2) & "/" & Mid([CPR],3,2) & "/" & Mid([CPR],5,2)),DateAdd("yyyy",-100,CDate(Mid([CPR],1,2) & "/" & Mid([CPR],3,2) & "/" & Mid([CPR],5,2)))))) AS Alder
FROM blMedlemmer
WHERE (((alder(CDate(IIf(CDate(Mid([CPR],1,2) & "/" & Mid([CPR],3,2) & "/" & Mid([CPR],5,2))<=Date(),CDate(Mid([CPR],1,2) & "/" & Mid([CPR],3,2) & "/" & Mid([CPR],5,2)),DateAdd("yyyy",-100,CDate(Mid([CPR],1,2) & "/" & Mid([CPR],3,2) & "/" & Mid([CPR],5,2))))))) Between 10 And 18));
Avatar billede kabbak Professor
07. april 2008 - 22:52 #7
Jeg vil nok lave funktionen om til at bruge CPR som input

Public Function Alder(CPR As String) As Integer
    Dim Dato As Date
    Dato = CDate(Mid(CPR, 1, 2) & "/" & Mid(CPR, 3, 2) & "/" & Mid(CPR, 5, 2))
    If DateSerial(Year(Date), Month(Dato), Day(Dato)) > Date Then
        Alder = DateDiff("yyyy", Dato, Date) - 1
    Else
        Alder = DateDiff("yyyy", Dato, Date)
    End If
End Function

så kunne  en SQL se sådan ud

SELECT Medlemmer.Navn, Medlemmer.CPR, alder([CPR]) AS År
FROM Medlemmer
WHERE (((alder([CPR]))<18));
Avatar billede kabbak Professor
07. april 2008 - 22:56 #8
SQL for at finde dem mellem 10 og 18 er sådan

SELECT Medlemmer.Navn, Medlemmer.CPR, alder([CPR]) AS År
FROM Medlemmer
WHERE (((alder([CPR])) Between 10 And 18));
Avatar billede ribo Nybegynder
08. april 2008 - 19:14 #9
Hej Jensen363 & kabbak
Takker for begge jeres forslag, som jeg desværre ikke kaster mig ud i på nuværende tidspunkt grundet tidspres. Jeg havde håbet på en nem og ikke tidskrævende løsning, men det var nok naivt. Jeg gemmer forslagene til et senere tidspunkt, og skal nok få det til at funke. Hvis det er ok med jer, deler jeg pointene mellem jer? Men det kræver vist et svar?
Avatar billede jensen363 Forsker
09. april 2008 - 08:35 #10
Det er ok med mig :-)
Avatar billede kabbak Professor
09. april 2008 - 09:19 #11
ok
Avatar billede ribo Nybegynder
09. april 2008 - 10:43 #12
Takker
Avatar billede kabbak Professor
09. april 2008 - 11:10 #13
tak
Avatar billede jensen363 Forsker
09. april 2008 - 11:12 #14
Og tak herfra
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