Hej. Pseudokod för en lösning (kan ASP för dåligt): Hej! Skulle du kunna skriva ut lite mer hur koden skulle kunna se ut. Förstår tillexempel inte alls hur: Välj ut händelserna för aktuellt år sorterade på datum i stigande ordning, typ: Nu har jag testat men jag får det inte riktigt att fungera. Trots att jag har poster som borde bli listade så står "error!!!" (alltså att det inte fanns några poster alls som passade SQL-satsen). Har aldrig använt MySQL, men testa <code> Känns som jag var tvungen att ändra lite. Felet är <b>rs.Next</b>. Byt till rs.MoveNext Får nu: Testa slänga dit parenteser runt 2:a jämförelsen... annars blir det <b>not CINT(rs("manad"))</b> vilket inte är en boolsk jämförelse. rs("manad") hämtar jag ifrån tabellen eventdate med hjälp av "MONTH(eventdate) AS manad". eventdate inehåller datum typ 2004-06-23, "MONTH(eventdate)" ger talet "6". Behöver du verkligen använda CInt på manad? Den är ju redan ett heltal. Var lite slarvig där felmeddelandena kom när jag hade just: Frågafrån Per Persson: Det beror (som Stefan skrev) på att du kör Not på rs("manad") som inte är ett booleskt värde. Typmässigt korrekt är Not(rs("manad") > manad), men Not skall överhuvudtaget inte vara med där. Jag hittade en logisk bugg *skäms*. Nu testar jag på webbhotellet istället för på min dator, litar inte på min installation & konfig av MySQL. har du testat om det fungerar när du inte har några händelser? Testade utan poster i databasen då blev felmeddelandet: Är de logiska operatorerna inte "lata" i VBScript, dvs beräknar de högerledet även om det egentligen inte behövs? Om du nästlar då? Pröva Tack! Det funkade, på webbhotellet i alla fall och det är ju det som är det viktiga! hej det är jag med mina workarounds igen. Ta ut datum och månad och gör en kombinerad sträng :-) Testade med: Fixade det med: Vilken version av MySQL har du? Funktionen DAY() finns fr.o.m. version 4.1.1, men är ett alias för DAYOFMONTH().Lista inlägg sorterade efter månadern
Jag håller på med en slag kalender där jag vill att besökaren skall kunna välja ett årtal och för att sedan få alla månader listade som rubriker och under varje månad skall varje event som finns i databasen listas under månaden då den äger rum.
vi kan säga att jag har dessa inläggen i databasen:
Datum Event
------------------------------------
2003-10-03 Andreas fyller år!!!
2004-01-03 Anna och Per gifter sig
2004-03-05 Stormöte med klubben
2004-12-07 VM i snöbollskrig
2004-12-02 Den stora skoterträffen
Resultatet om besökaren valt år 2004 blir alltså:
År 2004
JANUARI
2004-01-03 - Anna och Per gifter sig
FEBRUARI
*inga händelser*
MARS
2004-03-05 - Stormöte med klubben
APRIL
*inga händelser*
MAJ
*inga händelser*
JUNI
*inga händelser*
JULI
*inga händelser*
AUGUSTI
*inga händelser*
SEPTEMBER
*inga händelser*
OKTOBER
*inga händelser*
NOVEMBER
*inga händelser*
DECEMBER
2004-12-02 - Den stora skoterträffen
2004-12-07 - VM i snöbollskrig
Jag har verkligen ingen aning hur jag löser detta.Sv: Lista inlägg sorterade efter månadern
<code>
månad := null
Foreach händelse
If händelse.månad <> månad
Then
Skriv ut månadsrubrik
månad := händelse.månad
End If
Skriv ut händelse
End Foreach
</code>Sv: Lista inlägg sorterade efter månadern
När händelsen lagras kanske du skulle ha månadsnamnet i klartext i en kolumn?
Ta ut månaden genom datepart.
Kör en select case
Case 1
strManad = "januari"
Case 2
strManad = "februari"
etc.
Lagra sedan strManad i en egen kolumn.
Du kan börja med en sql-string som grupperar den kolumnen och sedan för varje värde: (For Each)
hämtar händelser (månad för månad med sql där du byter ut variabeln för månad)
With recordset 'Börja med att gå till post1
Move.First
händelser och köra en While not recordset.EOF
där du skriver ut händelserna.
strHandelse = recordset("händelse")
ResponseWrite('strHandelse') - 'inte riktig säker på fnuttarna här hmm
Move.Next
(Wend)
Nästa månad (Next)
Hoppas detta inte är rotvälska för dig för jag brukar själv slå upp syntaxerna när jag inte använt dem på ett tag :-)
/AnnSv: Lista inlägg sorterade efter månadern
hämtar händelser (månad för månad med sql där du byter ut variabeln för månad
...skall kodas.
Hittade denna sida: http://forums.aspfree.com/showthread.php?t=37574&goto=nextnewest
...vet inte om den kan vara till hjälp.Sv: Lista inlägg sorterade efter månadern
<code>
Session.LCID = 1053 ' Svenska datum
jan1 = cDate(årtal & "-01-01")
dec31 = cDate(årtal & "-12-31")
sqlstr = "SELECT * FROM databas WHERE datum>=" &_
jan1 & " AND datum<=" &_
dec31 & " ORDER BY datum ASC"
' ps. beroende på databas och datatyp, kolla hur du jämför datumet
</code>
Gör en loop som loopar igenom händelserna och skriver ut dom:
<code>
Response.Write("År " & årtal & "<br/>")
curMonth = 0 ' aktuell månad (nollad)
Do Until rs.EOF
dbMonth = Month(cDate(rs("datum"))) ' databasmånad
If curMonth<dbMonth Then ' Ny månad
If (dbMonth - curMonth)>1 Then ' Händelsefria månader
For i = curMonth To dbMonth-1
Response.Write("<br/>" & uCase(MonthName(i)) & "<br/>*inga händelser*<br/>")
Next
End If
curMonth = dbMonth
Response.Write("<br/>" & uCase(MonthName(curMonth)) & "<br/>")
End If
Response.Write(rs("datum") & " - " & rs("händelse") & "<br/>") ' Skriv ut händelse
rs.MoveNext
Loop
If curMonth<12 then ' Händelsefria månader i slutet av året
For i = curMonth+1 To 12
Response.Write("<br/>" & uCase(MonthName(i)) & "<br/>*inga händelser*<br/>") '
Next
End If
</code>
Har skrivit detta utan att testa... så det kan vara fel i koden... men du kanske förstår hur jag har tänkt i alla fall...Sv: Lista inlägg sorterade efter månadern
Tror att det har med strul med datum... brukar vara så. I databasen är datumet i formen ÅÅÅÅ-MM-DD.
Vet inte hur jag skall få det att fungera.
Kanske hjälper om jag berättar att jag använder MySQL-databas.
Så här ser koden ut:
<code>
<%
ar=2004
Session.LCID = 1053 ' Svenska datum
jan1 = cDate(ar & "-01-01")
dec31 = cDate(ar & "-12-31")
Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL="SELECT * FROM calender WHERE eventdate>=" &_
jan1 & " AND eventdate<=" &_
dec31 & " ORDER BY eventdate ASC"
strDSN = "nordpol"
rs.Open strSQL, strDSN
If Not rs.EOF Then
Response.Write("År " & ar & "<br/>")
curMonth = 0 ' aktuell månad (nollad)
Do Until rs.EOF
dbMonth = Month(cDate(rs("eventdate"))) ' databasmånad
If curMonth<dbMonth Then ' Ny månad
If (dbMonth - curMonth)>1 Then ' Händelsefria månader
For i = curMonth To dbMonth-1
Response.Write("<br/>" & uCase(MonthName(i)) & "<br/>*inga händelser*<br/>")
Next
End If
curMonth = dbMonth
Response.Write("<br/>" & uCase(MonthName(curMonth)) & "<br/>")
End If
Response.Write(rs("eventdate") & " - " & rs("titel") & "<br/>") ' Skriv ut händelse
rs.MoveNext
Loop
If curMonth<12 then ' Händelsefria månader i slutet av året
For i = curMonth+1 To 12
Response.Write("<br/>" & uCase(MonthName(i)) & "<br/>*inga händelser*<br/>") '
Next
End If
else
Response.Write "error!!!"
rs.close
Set rs=nothing
end if
%></code>Sv: Lista inlägg sorterade efter månadern
<code>
strSQL="SELECT * FROM calender WHERE eventdate>=#" &_
jan1 & "# AND eventdate<=#" &_
dec31 & "# ORDER BY eventdate ASC"
</code>
eller
<code>
strSQL="SELECT * FROM calender WHERE eventdate>='" &_
jan1 & "' AND eventdate<='" &_
dec31 & "' ORDER BY eventdate ASC"
</code>
eller
<code>
strSQL="SELECT * FROM calender WHERE eventdate>='#" &_
jan1 & "#' AND eventdate<='#" &_
dec31 & "#' ORDER BY eventdate ASC"
</code>Sv: Lista inlägg sorterade efter månadern
<%
ar=2004
Session.LCID = 1053 ' Svenska datum
Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "SELECT *, MONTH(eventdate) AS manad FROM calender " &_
"WHERE YEAR(eventdate) = " & ar & " " &_
"ORDER BY eventdate ASC"
strDSN = "nordpol"
rs.Open strSQL, strDSN
Response.Write("År " & ar & "<br/>")
' Loopa över månader
For manad = 1 To 12
' Skriv ut månadsnamn
Response.Write uCase(MonthName(manad)) & "<br>"
' Om inga händelse denna månad
If Not rs.EOF Or rs("manad") > manad Then
Response.Write "* inga händelser *<br>"
Else
Do
Response.Write rs("eventdate") & " - " & rs("titel") & "<br>"
rs.Next
Loop While Not rs.EOF
End If
Next
rs.close
Set rs=nothing
%>
</code>Sv: Lista inlägg sorterade efter månadern
Ändrade:
<code>
' Om inga händelse denna månad
If Not rs.EOF Or rs("manad") > manad Then
</code>
till:
<code>
' Om inga händelse denna månad
If rs.EOF Or CINT(rs("manad")) > CINT(manad) Then
</code>
Men får då följande felmeddelande:
Feltyp:
Körningsfel i Microsoft VBScript (0x800A01B6)
Objektet stöder inte egenskapen eller metoden.: 'Next'
/nordpol/test.asp, line 38
Här är all kod:
<code>
<%
ar=2004
Session.LCID = 1053 ' Svenska datum
Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "SELECT *, MONTH(eventdate) AS manad FROM calender " &_
"WHERE YEAR(eventdate) = " & ar & " " &_
"ORDER BY eventdate ASC"
strDSN = "nordpol"
rs.Open strSQL, strDSN
Response.Write("År " & ar & "<br/>")
' Loopa över månader
For manad = 1 To 12
' Skriv ut månadsnamn
Response.Write uCase(MonthName(manad)) & "<br>"
' Om inga händelse denna månad
If rs.EOF Or CINT(rs("manad")) > CINT(manad) Then
Response.Write "* inga händelser *<br>"
Else
Do
Response.Write rs("eventdate") & " - " & rs("titel") & "<br>"
rs.Next
Loop While Not rs.EOF
End If
Next
rs.close
Set rs=nothing
%>
</code>Sv: Lista inlägg sorterade efter månadern
Sen bör du lägga villkoret för loopen i början av Do-loopen
<code>
Do Until rs.EOF
Response.Write rs("eventdate") & " - " & rs("titel") & "<br>"
rs.MoveNext
Loop
</code>Sv: Lista inlägg sorterade efter månadern
Feltyp:
(0x80020009)
Felaktig variabeltyp.
/nordpol/test.asp, line 30
...när jag kör:
<code>
If rs.EOF Or not CINT(rs("manad") > CINT(manad) Then
</code>
Men när jag kör:
<code>
If rs.EOF Or not rs("manad") > manad Then
</code>
...får jag:
Feltyp:
Körningsfel i Microsoft VBScript (0x800A000D)
Inkompatibla typer
/nordpol/test.asp, line 30
Så hur löser jag detta?Sv: Lista inlägg sorterade efter månadern
<code>
If rs.EOF Or not (CINT(rs("manad")) > CINT(manad)) Then
</code>
...fast frågan är varför du har Not där överhuvudtaget... och inte bara vänder >-tecknet..?
//EDIT
Såg att du hade glömt stänga en parentes med...Sv: Lista inlägg sorterade efter månadern
Bara "manad" ger jag ett värde mellan 1 och 12 med hjälp av "For manad = 1 To 12"Sv: Lista inlägg sorterade efter månadern
Och varför har du slängt dit Not? Det hade jag inte i mitt skript. Det skall vara så som jag skrev.Sv: Lista inlägg sorterade efter månadern
If rs.EOF Or (CINT(rs("manad")) > CINT(manad)) ThenSv: Lista inlägg sorterade efter månadern
Behöver du verkligen använda CInt på manad? Den är ju redan ett heltal.
Försök till svar:
När jag körde:
<code>
If rs.EOF Or not rs("manad") > manad Then
</code>Fick jag:
<code>
Feltyp:
Körningsfel i Microsoft VBScript (0x800A000D)
Inkompatibla typer
/nordpol/test.asp, line 30
</code>Sv: Lista inlägg sorterade efter månadern
Sv: Lista inlägg sorterade efter månadern
Pröva
<code>
<%
ar = 2004
Session.LCID = 1053 ' Svenska datum
Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "SELECT *, MONTH(eventdate) AS manad FROM calender " &_
"WHERE YEAR(eventdate) = " & ar & " " &_
"ORDER BY eventdate ASC"
strDSN = "nordpol"
rs.Open strSQL, strDSN
Response.Write("År " & ar & "<br/>")
' Loopa över månader
For manad = 1 To 12
' Skriv ut månadsnamn
Response.Write UCase(MonthName(manad)) & "<br>"
' Om inga händelse denna månad
If rs.EOF Or rs("manad") > manad Then
Response.Write "* inga händelser *<br>"
Else
While Not rs.EOF And rs("manad") = manad
Response.Write rs("eventdate") & " - " & rs("titel") & "<br>"
rs.MoveNext
Wend
End If
Next
rs.close
Set rs=nothing
%>
</code>Sv: Lista inlägg sorterade efter månadern
Testade den nya koden och fick följande mfelmeddelande:
Error Type:
ADODB.Recordset.1 (0x80020009)
Either BOF or EOF is True, or the current record has been deleted; the operation requested by the application requires a current record.
/johans/test.asp, line 36
På rad 36 står:
While Not rs.EOF And rs("manad") = manadSv: Lista inlägg sorterade efter månadern
Är inte helt säker på syntaxen där, skulle väl nästla in andra villkoret för att prova.
/AnnSv: Lista inlägg sorterade efter månadern
Error Type:
ADODB.Recordset.1 (0x80020009)
Either BOF or EOF is True, or the current record has been deleted; the operation requested by the application requires a current record.
/johans/test.asp, line 33
På rad 33 står:
If rs.EOF Or rs("manad") > manad ThenSv: Lista inlägg sorterade efter månadern
Edit: Tydligen inte... *suck*Sv: Lista inlägg sorterade efter månadern
Dvs gör en egen villkorssats för månaden.
Var ett tag se'n jag höll på med VB-script så jag är inte säker på syntaxen för att ställa upp två villkor efter varandra.Sv: Lista inlägg sorterade efter månadern
<code>
' Om inga händelse denna månad
If rs.EOF Then
Response.Write "* inga händelser *<br>"
ElseIf rs("manad") > manad Then
Response.Write "* inga händelser *<br>"
Else
Do While Not rs.EOF
If rs("manad") > manad Then
Exit Do
End If
Response.Write rs("eventdate") & " - " & rs("titel") & "<br>"
rs.MoveNext
Loop
End If
</code>Sv: Lista inlägg sorterade efter månadern
Det ända som inte fungerar är i vilket format datumet skrivs ut på sidan.
Webbhotell-servern verkar inte gilla:
<code>
Session.LCID = 1053 ' Svenska datum
</code>
Får detta felmeddelandet:
Error Type:
Session object, ASP 0219 (0x80004005)
The specified LCID is not available.
/johans/test.asp, line 4
Kan det ha med att föreningens webbhotell är B-one som använder sig av "Sun ONE Active Server Pages" för att kunna erbjuda ASP.
Testar jag utan "Session.LCID = 1053 ' Svenska datum" så skrivs datumet ut så här:
10/3/2004
och så vill jag ju inte ha det. Har kommit fram till att jag vill att det skall skrivas ut så här:
3/10. Det räcker ju faktiskt, vilket år och vilken månad det är står ju på andra platser. Hur gör jag detta?
Sv: Lista inlägg sorterade efter månadern
dag & "/" & månad.
/AnnSv: Lista inlägg sorterade efter månadern
<CODE>
strSQL = "SELECT *, DAY(eventdate) AS dag, MONTH(eventdate) AS manad FROM calendar " &_
"WHERE YEAR(eventdate) = " & ar & " " &_
"ORDER BY eventdate ASC"
</CODE>
...Men det fungerade inte. Vad är fel?Sv: Lista inlägg sorterade efter månadern
<code>
Response.Write Day(rs("eventdate"))& "/" & rs("manad") & " - " & rs("titel") & "<br>"
</CODE>
TACK FÖR HJÄLPEN!!!
Trodde ett tag att det aldrig skulle lösa sig.Sv: Lista inlägg sorterade efter månadern
Annars kan du använda DATE_FORMAT() för att formatera datumet redan i MySQL:
<code>
strSQL = "SELECT titel, DATE_FORMAT(eventdate, '%e/%c') AS datum, MONTH(eventdate) AS manad FROM calendar " &_
"WHERE YEAR(eventdate) = " & ar & " " &_
"ORDER BY eventdate ASC"
</code>