Avatar billede madeindk Nybegynder
08. maj 2006 - 21:35 Der er 21 kommentarer og
1 løsning

Funktion flere gange på en side

Hej eksperter! Jeg har denne her funktion... Den regner ud hvor gammel personen er:

    <%
    SQL = "SELECT * FROM users WHERE kon='Dame' ORDER BY id DESC LIMIT 3 "
    set RS = objConn.Execute(SQL)   
       
    if rs.eof then
    response.write("<br><br><b>Der er desværre opstået en fejl!/b>")
    else
    Do Until rs.eof
   
    Dato = rs("birthday")
    Function GetAge(Dateofbirth)
      GetAge = Year(Date) - Year(Dateofbirth)
      If DateDiff("s", Now, Replace(Dateofbirth, Year(Dateofbirth), Year(Date))) > 0 Then
          GetAge = GetAge - 1
      End If
    End Function
    %>
    <tr>
    <td height="23" class="Left" width="110" style="padding-left:6px;"><b>» </b><a title="Oprettet d. <%=rs("created")%>" target="_self" href="/Users/Profile.asp?ID=<%=rs("id")%>"><%=rs("username")%></a></td>
    <td height="23" class="Right" align="right" width="40" style="padding-right:3px;"><b> år</b></td>
    </tr>
    <%
    rs.movenext
    loop
    rs.close
    end if   
    %>

Men når den bliver kørt 3 gange på en side går den amok - den siger syntax error ud for 'Function'
Avatar billede erikjacobsen Ekspert
08. maj 2006 - 21:42 #1
Skriv Function ... End Function een gang på siden, fx. før du går i gang med at bruge den.
Avatar billede madeindk Nybegynder
08. maj 2006 - 21:47 #2
<table border="0" width="100%" id="table2" cellspacing="0" cellpadding="0" height="0" bgcolor="#FFFFFF">
   
    <%
    Set objConn = Server.CreateObject("ADODB.Connection")
    objConn.Open "Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=users; UID=root; PWD=" & MySQLPWD & ";"
    SQL = "SELECT * FROM users WHERE kon='Dame' ORDER BY id DESC LIMIT 3 "
    set RS = objConn.Execute(SQL)   
       
    if rs.eof then
    response.write("<br><br><b>Der er desværre opstået en fejl!/b>")
    else
    Do Until rs.eof
   
      GetAge = Year(Date) - Year(Dateofbirth)
      If DateDiff("s", Now, Replace(Dateofbirth, Year(Dateofbirth), Year(Date))) > 0 Then
          GetAge = GetAge - 1
      End If
    %>
    <tr>
    <td height="23" class="Left" width="110" style="padding-left:6px;"><b>» </b><a title="Oprettet d. <%=rs("created")%>" target="_self" href="/Users/Profile.asp?ID=<%=rs("id")%>"><%=rs("username")%></a></td>
    <td height="23" class="Right" align="right" width="40" style="padding-right:3px;"><b> år</b></td>
    </tr>
    <%
    rs.movenext
    loop
    rs.close
    end if   
    %>
               
    <!-- / 5 nyeste piger -->
   
    </table>
Avatar billede madeindk Nybegynder
08. maj 2006 - 21:48 #3
Så viser den slet ikke noget i den tabel hvor det skal være - den skriver heller ikke ngoet i kildekoden...
Avatar billede softspot Forsker
08. maj 2006 - 22:06 #4
Jeg er nok ved at blive blind, men hvor indsætter du GetAge henne i din tabel?
Avatar billede madeindk Nybegynder
08. maj 2006 - 22:10 #5
Det gør jeg ikke nogen steder - men den kommer med fejl lige gyldigt hvad...
Avatar billede softspot Forsker
08. maj 2006 - 22:10 #6
Hvad er det nu lige for en fejlmeddelelse du får?
Avatar billede madeindk Nybegynder
08. maj 2006 - 22:13 #7
Jeg får egentlig ikke nogen fejlmeddelse, der kommer bare ingen ting frem.

    <table border="0" width="100%" id="table2" cellspacing="0" cellpadding="0" height="0" bgcolor="#FFFFFF">
   
    <%
    Function GetAge(Dateofbirth)
    SQL = "SELECT * FROM users WHERE kon='Dame' ORDER BY id DESC LIMIT 3 "
    set RS = objConn.Execute(SQL)   
       
    if rs.eof then
    response.write("<br><br><b>Der er desværre opstået en fejl!/b>")
    else
    Do Until rs.eof
   
      GetAge = Year(Date) - Year(Dateofbirth)
      If DateDiff("s", Now, Replace(Dateofbirth, Year(Dateofbirth), Year(Date))) > 0 Then
          GetAge = GetAge - 1
      End If
    %>
    <tr>
    <td height="23" class="Left" width="110" style="padding-left:6px;"><b>» </b>
    <a title="Oprettet d. <%=rs("created")%>" target="_self" href="Users/Profile.asp?ID=<%=rs("id")%>"><%=rs("username")%></a></td>
    <td height="23" class="Right" align="right" width="40" style="padding-right:3px;"><b> år</b></td>
    </tr>
    <%
    rs.movenext
    loop
    rs.close
    end if
   
    End Function
    %>
   
    </table>
Avatar billede softspot Forsker
08. maj 2006 - 22:14 #8
Er variablen "Dateofbirth" defineret et andet sted end den kode du har vist her? Det skulle vel ikke være rs("Dateofbirth") i stedet for...?
Avatar billede softspot Forsker
08. maj 2006 - 22:15 #9
ok, dvs. resultatet fra databasen er tomt...?
Avatar billede madeindk Nybegynder
08. maj 2006 - 22:16 #10
Nej, for denne her funktion virker på en side hvor den bare ser ud som følgende:

    <%
    Dato = rs("birthday")
   
    Function GetAge(Dateofbirth)
      GetAge = Year(Date) - Year(Dateofbirth)
      If DateDiff("s", Now, Replace(Dateofbirth, Year(Dateofbirth), Year(Date))) > 0 Then
          GetAge = GetAge - 1
      End If
    End Function

    Response.Write GetAge(Dato)
    %>
Avatar billede softspot Forsker
08. maj 2006 - 22:19 #11
Du skal også kalde funktionen for at den bliver udført, altså

<%
Function GetAge(Dateofbirth)
  SQL = "SELECT * FROM users WHERE kon='Dame' ORDER BY id DESC LIMIT 3 "
  set RS = objConn.Execute(SQL)   
       
  if rs.eof then
    response.write("<br><br><b>Der er desværre opstået en fejl!/b>")
  else
    Do Until rs.eof
   
      GetAge = Year(Date) - Year(Dateofbirth)
      If DateDiff("s", Now, Replace(Dateofbirth, Year(Dateofbirth), Year(Date))) > 0 Then
        GetAge = GetAge - 1
      End If
    %>
    <tr>
    <td height="23" class="Left" width="110" style="padding-left:6px;"><b>» </b>
    <a title="Oprettet d. <%=rs("created")%>" target="_self" href="Users/Profile.asp?ID=<%=rs("id")%>"><%=rs("username")%></a></td>
    <td height="23" class="Right" align="right" width="40" style="padding-right:3px;"><b> år</b></td>
    </tr>
    <%
      rs.movenext
    loop
    rs.close
  end if
   
End Function
%>

<table border="0" width="100%" id="table2" cellspacing="0" cellpadding="0" height="0" bgcolor="#FFFFFF">
   
<% GetAge(DateofBirth) %>
   
</table>


Jeg synes nu ikke den er helt færdig, men lad os tage et skridt ad gangen... :)
Avatar billede erikjacobsen Ekspert
08. maj 2006 - 22:20 #12
Som du kan se i koden du skriver af efter, skal du hente den aktuelle fødselsdato i et felt i tabellen, dvs. via dit recordset: rs - det gør du ikke i nogle af dine egne eksempler.
Avatar billede softspot Forsker
08. maj 2006 - 22:21 #13
Ja, men du har jo også lagt hele renderingen af tabellens indhold ind i den funktion der hedder GetAge, så med mindre du kalder den, så vil den ikke blive udført...

Jeg er lidt forvirret, så lad os lige se om vi ikke kan få synkroniseret vores beskeder :)
Avatar billede madeindk Nybegynder
08. maj 2006 - 22:23 #14
Når jeg sætter den kode ind siden den bare:

Microsoft VBScript runtime error '800a000d'
Type mismatch: '[string: ""]'

/online2.asp, line 28

Linie 28 er: If DateDiff("s", Now, Replace(Dateofbirth, Year(Dateofbirth), Year(Date))) > 0 Then
Avatar billede erikjacobsen Ekspert
08. maj 2006 - 22:24 #15
Jamen, det er ikke så svært ;) Jeg vil æde 2 kiks på at den her virker:


    <%
    Function GetAge(Dateofbirth)
      GetAge = Year(Date) - Year(Dateofbirth)
      If DateDiff("s", Now, Replace(Dateofbirth, Year(Dateofbirth), Year(Date))) > 0 Then
          GetAge = GetAge - 1
      End If
    End Function
    SQL = "SELECT * FROM users WHERE kon='Dame' ORDER BY id DESC LIMIT 3 "
    set RS = objConn.Execute(SQL) 
     
    if rs.eof then
    response.write("<br><br><b>Der er desværre opstået en fejl!/b>")
    else
    Do Until rs.eof
 
    Dato = rs("birthday")
    %>
    <tr>
    <td height="23" class="Left" width="110" style="padding-left:6px;"><b>» </b><a title="Oprettet d. <%=rs("created")%>" target="_self" href="/Users/Profile.asp?ID=<%=rs("id")%>"><%=rs("username")%></a></td>
    <td height="23" class="Right" align="right" width="40" style="padding-right:3px;"><b>  <%=GetAge(Dato)%> år</b></td>
    </tr>
    <%
    rs.movenext
    loop
    rs.close
    end if 
    %>
Avatar billede madeindk Nybegynder
08. maj 2006 - 22:24 #16
Til sidst går jeg ud fra vi har tænkt os at skrive noget i stil med GetAge(rs("birthday")) - men det finder vi nok ud af :-)
Avatar billede madeindk Nybegynder
08. maj 2006 - 22:25 #17
Så må du gerne begynde at spise 2 kiks erikjacobsen :-)

Den virker faktisk - smider du et svar?
Avatar billede erikjacobsen Ekspert
08. maj 2006 - 22:26 #18
Det var hvis den ikke virkede, jeg ville spise 2 kiks. Du kan få dem i stedet for.
Jeg samler slet ikke på point, tak.
Avatar billede madeindk Nybegynder
08. maj 2006 - 22:27 #19
Nårh ok - tak skal du ha :-)

Skal vi dele softspot?
Avatar billede softspot Forsker
08. maj 2006 - 22:28 #20
Nej, tag du dem bare tilbage - jeg synes ikke rigtig at jeg kom helt igennem som jeg gerne ville - ellers tak for buddet :)
Avatar billede madeindk Nybegynder
08. maj 2006 - 22:32 #21
Svar - tak for hjælpen drenge ;)
Avatar billede softspot Forsker
08. maj 2006 - 22:34 #22
Velbekomme :)
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