Avatar billede rille101 Nybegynder
10. oktober 2005 - 14:27 Der er 8 kommentarer og
1 løsning

Sorter efter måned. vises ud fra Select bokse

Hej.
Har før haft dette spm. på exp, men det var vist en dødssejler, så jeg prøver lige igen...

Jeg har en side der med en repeat region lister mine records op fra en tabel aktivitetskalender.

For at overskueliggøre aktivitetskalenderen for brugerne vil jeg gerne have det lavet således at man via to select bokse vælger hhv. måned og år, hvorpå så posterne fra den valgte måned vises.

Er der nogen der kan hjælpe?

Har været igang, så jeg har allerede lidt kode, hvis det bliver nødvendigt...
Avatar billede fennec Nybegynder
10. oktober 2005 - 14:41 #1
Noget i denne stil:

<form name="myForm" method="get">
<select name="yearSel" onchange="this.form.sumbit();">
  <option value="2004">2004</option>
  <option value="2004">2005</option>
</select>
<select name="monthSel" onchange="this.form.sumbit();">
  <option value="1">Jan</option>
  <option value="2">Feb</option>
</select>
</form>

<%
dim monthSel, yearSel
if isnumeric(Request.querystring("yearSel")&"") then yearSel = cint(Request.querystring("yearSel")) else yearSel = year(date)
if isnumeric(Request.querystring("monthSel")&"") then monthSel = cint(Request.querystring("monthSel")) else monthSel = month(date)

fromDate = dateserial(yearSel,monthSel,1)
toDate = dateserial(yearSel,monthSel+1,0)

set rs = conn.execute("select * from dinTabel where dato detween '"& fromDate &"' and '"& toDate &"'")
while not rs.eof
...
  rs.MoveNext
wend
%>

Nu ved jeg ikke, hvilken database du kører på, men dato formatet skal højest sansynlig formateres til denne, men det har jeg en funktion til.
Avatar billede rille101 Nybegynder
11. oktober 2005 - 10:52 #2
Ja, det må være noget i den retning.
Skal der stå "between" i stedet for "detween"?
Får denne fejl ved "between":
[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.

og denne ved "detween":
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'FraDato detween '01-10-2005' and '31-10-2005''.

Jeg bruger en access database, og mine koder ser bl.a. lige nu således ud:

<%
dim monthSel, yearSel
if isnumeric(Request.querystring("yearSel")&"") then yearSel = cint(Request.querystring("yearSel")) else yearSel = year(date)
if isnumeric(Request.querystring("monthSel")&"") then monthSel = cint(Request.querystring("monthSel")) else monthSel = month(date)

fromDate = dateserial(yearSel,monthSel,1)
toDate = dateserial(yearSel,monthSel+1,0)
%>
<%
Dim RSaktivitetskalender
Dim RSaktivitetskalender_numRows

Set RSaktivitetskalender = Server.CreateObject("ADODB.Recordset")
RSaktivitetskalender.ActiveConnection = MM_ballumby_STRING
RSaktivitetskalender.Source = "SELECT id, titel, FraDato, arrangor, TilDato, tidspunkt, sted  FROM Aktivitetskalender where FraDato detween '"& fromDate &"' and '"& toDate &"'  ORDER BY FraDato"
RSaktivitetskalender.CursorType = 0
RSaktivitetskalender.CursorLocation = 2
RSaktivitetskalender.LockType = 1
RSaktivitetskalender.Open()

RSaktivitetskalender_numRows = 0
%>


Form taggen har jeg sat EFTER asp delen, må jeg det?
Avatar billede fennec Nybegynder
11. oktober 2005 - 11:05 #3
Da du bruger Access skal der laves nogle ændringer:

fromDate = ConvertToSqlDate(dateserial(yearSel,monthSel,1))
toDate = ConvertToSqlDate(dateserial(yearSel,monthSel+1,0))

RSaktivitetskalender.Source = "SELECT id, titel, FraDato, arrangor, TilDato, tidspunkt, sted  FROM Aktivitetskalender where FraDato between #"& fromDate &"# and #"& toDate &"#  ORDER BY FraDato"


Function ConvertToSqlDate(dato)
  dim SQLYear,SQLMonth,SQLDay
  SQLYear = Year(dato)
  SQLMonth = right("0"&Month(dato),2)
  SQLDay = right("0"&Day(dato),2)
  ConvertToSqlDate = SQLMonth&"-"&SQLDay&"-"&SQLYear
End Function
Avatar billede fennec Nybegynder
11. oktober 2005 - 11:08 #4
En forklaring:

Access datoer skal omkrandses af #, andre databaser bruger '.
Access datoformat er mm-dd-yyyy, andre bruger yyyy-mm-dd. Derfor skal datoer (næsten) altid omformateres når de skal ind i SQL.
Avatar billede rille101 Nybegynder
11. oktober 2005 - 11:40 #5
Jeps. det var det der skulle til.
Lige en ting.

Kan man lave det sådan at, hvis man f.eks. får vist alle aktiviteter for oktober 2005, så er det også de to værdier der vises i selectboksene?
Avatar billede fennec Nybegynder
11. oktober 2005 - 11:45 #6
Det skulle ikke være et problem.

<form name="myForm" method="get">
<select name="yearSel" onchange="this.form.sumbit();">
  <option value="2004" <% if Request.querystring("yearSel") = "2004" then response.write "selected" %>>2004</option>
  <option value="2005" <% if Request.querystring("yearSel") = "2005" then response.write "selected" %>>2005</option>
</select>
<select name="monthSel" onchange="this.form.sumbit();">
  <option value="1" <% if Request.querystring("monthSel") = "1" then response.write "selected" %>>Jan</option>
  <option value="2" <% if Request.querystring("monthSel") = "2" then response.write "selected" %>>Feb</option>
</select>
</form>

.o) <-- One Eyed Jack
Avatar billede rille101 Nybegynder
11. oktober 2005 - 12:34 #7
Ja det kører, men når man besøger siden altså uden querystring, så vises aktiviteter for den aktuelle måned.
Men i selectboksen står der stadig januar, hvilket nok ville forvirre mine brugere.
Kan det løses med et eller andet á la

if isEmpty.querystring then "et eller andet med month(now)"
Avatar billede fennec Nybegynder
11. oktober 2005 - 12:41 #8
Flyt dette op først på din side:

dim monthSel, yearSel
if isnumeric(Request.querystring("yearSel")&"") then yearSel = cint(Request.querystring("yearSel")) else yearSel = year(date)
if isnumeric(Request.querystring("monthSel")&"") then monthSel = cint(Request.querystring("monthSel")) else monthSel = month(date)

Så kan du bruge monthSel og yearSel til at sammenligne med i stedet:
<form name="myForm" method="get">
<select name="yearSel" onchange="this.form.sumbit();">
  <option value="2004" <% if yearSel = 2004 then response.write "selected" %>>2004</option>
  <option value="2005" <% if yearSel = 2005 then response.write "selected" %>>2005</option>
</select>
<select name="monthSel" onchange="this.form.sumbit();">
  <option value="1" <% if monthSel = 1 then response.write "selected" %>>Jan</option>
  <option value="2" <% if monthSel = 2 then response.write "selected" %>>Feb</option>
</select>
</form>
Avatar billede rille101 Nybegynder
15. oktober 2005 - 17:47 #9
Helt kanon!
Mange tak for hjælpen...
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