Avatar billede fuzzy2 Nybegynder
31. juli 2002 - 00:57 Der er 5 kommentarer og
1 løsning

Fødselsdags oversigt!

Jeg skal lave et fødselsdags script der fortæller hvor gammel man bliver næste gang man har fødslesdag og hvor mange dage der er til. Navne, datoer og sådan bliver hentet fra en access database.

Men hvorfor udskriver den kun nr 4?

Sådan ser scriptet ud:

-----
<%
Session.LCID = 1030
Dim Conn, SQL, RS, ConnStr
ConnStr = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("db1.mdb")
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open ConnStr
SQL = "SELECT id, fuldenavn, yr, dday, mmonth, ondate, DateSerial(Year(DateSerial(Year(Now),Month(ondate),Day(ondate)))-" &_
        "Sgn(DateDiff('yyyy',DateSerial(Year(DateSerial(Year(Now),Month(ondate),Day(ondate)))+" &_
        "(Sgn(DateDiff('y',DateAdd('d',1,DateSerial(Year(Now),Month(ondate),Day(ondate))),Now))+1)," &_
        "Month(DateSerial(Year(Now),Month(ondate),Day(ondate)))," &_
        "Day(DateSerial(Year(Now),Month(ondate),Day(ondate)))),Now))," &_
        "Month(DateSerial(Year(Now),Month(ondate),Day(ondate)))," &_
        "Day(DateSerial(Year(Now),Month(ondate),Day(ondate)))) AS new_date FROM data ORDER BY " &_
        "DateSerial(Year(DateSerial(Year(Now),Month(ondate),Day(ondate)))-" &_
        "Sgn(DateDiff('yyyy',DateSerial(Year(DateSerial(Year(Now),Month(ondate),Day(ondate)))+" &_
        "(Sgn(DateDiff('y',DateAdd('d',1,DateSerial(Year(Now),Month(ondate),Day(ondate))),Now))+1)," &_
        "Month(DateSerial(Year(Now),Month(ondate),Day(ondate)))," &_
        "Day(DateSerial(Year(Now),Month(ondate),Day(ondate)))),Now))," &_
        "Month(DateSerial(Year(Now),Month(ondate),Day(ondate)))," &_
        "Day(DateSerial(Year(Now),Month(ondate),Day(ondate))));"

Set RS = Server.CreateObject("ADODB.Recordset")
RS.Open SQL, Conn, 3, 1
RS.MoveFirst
Do While Not RS.EOF

If RS("mmonth") = month(now) and RS("dday") = day(now) then
Response.Write "<b>Tillykke til " & RS("fuldenavn") & " som bliver " & (year(now) - RS("yr")) & " aar i dag!!! Han er fodt den: " & RS("ondate") & "-" & RS("yr") & " og datoen i dag er: " & date & "<br>"
ElseIf RS("mmonth") = month(now) and RS("dday") < day(now) then
Response.Write RS("fuldenavn") & " bliver " & (year(now) - RS("yr") + 1) & " aar gammel om " & DateDiff("y",Now,RS("new_date")) & " dage... 1 <br> Han er fodt den: " & RS("ondate") & "-" & RS("yr") & " og datoen i dag er: " & date & "<br>"
ElseIf RS("mmonth") = month(now) and RS("dday") > day(now) then
Response.Write RS("fuldenavn") & " bliver " & (year(now) - RS("yr")) & " aar gammel om kun " & DateDiff("y",Now,RS("new_date")) & " dage... 2 <br> Han er fodt den: " & RS("ondate") & "-" & RS("yr") & " og datoen i dag er: " & date & "<br>"
ElseIf month(now) > RS("mmonth") then
Response.Write RS("fuldenavn") & " bliver " & (year(now) - RS("yr") + 1) & " aar gammel om " & DateDiff("y",Now,RS("new_date")) & " dage... 3 <br> Han er fodt den: " & RS("ondate") & "-" & RS("yr")  & " og datoen i dag er: " & date & "<br>"
ElseIf month(now) < RS("mmonth") then
Response.Write RS("fuldenavn") & " bliver " & (year(now) - RS("yr")) & " aar gammel om " & DateDiff("y",Now,RS("new_date")) & " dage... 4 <br> Han er fodt den: " & RS("ondate") & "-" & RS("yr") & " og datoen i dag er: " & date & "<br>"
End If
RS.MoveNext
Loop
RS.Close
Conn.Close
Set RS = Nothing
Set Conn = Nothing
%>
----

Sådan ser outputtet ud:

---
George bliver 15 aar gammel om 3 dage... 4
Han er fodt den: 03-08-1987 og datoen i dag er: 31-07-2002
Henrik bliver 47 aar gammel om 155 dage... 4
Han er fodt den: 02-01-1955 og datoen i dag er: 31-07-2002
Troels bliver 16 aar gammel om 223 dage... 4
Han er fodt den: 11-03-1986 og datoen i dag er: 31-07-2002
Hans bliver 17 aar gammel om 306 dage... 4
Han er fodt den: 02-06-1985 og datoen i dag er: 31-07-2002
Erik2 bliver 16 aar gammel om 340 dage... 4
Han er fodt den: 06-07-1986 og datoen i dag er: 31-07-2002
Erik3 bliver 16 aar gammel om 363 dage... 4
Han er fodt den: 29-07-1986 og datoen i dag er: 31-07-2002
Erik bliver 16 aar gammel om 364 dage... 4
Han er fodt den: 30-07-1986 og datoen i dag er: 31-07-2002
---

Det output virker bare ikke.... Det er forkert for alle menneskerne bliver formateret i nr 4.

Hvordan får jeg det til at virke rigtigt?

///Troels
Avatar billede musicchart.dk Nybegynder
31. juli 2002 - 01:39 #1
jeg forstår ikke hvad dit problem er?
Avatar billede fuzzy2 Nybegynder
31. juli 2002 - 01:52 #2
Det er at jeg vil gerne have at den skriver hvor gammel man bliver på sin næste fødselsdag. For hvis man f.eks. tager og trækker fødslesåret fra det år vi er i så kommer det man kommer til at fyde i år, men når man så er fyldt det skal den kunne sige at næste år fylder man et år ekstra...
F.eks. jeg er født i 1986 og 2002 (det år vi er i) minus 1986 = 16, det vil sige at jeg er fyldt 16 år, men når den så skal skrive at jeg fylder 17 om 223 dage så kan man jo ikke bruge 2002 - 1986 methoden...

Kender du til asp vil du også kunne se hvad der er galt, og det er at når den kommer til linjen:
-----
ElseIf month(now) < RS("mmonth") then
Response.Write RS("fuldenavn") & " bliver " & (year(now) - RS("yr")) & " aar gammel om " & DateDiff("y",Now,RS("new_date")) & " dage... 4 <br> Han er fodt den: " & RS("ondate") & "-" & RS("yr") & " og datoen i dag er: " & date & "<br>"
---

...så bruger den kun denne linje til at regne ud hvor gammel man bliver næste gang og så kommer der et forkert svar, f.eks.

Troels bliver 16 aar gammel om 223 dage... 4
Han er fodt den: 11-03-1986 og datoen i dag er: 31-07-2002

...er ikke rigtigt, jeg bliver 17 år den 11-03 om 223 dage!

----
Dette problem er pisse svært at forklarer, så det nemmeste ville være hvis der er en super ASP nørd derud der kunne fortælle mig hvad der er galt, eller hvad jeg laver forkert.

//Troels
Avatar billede bobbedude Nybegynder
31. juli 2002 - 07:27 #3
er det ikke noget med at nogen år har flere dage end andre ?
Avatar billede eagleeye Praktikant
31. juli 2002 - 09:20 #4
Jeg har et styk kode som beregner hvor gammel man er:

<%
sBirthdate = "04-01-1985"
dato = sBirthdate
years = Datediff ("yyyy",dato,date)
dato = dateAdd("yyyy",years,dato)
mounths = Datediff ("m",dato,date)
if mounths < 0 then
  dato = dateAdd("yyyy",-1,dato)
  mounths = Datediff ("m",dato,date)
  years = years - 1
end if
dato = dateAdd("m",mounths,dato)
days = Datediff ("d",dato,date)
if days < 0 then
  if mounths > 0 then
    mounths = mounths - 1
  else
    years = years - 1
    mounths = 11
  end if
  dato = dateAdd("m",-1,dato)
  days = Datediff ("d",dato,date)
end if
dinStr = years & " år " & mounths & " måneder " & days & " dage"


Response.Write dinStr
%>
Avatar billede fuzzy2 Nybegynder
31. juli 2002 - 16:07 #5
tak for scriptet, men jeg har stadig et spørgsmål hvis jeg f.eks. siger:

If rs2("mor_navn") = "" then
' Lader vaer med at skrive koden
Else
Response.Write "<img src=""mor.gif"" width=""15"" height=""15""> "
End If

...og rs2("mor_navn") er et sted i min database, men den skriver alligevel <img src=""mor.gif"" width=""15"" height=""15""> selvom der ikke er noget i databasen... Hvorfor gør den det og hvorfor kan man ikke bruge > eller < tegn, det virker ikke når jeg f.eks. skriver

If rs("tal") > "7" then
' Lader vaer med at skrive koden
Else
Response.Write "tallet er mindre end 7"
End If
Avatar billede eagleeye Praktikant
31. juli 2002 - 16:42 #6
Nr.1

Prøv at rette
If rs2("mor_navn") = "" then

Til:
If Len("" & rs2("mor_navn")) = 0 then

Hvis rs2("mor_navn") aldrig har været udfyldt så er den ikke tom ("") så er den = NULL.

Nr.2
Når du skriver rs("noget") vil ASP fortolkeren tolke det som en streng næsten liggylding hvad der er i. Du kan konvertere det til tal med CInt()

If CInt(rs("tal")) > 7 then
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
Kurser inden for grundlæggende programmering

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