webForumDet fria alternativet

Sortera efter vecka samtidigt som dag

ASP

22 svar · 600 visningar · startad av jns

Medlem sedan dec. 2001132 inlägg
Frågan#1

jag ska göra en händelse lista som ska se ut typ så här:

Vecka 10:

Mån

hockey
vi ska spela hockey, tag med skridskor.

Bad
idag ska vi bada, medtag badkläder.

fredag

fotboll
fotboll ska vi spela, ja

Vecka 11

tisdag

Pankaksätartävling
*phew*

ovs ovs...

problemet är att jag måste sortera efter både vecka och dag och tabellan ska bara visa de veckor som finns i databasen.
Vanlig asp med access databas. :r

Medlem sedan mars 20015 287 inlägg
#2

ReD. Kanske inte...

Medlem sedan mars 2001309 inlägg
#3

Hur ser din databas struktur ut ?

Medlem sedan dec. 2001132 inlägg
#4

5 kolumer:
id, Vecka, Dag, Rubrik, Beskrivning

Medlem sedan mars 2001309 inlägg
#5
Select Vecka, Dag, Rubrik, Beskrivning from tabell order by Vecka, Dag

Sen får du se till att vecka och dag bara skrivs ut en gång för varje vecka och dag. Det kan du fixa igenom att gämföra det du har i rs("vecka") och rs("dag") med det som skrevs ut föra varvet i loopen.....

(Du kommer inte vara tvungen att göra enligt ovan om du bara ska ha en aktivitet per dag , men det vet ju inte jag om du ska.)

Fattar du vad jag menar .......?

Medlem sedan dec. 2001132 inlägg
#6

hmm...
jag förstår inte riktigt...

order by Vecka, Dag

hur sorterar den då?
men hur ska loopen se ut?

Medlem sedan feb. 20022 594 inlägg
#7

Loopen ska antagligen se ut som du har den nu, har inte kollat efter någon kod så jag vet inte riktigt.

Med den koden så sorterar den först efter vilken vecka det är. Efter det sorterar den efter vilken dag det är. Förstår du?

Medlem sedan mars 2001309 inlägg
#8
order by Vecka, Dag

Sorterar först allt på vecka sen inom veckan sorteras allt efter dagar.......

Hur loopen ska se ut beror ju på hur du vill att resultatet ska se ut.....

Men om du gör en loop som skriver ut alla poster så kommer ju vecka och dagen skrivas ut för varje aktivitet och det vill du förmodligen inte.

Det är där jag menar att du måste lägga det vecka och dag i en variabel och gemföra med föregånde varv i loppen och om då dag och eller vecka inte är samma så ska du skriva ut det igen !

Medlem sedan dec. 2001132 inlägg
#9

nu ser koden ut såhär: (vet inte riktigt om det borde fungera)

<%
set mincon =Server.CreateObject("ADODB.Connection")
set rs = server.createobject("ADODB.Recordset")
mincon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("kalasmannen\db\nyponet.mdb")
SQL = "SELECT * from handelser order by Vecka asc"
rs.Open SQL, mincon

Do while Not rs.EOF
%>
<body bgcolor="#9BB960" text="#FFFFFF">
<table width="220" border="0" cellspacing="0" cellpadding="0">
  <tr> 
    <td><font face="Tahoma, Arial" size="2"><b>Vecka <%=rs("Vecka")%></b></font></td>
  </tr>
  <tr> 
    <td><font face="Tahoma, Arial" size="2"></font></td>
  </tr>
<% 
do while not rs.EOF
SQL = "SELECT * from handelser order by dag asc where Vecka = rs('Vecka')"

%>
  <tr> 
    <td><font face="Tahoma, Arial" size="2"><b><%=rs("Dag")%></b></font></td>
  </tr>
  <tr> 
    <td><img src="pics/linefill.gif" width="220" height="10"></td>
  </tr>
  <tr> 
    <td><font face="Tahoma, Arial" size="2"><b><%=rs("Rubrik")%></b></font></td>
  </tr>
  <tr> 
    <td><font face="Tahoma, Arial" size="2"><%=rs("Beskrivning")%></font></td>
  </tr>
  <tr>
    <td><img src="pics/linefillwhite.gif" width="220" height="10"></td>
  </tr>
rs.MoveNext
Loop
</table>
rs.MoveNext
Loop

och felmeddelandet blir:

Microsoft VBScript compilation error '800a03fb' 

Expected 'Loop' 

/kalasmannen/nypontest/handelser.asp, line 34

och rad 34 är:

    <td><font face="Tahoma, Arial" size="2"><%=rs("Beskrivning")%></font></td>

-raden...

Medlem sedan dec. 2001132 inlägg
#10

hur ska jag då ändra min kod?

Medlem sedan feb. 20022 594 inlägg
#11

Förstår inte riktigt hur du tänkt när du gjort det där...

Vad ska denna rad göra:

SQL = "SELECT * from handelser order by dag asc where Vecka = rs('Vecka')"

En SQL-sträng sådär är ju som vilken sträng som helst. Du måste lägga det i ett recordset för att kunna hämta poster.

Såhär skulle den kunna se ut:

SQL = "SELECT * from handelser where Vecka = "& rs("Vecka") &" order by dag asc "

Men du måste som sagt exekvera den för att kunna hämta poster. Du kan heller inte ha samma namn på dina recordsets om de arbetar i varann så att säga.

Medlem sedan dec. 2001132 inlägg
#12

ok...
men hur löser jag det då? att inte ha samma namn på mina rs?
ska jag öppna databasen 2 gånger då eller?
*känner sig dum*
och vart ska jag använda

Select Vecka, Dag, Rubrik, Beskrivning from tabell order by Vecka, Dag

?

Medlem sedan maj 200180 inlägg
#13

Du får väl öppna recsetet med den sql-strängen du fått innan sen kanske det kan funka med något sådant här, har inte testat detta utan skriver den bara från huvudet, detta kanske inte blir helt korrekt kod heller.

vecka = ""
dag = ""

Do Until rs.eof
  If vecka <> rs("vecka") Then
    vecka = rs("vecka")
    Response.Write rs("vecka") & "<br>"
  End If
  If dag <> rs("dag") Then
    dag = rs("dag")
    Response.Write rs("dag") & "<br>"
  End If
  Response.Write rs("Rubrik") & "<br>"
  Response.Write rs("Beskrivning") & "<br>"
Loop

Som jag sa innan så har jag inte en aning om det funkar, hoppas kan man ju alltid.

Medlem sedan dec. 2001132 inlägg
#14

nu ser koden ut så här (bara testkod):

<%
set mincon =Server.CreateObject("ADODB.Connection")
set rs = server.createobject("ADODB.Recordset")
mincon.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\kalasmannen\db\nyponet.mdb")
SQL = "Select Vecka, Dag, Rubrik, Beskrivning from handelser order by Vecka, Dag"
rs.Open SQL, mincon

vecka = ""
dag = ""

Do Until rs.eof
  If vecka <> rs("Vecka") Then
    vecka = rs("Vecka")
    Response.Write "<b>Vecka " & rs("Vecka") & "</b><br>"
  End If
  If dag <> rs("Dag") Then
    dag = rs("Dag")
    Response.Write "<b>" & rs("Dag") & "</b><br>"
  End If
  Response.Write rs("Rubrik") & "<br>"
  Response.Write rs("Beskrivning") & "<br>"
Loop
%>

men då ser resultatet ut såhär:

vecka 41

måndag

hockey

vi ska spela en massa hockey

hockey

hockey

hockey

hockey

hockey

hockey

och "hockey" 45 gånger till.

koden visar bara den sista posten i databasen och uprepar den rubriken 50 gånger. sidan tar även mycket lång tid att ladda även när jag hostar på min egen dator.
hur ska den korrekta koden se ut?

Medlem sedan maj 200180 inlägg
#15

det var ju ganska mysko faktiskt. Jag vet inte redigt vad det kan vara fel på, troligen så är det min logik.

Medlem sedan dec. 2001132 inlägg
#16

jo, jag misstänker fel på loopen :)
mycket verkar fattas, tex en "next" "grej".
nån har nått förslag på en korrekt loop?
o tack för hjälpen föresten...

Medlem sedan dec. 20002 526 inlägg
#17

kan du inte gora nagot sant har?

N = N + 1
do until rs.eof or N = 1
'kod....
rs.movenext
loop

eller jag vet inte.... :r

Medlem sedan dec. 2001132 inlägg
#18

jo...
men ska jag bara skriva Response.Write rs("vecka") osv. där du skrivit kod?

Medlem sedan dec. 20002 526 inlägg
#19

ja...

Medlem sedan dec. 2001132 inlägg
#20

detta kan ju inte stämma:

N = N + 1
do until rs.eof or N = 1

N är ju redan 1 så loopen startar aldrig..

257 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)