Avatar billede sandra49 Nybegynder
28. august 2001 - 20:24 Der er 6 kommentarer og
1 løsning

Fødselsdagsudregning!

Jeg har en tabel over vennerne med indtastet fødselsdato (i et dato-felt).

Hvordan 1)laver jeg en forespørgsel, så jeg hurtigt kan se, om der er en rund fødselsdag lige om hjørnet? og 2)en rapport, hvor listen er sorteret efter datoen, så den virker som en fødselsdagskalender?
Avatar billede jens-peter Nybegynder
28. august 2001 - 22:27 #1
Spørgsmål 2) er besvaret i www.eksperten.dk/spm/101279, hvor der er angivet.

For at løse spørgsmål 1) har jeg så tilføjet lidt, så alle personer, der i indeværende år har rund fødselsdag (deleligt med 10) bliver vist.

Den samlede SQL bliver da:

SELECT Navnetabel.Fornavn & \" \" & Navnetabel.Efternavn AS Navn, Navnetabel.Fødselsdato, IIf(DateDiff(\"d\",DatePart(\"d\",[Fødselsdato]) & \"-\" & DatePart(\"m\",[Fødselsdato]),Now())<0,DateDiff(\"d\",DatePart(\"d\",[Fødselsdato]) & \"-\" & DatePart(\"m\",[Fødselsdato]),Now()),DateDiff(\"d\",DatePart(\"d\",[Fødselsdato]) & \"-\" & DatePart(\"m\",[Fødselsdato]),Now())+-1000), Year(Now())-Year([Fødselsdato]) AS År, IIf([År]/10-Int([År]/10)=0,[År],\"--\") AS Rund
FROM Navnetabel
WHERE (((Navnetabel.Fødselsdato) Is Not Null))
ORDER BY IIf(DateDiff(\"d\",DatePart(\"d\",[Fødselsdato]) & \"-\" & DatePart(\"m\",[Fødselsdato]),Now())<0,DateDiff(\"d\",DatePart(\"d\",[Fødselsdato]) & \"-\" & DatePart(\"m\",[Fødselsdato]),Now()),DateDiff(\"d\",DatePart(\"d\",[Fødselsdato]) & \"-\" & DatePart(\"m\",[Fødselsdato]),Now())+-1000) DESC;

Hvis du ikke er vant til SQL, er det nok lidt langhåret, men umiddelbart har jeg ikke en simplere løsning.

mvh/Jens-Peter
Avatar billede sandra49 Nybegynder
29. august 2001 - 08:18 #2
Aner intet om SQL - spørgsmålet nu er så, om jeg skal lære det - eller om andre har nogle mindre langhårede forslag?
Avatar billede terry Ekspert
29. august 2001 - 11:22 #3
As jens-peter says, \"er det nok lidt langhåret\".
If you really want to make the most out of Access then I would suggest that you do learn some SQL. But while your learning I would be prepared to take a quick look at you dB and make a report for you.
You can send the dB to dkTeBrSa@Europe.lego.com and note that the .com is part of the hyperlink

mvh
Terry

Avatar billede jens-peter Nybegynder
29. august 2001 - 12:39 #4
I stedet for den lange SQL-sætning, har jeg i stedet lavet et forslag, hvor der anvendes 2 funktioner, der er defineret i VBA. Måske er den lettere for dig at forstå.

Forespørgslen ser da sådan ud:

SELECT Tabel1.Navn, Tabel1.Fødselsdato, RundFødselsdag([Fødselsdato]) AS Rund
FROM Tabel1
ORDER BY NDageSort([Fødselsdato]);

og i et modul skal nedenviste to funktioner oprettes:

Public Function NDageSort(Fødselsdato As Date) As Integer
  Dim NDage As Integer
  NDage = DateDiff(\"d\", Now(), DateSerial(Year(Now), Month(Fødselsdato), Day(Fødselsdato)))
  If NDage < 0 Then
    NDageSort = 1000 + NDage
  Else
    NDageSort = NDage
  End If
End Function

Public Function RundFødselsdag(Fødselsdato As Date) As String
  Dim NDage As Integer
  Dim NextBirthdayYear As Integer
  Dim NYear As Integer
  NDage = DateDiff(\"d\", Now(), DateSerial(Year(Now), Month(Fødselsdato), Day(Fødselsdato)))
  If NDage < 0 Then
    NextBirthdayYear = Year(Now) + 1
  Else
    NextBirthdayYear = Year(Now)
  End If
  NYear = NextBirthdayYear - Year(Fødselsdato)
  If NYear / 10 - Int(NYear / 10) = 0 Then
    RundFødselsdag = NYear
  Else
    RundFødselsdag = \"-\"
  End If
End Function

Hvis det ikke er alle de med 10 delelige fødselsdage, du vil have vist som runde fødselsdage, kan du let ændre i VBA-koden, så du får det tilpasset dit behov.

mvh/Jens-Peter
Avatar billede sandra49 Nybegynder
29. august 2001 - 17:29 #5
Jeg arbejder med det... ha\' lidt tålmodighed, mit niveau skal hæves lidt...
Avatar billede jens-peter Nybegynder
29. august 2001 - 19:35 #6
Vi er skam meget tålmodige. Vi forsøger bare at give en hånd med for at hive dig lidt op, så spørg bare!

mvh/Jens-Peter
Avatar billede sandra49 Nybegynder
30. august 2001 - 18:50 #7
Tusind tak for hjælpen, Terry - flot! Og Jens-Peter - jeg skal nok sætte mig ned og lære noget mere om databaseprogrammering, men når man ligefrem kan få løsningen serveret på et sølvfad... men tak for din hjælp også.
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