13. september 2011 - 10:56Der er
16 kommentarer og 1 løsning
Hiv fødselsdag/alder ud fra mysql
Jeg forsøger at hive noget alder ud på brugere og har dertil fundet noget kode her på eksperten, men kan ikke få det til at klinge. Det foregår via min og max alder via rullelister.
Koden ser sådan her: idag=now() fraalder = dateadd("yyyy",0-Request("alder_max"),idag) tilalder = dateadd("yyyy",0-Request("alder_min"),idag)
Set objRs = Conn.Execute("SELECT COUNT(*) AS records From bruger WHERE fdag BETWEEN '" & fraAlder & "' AND '" & tilAlder & "'")
fdag (fødselsdag) har formatet 1999-12-03 (3. december 1999) og min db er mysql, hvor feltet er date.
Jeg har prøvet at erstatte ' disse tegn med #, men står nu på bar bund, er der nogen eksperter som har et bud?
Hvad med?: Set objRs = Conn.Execute("SELECT COUNT(*) AS records From bruger WHERE fdag BETWEEN '" & Format$(fraAlder, "yyyy-mm-dd") & "' AND '" & Format$(tilAlder, "yyyy-mm-dd") & "'")
var det ikke php, dit forslag? virkede ikke, men jeg fjerne § og prøvede med denne kode:
Set objRs = Conn.Execute("SELECT COUNT(*) AS records From bruger WHERE fdag BETWEEN '" & Format(fraAlder, "yyyy-mm-dd") & "' AND '" & Format (tilAlder, "yyyy-mm-dd") & "'LIMIT " & intStart & ", " & intPageSize & ";") ")
tjp. Beklager, jeg kludrede lige lidt i det, første forslag fik jeg denne fejlbesked:
Invalid character Set objRs = Conn.Execute("SELECT COUNT(*) AS records From bruger WHERE fdag BETWEEN '" & Format$(fraAlder, "yyyy-mm-dd")& "' AND '" & Format$(tilAlder, "yyyy-mm-dd") & "'")
og så prøvede jeg dit andet forslag og fik denne fejlbesked:
ADODB.Recordset error '800a0cc1' Item cannot be found in the collection corresponding to the requested name or ordinal.
page.asp, line 49
denne linie: <td width="31%"> <a href="page.asp?sid=<%=objRs("brugernavn")%>"><%=objRs("brugernavn")%></a></td>
og her tænker jeg, at det må beror på, at request alder_min og alder_max ikke er i koden, som er i sin fulde længde herunder:
Set objRs = Conn.Execute("SELECT COUNT(*) AS records From bruger WHERE fdag BETWEEN '" & strFraAlder & "' AND '" & strTilAlder & "'")
intRecords = clng(objRs("records")) objRs.Close Set objRs = Nothing
intPage = Request.QueryString("page") if intPage = "" OR not isNumeric(intPage) then intPage = 1 else intPage = intPage end if intPageSize = 5 intStart = intPage*intPageSize intStart = intStart-intPageSize intPages = (intRecords/intPageSize)+1
Set objRs = Conn.Execute("SELECT COUNT(*) AS records From bruger WHERE fdag BETWEEN '" & strFraAlder & "' AND '" & strTilAlder & "'LIMIT " & intStart & ", " & intPageSize & ";")
if objRs.EOF or objRs.BOF then Response.Write "Ingen poster" else %> <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
<% Do while not objRs.EOF %> <tr> <td width="31%"> <a href="page.asp?sid=<%=objRs("brugernavn")%>"><%=objRs("brugernavn")%></a></td> <td width="31%"><%=objRs("fdag")%><%=objRs("fdag")%></td> </tr> <% objRs.movenext loop %> </table> <% end if
objRs.Close Set objRs = Nothing
response.write "<br>" For i = 1 to intPages if i = intPage then Response.Write "<b>" & i & "</b> " else Response.Write "<a href=""page.asp?alder_min="&request("alder_min")& "&alder_max=" & request("alder_max") & "&sideid=4&page=" & i & """>" Response.Write i Response.Write "</a> " end if next %>
Set objRs = Conn.Execute("SELECT COUNT(*) AS records From bruger WHERE (YEAR(CURDATE())-YEAR(fdag))-(RIGHT(CURDATE(), 5)<RIGHT(fdag, 5)) BETWEEN 20 AND 30 "'")
Ja, jeg får request alder_min + alder_max med, det er testet med response.write og koden virker også ok ifm jeg f.eks hiver amter ud osv. Knasten er dette dato-halløj.
Select Count bruger jeg jo til paging.
Beklager, havde overset at forummet var det forkerte, har du en løsning eller skal jeg flytte spørgsmålet?
ADODB.Recordset error '800a0cc1' Item cannot be found in the collection corresponding to the requested name or ordinal.
har såvidt jeg kan se ikke meget med dato-tingen at gøre. Hvor er det du Select'er de felter du spørger efter? Burde der ikke være en SELECT * et sted (eller en SELECT feltnavn1, feltnavn2 osv.)?
#9: SQL'en fejler vist fordi der er kommet lidt 'ekstra' på efter 'BETWEEN 20 AND 30', se #6
koden ser præcis ud som i #5 efter dit forslag. Hvis jeg søger på andet, har jeg ingen problemer.
i startspørgsmålet kan jeg regne dato koden ud, men scriptet er vist til en access db, og jeg har i hvert fald ikke kunne få den til at virke i mysql. så jeg kan ikke på om der burde være flere selecter end der er i koden. hvorfor skal det være så svært:-)
Set objRs = Conn.Execute("SELECT COUNT(*) AS records From bruger WHERE fdag BETWEEN '" & strFraAlder & "' AND '" & strTilAlder & "'LIMIT " & intStart & ", " & intPageSize & ";")
ud med:
Set objRs = Conn.Execute("SELECT * From bruger WHERE fdag BETWEEN '" & strFraAlder & "' AND '" & strTilAlder & "'LIMIT " & intStart & ", " & intPageSize & ";")
Beklager, troede den gamle kode skulle fjernes, og nu har jeg testet dine foreslående ændringer og sørme om udtrækket ikke virker med pagning og det hele, simpelt hen var super.
Tak for hjælpen og tålmodigheden, fortsat god dag, og smid et svar.
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.