Avatar billede goose Nybegynder
29. august 2005 - 09:00 Der er 18 kommentarer og
1 løsning

Udtræk af kalender i månedsorden

Jeg har en database hvori der indgår følgende felter:

dato (dd-mm-åååå)
overskrift (text)
tekst (notat)

Nu vil jeg gerne lave et udtræk i månedsorden, med månedens navn som overskrift, f.eks.:

JUNI 2005

12-06-2005 - overskrift
tekst

14-06-2005 - overskrift
tekst

JULI 2005

10-07-2005 - overskrift
tekst

o.s.v.

/Goose
Avatar billede goose Nybegynder
29. august 2005 - 09:01 #1
hov, glemte lige at skrive at databasen er Access.

/Goose
Avatar billede softspot Forsker
29. august 2005 - 09:06 #2
Du kan gøre flg.:

SELECT *
FROM tabel
ORDER BY Format(dato,"yyyy-mm-dd")


og så omsætte måneden for hver enkelt række i scriptkoden (når du skriver data ud til klienten).
Avatar billede goose Nybegynder
29. august 2005 - 09:15 #3
Jeg kan såmænd godt finde ud af at udtrække i datoorden, spørgsmålet går mere på hvordan man:

finder den første måned i dataene og udtrækker alle de forekomster der er i den pågældende måned og derefter looper videre til den næste måned o.s.v.

Jeg forstår ikke hvorfor du vil formatere min dato da den jo netop står som den skal i databasen dd-mm-åååå ??

/Goose
Avatar billede softspot Forsker
29. august 2005 - 09:24 #4
Formatteringen var nu mest for at få dem sorteret på tværs af årstal...

Anyway! Jeg ville blot gennemløb rækkerne og teste på hvornår month(rs("dato")) skifter. Således:

arrMonthTexts = Array("JANUAR","FEBRUAR",....osv)
curMonth = -1
do while not rs.eof
  if curMonth <> Month(rs("dato") then
    curMonth = Month(rs("dato"))
    ' generer en overskrift med månedsnavn her
    Response.Write(arrMonthText(curMonth) & " " & Year(rs("dato")) & " - " & rs("overskrift") & "<br>")
  end if

  Response.Write(rs("text") & "<br>")
  rs.movenext
loop


Eller hvordan du nu vil formattere det...
Avatar billede nielle Nybegynder
29. august 2005 - 09:24 #5
Husk nu at der helst skal være forskel på Juni 2005 og Juni 2006. Personligt ville jeg udtrække datoerne i dato-rækkefølge og så lave opdelingen i selve ASP scriptet.
Avatar billede nielle Nybegynder
29. august 2005 - 09:25 #6
softspot> Nemlig præcis noget i den stil :^)
Avatar billede goose Nybegynder
29. august 2005 - 09:46 #7
hmm, så får jeg denne fejl:

SQL = "select * from kalender ORDER BY Format(dato,"yyyy-mm-dd")"
-----------------------------------------------------^

/Goose
Avatar billede goose Nybegynder
29. august 2005 - 09:47 #8
okay, pilen skulle have været under YYYY

/Goose
Avatar billede softspot Forsker
29. august 2005 - 09:59 #9
SQL = "select * from kalender ORDER BY Format(dato,""yyyy-mm-dd"")"
Avatar billede softspot Forsker
29. august 2005 - 09:59 #10
dobbeltanførselstegn for at få anførselstegn i en streng i vbscript :)
Avatar billede goose Nybegynder
29. august 2005 - 10:25 #11
Nu får jeg en fejl der hedder:

Microsoft OLE DB Provider for ODBC Drivers error '80040e10'
[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
/kalender.asp, line 5

koden:


<!--#include virtual="/cm-inc/inc_connection.asp"-->
<%
SQL = "select * from kalender ORDER BY Format(dato,""yyyy-mm-dd"")"
set rs = conn.execute(SQL)
if rs.eof then
%>
Der er i øjeblikket ikke nogle planlagte aktiviteter.
<%
rs.close
set rs = nothing
conn.close
set conn = nothing
else
arrMonthTexts = Array("Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December")
curMonth = -1
do while not rs.eof


  if curMonth <> Month(rs("dato")) then
    curMonth = Month(rs("dato"))
    ' generer en overskrift med månedsnavn her
    Response.Write(arrMonthText(curMonth) & " " & Year(rs("dato")) & " - " & rs("overskrift") & "<br>")
  end if

  Response.Write(rs("tekst") & "<br>")
  rs.movenext
loop
rs.close
set rs = nothing
conn.close
set conn = nothing
end if
%>

/Goose
Avatar billede goose Nybegynder
29. august 2005 - 11:03 #12
Hvad gør den linie her: curMonth = -1 ?

/Goose
Avatar billede softspot Forsker
29. august 2005 - 11:21 #13
curMonth = -1 sørger blot for at curMonth vil blive sat i første gennemløb, da måneden uanset dato i databasen (forudsat den ikke kan være null) altid vil være anderledes end -1.

Ang. fejlen:
* er tabelnavnet stavet korrekt?
* er der et felt som hedder dato?

Hvis ja til begge ovenstående så prøv at ændre dato til [dato].
Avatar billede goose Nybegynder
29. august 2005 - 11:32 #14
Hmm ...... så forstår jeg det ikke.

Det hjælper ikke noget med [] omkring dato
Tabelnavnet er rigtigt.
dato eksisterer

Hvis jeg bruger
SQL = "select * from TBL_kalender ORDER BY dato"

Så udtrækker den en enkelte forekomst og fejler så med:
Subscript out of range: 'curMonth'

/Goose
Avatar billede goose Nybegynder
29. august 2005 - 11:35 #15
Hvis jeg bruger ovenstående SQl og indsætter -1 i denne linie:

  if curMonth <> Month(rs("dato")) then
    curMonth = Month(rs("dato")) -1

og samtidig fjerner curMonth = -1, så udtrækker den som den skal, dog skriver den månedsnavnet hver gang.

/Goose
Avatar billede softspot Forsker
29. august 2005 - 11:46 #16
Ja, du har ret: Month returnerer en værdi fra 1 til 12 og arrays er 0-baserede i VBScript, sorry. Jeg forstår bare ikke hvorfor en initialværdi på -1 skulle have nogen betydning for om det fungerer eller ej, jeg tror det har været det andet der gør udslaget.

Ang. SQL: det har du selv styr på :)

Er det den samme måned den skriver i hver linie, når du siger den skriver måned hver gang?
Avatar billede goose Nybegynder
29. august 2005 - 11:52 #17
Tjaee, jeg hader simpelthen det med datoer, men jeg tror jeg har fået det til at virke med nedenstående, den skulle lige have en -1 mere:

<%
SQL = "select * from kalender ORDER BY dato"
set rs = conn.execute(SQL)
if rs.eof then
%>
Der er i øjeblikket ikke nogle planlagte aktiviteter.
<%
rs.close
set rs = nothing
conn.close
set conn = nothing
else
arrMonthText = Array("Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December")

do while not rs.eof
if  curMonth <> Month(rs("dato"))-1 then
curMonth = Month(rs("dato")) -1
%>
<H2><%=arrMonthText(curMonth)%> <%=Year(rs("dato"))%></H2><BR><BR>
<%
end if
%>
<B><%=rs("dato")%> - <%=rs("overskrift")%></B><BR>
<%=replace(rs("tekst"), vbcrlf, "<BR>")%><BR><BR>

<%
rs.movenext
loop
rs.close
set rs = nothing
conn.close
set conn = nothing
end if
%>

Smid et svar softspot, så skal du få point for at lede mig på rette vej :o)

/Goose
Avatar billede softspot Forsker
29. august 2005 - 11:57 #18
Velbekomme :)
Avatar billede softspot Forsker
29. august 2005 - 11:59 #19
og takker for point :)
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