webForumDet fria alternativet

Födelsedagar närmaste veckan

ASP

11 svar · 702 visningar · startad av Bj

Medlem sedan sep. 2000314 inlägg
Frågan#1

Jag har sökt och hittat en del funktioner på webforum hur man kan ta fram födelsedagar ur ett datum/tid -fält.
Men naturligtvis har jag kört fast på två punkter.

sql = "select * from kunder where month(fodelseDatum) = month(now()) and day(fodelseDatum) = day(now())"

RecSet.Open SQL, Connect, adOpenStatic, adLockOptimistic
Do Until RecSet.EOF
alder = RecSet("FodelseDatum")
response.write RecSet("Fornamn") & " " & RecSet("Efternamn") & " som fyller " & DateDiff("y",alder,date())/365.2375 & " år idag <br>"

RecSet.MoveNext
Loop
RecSet.Close
Connect.Close

1. Hur skall man skriva för att få fram födelsedagarna de närmaste sju dagarna?

2. Hur tusan avrundar jag?? Har testat på olika sätt utan att lyckas. Det blir ju nu t.ex 25,23435873 år

Medlem sedan dec. 19998 577 inlägg
#2

Re: Födelsedagar närmaste veckan

Förutsätter att kör SQL-Server. Kör du Access för du sätta # runt datumvärdena istället.

Testa detta:

sql = "select * from kunder where month( fodelseDatum ) between " & month( date() ) & " and " & month( dateadd( "D", 7, date() ) ) & " and day(fodelseDatum) between " & day( now() ) & " and " & day( dateadd( "D", 7, date() ) )

RecSet.Open SQL, Connect, adOpenStatic, adLockOptimistic
Do Until RecSet.EOF
alder = RecSet("FodelseDatum")
response.write RecSet("Fornamn") & " " & RecSet("Efternamn") & " som fyller " & round( DateDiff("y",alder,date())/365.2375 ) & " år idag <br>"

RecSet.MoveNext
Loop
RecSet.Close
Connect.Close

/R Lite ändringar...

Medlem sedan sep. 2000314 inlägg
#3

Tack Vide.
Visst är det access jag kör...
Var menar du att jag skall sätta #?

Medlem sedan dec. 19998 577 inlägg
#4

Glöm det, ändrade det så att det inte spelade någon roll. ;)

Varsågod... :)

Medlem sedan sep. 2000314 inlägg
#5

Visst funkade det bra Vide...
Nu uppstod en annan sak jag inte tänkte på.
Går det att få fram datumet som personen i fråga fyller år på.

response.write RecSet("Fornamn") & " " & RecSet("Efternamn") & " som fyller " & round( DateDiff("y",alder,date())/365.2375 ) & " år den ?????????<br>"
Medlem sedan mars 20023 561 inlägg
#6

Ta bara månad och dag ur fodelsedatum.

Medlem sedan sep. 2000314 inlägg
#7

Om någon är intresserad(eller kan bli) lägger jag in det färdiga scriptet här.
Tack för hjälpen.

<%
Set RecSet = Server.CreateObject("ADODB.Recordset")
sql = "select * from kunder where month( fodelseDatum ) between " & month( date() ) & " and " & month( dateadd( "D", 7, date() ) ) & " and day(fodelseDatum) between " & day( now() ) & " and " & day( dateadd( "D", 7, date() ) )& _
" ORDER BY month( FodelseDatum ),day( FodelseDatum ) ASC "

RecSet.Open SQL, Connect, adOpenStatic, adLockOptimistic

if RecSet.EOF then
response.write "Inga födelsedagar denna vecka"
else

Do Until RecSet.EOF
alder = RecSet("FodelseDatum")
response.write RecSet("Fornamn") & " " & RecSet("Efternamn") & "  " & round( DateDiff("y",alder,date())/365.2375 ) & " år den " & day(RecSet("Fodelsedatum")) &"/" & month(RecSet("Fodelsedatum")) &"<br>"

RecSet.MoveNext
Loop
end if
RecSet.Close
Connect.Close
%>
Medlem sedan sep. 2000314 inlägg
#8

Ovanstående hara funkat perfekt fram till idag.
Nu visas födelsedagar från 1/6 ända fram till den 22/7.
Jag antar att det kan ha något med månadsskiftet att göra men är det någon som vet hur jag skall lösa det?

Medlem sedan sep. 2000314 inlägg
#9

Ingen...?

Medlem sedan dec. 200215 inlägg
#10

Bara rent upp och ner ur mitt just nu trötta huvud ... räcker det inte bara att skriva typ
"SELECT * FROM Kunder WHERE FodelseDatum BETWEEN " & Date() & " AND " & DateAdd("d", 7, Date) & " ORDER BY FodelseDatum ASC"

Medlem sedan sep. 2000314 inlägg
#11

Nej tyvärr. Då visar den att inga födelsedagar finns den närmsta tiden. (Men de finns i databasen)
Har fått följande sql-sats i sql-forumet.

sql = "SELECT * FROM kunder WHERE DateSerial(Year(Date()), Month(fodelseDatum), Day(fodelseDatum))" & _
"BETWEEN Date() AND DateAdd('d', 7, Date()) ORDER BY Month(fodelseDatum), Day(fodelseDatum)"

Denna sql-sats går nu igenom utan felmeddelande men nu får jag i stället ett fel på nästa rad vilken ser ut på följande vis.

RecSet.Open SQL, Connect, adOpenStatic, adLockOptimistic

Meddelande lyder:
Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][Drivrutin för ODBC Microsoft Access] Typblandningsfel i villkorsuttryck.
fodelsedag.asp, line 21
Jag har adovbs inkluderad.
Resterande kod ser ut på följande vis.

if RecSet.EOF then
response.write "Inga födelsedagar denna vecka"
else

Do Until RecSet.EOF
alder = RecSet("FodelseDatum")
response.write RecSet("Fornamn") & " " & RecSet("Efternamn") & "  " & round( DateDiff("y",alder,date())/365.2375 ) & " år den " & day(RecSet("Fodelsedatum")) &"/" & month(RecSet("Fodelsedatum")) &"<br>"

RecSet.MoveNext
Loop
end if
RecSet.Close
Connect.Close
Medlem sedan jan. 2003173 inlägg
#12

Några år senare.... någon som vet svaret på BJ:s problem ovan?

Jag har exakt samma problem med att det blir fel vid månadsskifte. Istället för att t.ex. ta 28 april till 4 maj tar den alla mellan 1-7 april och 1-7 maj. När jag liksom BJ testar SQL-satsen i senaste inlägget får jag också Typblandningsfel i villkorsuttryck på den raden. Jag har provat med lite olika datatyper (datum ,text, tal), men ingen skillnad. Använder en Access-databas om det gör någon skillnad.

Någon som vet?

260 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)