sql = "SELECT måned, dag, emne FROM dinTabel ORDER BY år ASC, måned ASC, dag ASC" Set rs = Conn.Execute(sql)
pervMonth = "" Do While Not rs.EoF If rs("måned") <> "pervMonth" Then If pervMonth <> "" Then Response.Write "<br>" Response.Write rs("måned") & "<br> Response.Write "-----------<br>" pervMonth = rs("måned") End If
Enig. Man bør altid så vidt som mulig bruge de felttyper som svare bedst til dattypen. På den måde kommer man længst, og behøver ikke at opfinde snedige løsninger fof simple ting (så som at sortere efter dato-orden).
Jeg vil anbefale at du har en kolonne som indeholder datoen og typen op feltet er Dato/klokkeslæt. Når du så vil hente data ud kan du som nielle har vist lave en SQL sætning som og lave nogle alias felter som indeholder år, måned, og dag.
Hvis du vil beholde 3 kolonne bør du lave måned om til en tal kolonne og srkive tallet for måneden .
Hvis du helt vil undgå at rette og du bruger access og det er en DK udgave kan du prøve sådan her, funktionen CDate kan godt læst tekst måneder sådan her:
SQL = "SELECT måned, dag, år FROM dinTabel ORDER BY cdate(dag & "-" & måned & "-" & .år)"
Jeg er først kun lige startet, så jeg vil såmænd gerne have lavet det på den mest smarteste og nemmeste måde. Lige nu har jeg jo som sagt 3 kolonner og i dem er månederne skrevet i tal og blir lavet om bagefter i asp.
sql = "SELECT month(dato) as maaned, day(dato) as dag, emne FROM kalender ORDER BY dato ASC" Set rs = Conn.Execute(sql)
prevMonth = "" Do While Not rs.EoF If maaned <> prevMonth Then If pervMonth <> "" Then Response.Write "<br>" Response.Write "<br><b>" & maaned & "</B><br>" Response.Write "-----------<br>" prevMonth = maaned End If
Du har ikke rs omkring kolonnenavnet maaned og dag så prøv sådan her:
sql = "SELECT month(dato) as maaned, day(dato) as dag, emne FROM kalender ORDER BY dato ASC" Set rs = Conn.Execute(sql)
prevMonth = "" Do While Not rs.EoF If rs("maaned") <> prevMonth Then If pervMonth <> "" Then Response.Write "<br>" Response.Write "<br><b>" & rs("maaned") & "</B><br>" Response.Write "-----------<br>" prevMonth = rs("maaned") End If
Arrays starter fra index 0 så enten kan man lave en "dummy" værdi på index 0 eller trække en fra det tal man har hvis det start fra 1. Måned er 1 til 12.
Hvis man så skrive maanedArray(month(dato)-1) vil den finde den tekst som høre til det index. Hvis det er datoen i dag vil den give Februar. Funktionen split bruges til at split'te en streng til at array. Der kan også angives hvilken karakter split skal bruge som dele karakter, så linien vist før bør være:
prevMonth = "" Do While Not rs.EoF If rs("maaned") <> prevMonth Then If pervMonth <> "" Then Response.Write "<br>" Response.Write "<br><b>" & maaned & "</B><br>" Response.Write "-----------<br>" prevMonth = rs("maaned") End If
Det er fordi koden sætter viablen maaned uden for loop'et og dermed vil den altid indeholde måned for den første post så prøv sådan her så maaned får en værdi ved hver post i databasen:
prevMonth = "" Do While Not rs.EoF maaned = rs("maaned") maaned = maanedArray(int(maaned)-1) If rs("maaned") <> prevMonth Then If pervMonth <> "" Then Response.Write "<br>" Response.Write "<br><b>" & maaned & "</B><br>" Response.Write "-----------<br>" prevMonth = rs("maaned") End If
Jeg vil bruge int da Cint ikke kan håndtere tal størrer end 32767 uden at give en fejl. Int kan håndtere op til maximun tal. Hvis man runder komma tal af er der lidt forskel på hvornår de runder op eller ned.
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.