webForumDet fria alternativet

Dela utskrift från databas i tre kolumner (tabell)

ASP

4 svar · 323 visningar · startad av peppar

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

Jag skriver ut en lista från en databas ungefär efter LeonLs beskrivning i denna tråden. Koden ser ut ungefärsåhär:

sql = "select * from medlemsregister order by usrEfternamn asc "
	set rs = conndb1.execute(sql)
   	strPreviousLetter = ""
	do until rs.eof
		if uCase(left(rs("usrEfternamn"), 1)) <> strPreviousLetter then
			strPreviousLetter = ucase(left(rs("usrEfternamn"), 1))     
			response.write("<b>" & strPreviousLetter & "</b><br />")
		End If
	   	response.write "<a href=""olle.asp?usrID="&rs("usrID")&""" >"&rs("usrEfternamn") &", "& rs("usrFornamn") &"</a><br />"
	
	rs.movenext

Nu skulle jag vilja dela upp utskriften i tre kolumner, lista är inte statisk utan posterna som skall skriva ut kommer att öka i mängd.

jag vill skriva ut i denna ordningen. Skall man räkna igenom antalet poster och dela med tre och sedan bryta för ny kolumn där det procentuellt är en tredjedel?

1 5 9
2 6 10
3 7 11
4 8 12

Medlem sedan dec. 2001873 inlägg
#2

Jag gjorde så att jag skriver ut A-I i kolumn ett, J-P i kolumn två Q-Ö i kolumn tre, såhär:

for j = 81 to 90
do while chr(j) = ucase(left(rs("usrEfternamn"), 1)) or chr(197) = ucase(left(rs("usrEfternamn"), 1)) or chr(196) = ucase(left(rs("usrEfternamn"), 1)) or chr(214) = ucase(left(rs("usrEfternamn"), 1))

det går ju jättebra tills jag skall skriva ut Ö.
då får jag felmeddelande: Undantag inträffade på do while raden...? Är den för lång?`Tar jag bort dom andra (ÅÄ) så skriver den inte ut ändå...

Medlem sedan dec. 2001873 inlägg
#3

Jag börjar närma min min lösning nu. Men det stämmer inte riktigt i slutet på utskriften, den skriver ut till V (enkel v) sedan stoppar den? Mysko? Den borde ju skriva ut ända till Z. Vad kan det vara som går fel...? Hjälp mig! :(

Jag bifogar en bild på hur det ser ut när utskriften är klar. Såhär ser koden ut som skriver ut sista kolumnen:

1 strPreviousLetter = "" 
2	for j = 82 to 90
3		'response.write chr(j) &" "& ucase(left(rs("usrEfternamn"), 1))
4		do while chr(j) = ucase(left(rs("usrEfternamn"), 1)) 'or chr(197) = ucase(left(rs("usrEfternamn"), 1)) or chr(196) = ucase(left(rs("usrEfternamn"), 1)) or
4       chr(214) = ucase(left(rs("usrEfternamn"), 1)) 
5		
6			if rs("usrID") <> z then response.write "<br>"
7			z = rs("usrID")
8			if not q = rs("usrID") then
9				If UCase(Left(RS("usrEfternamn"), 1)) <> strPreviousLetter Then
10					strPreviousLetter = UCase(Left(RS("usrEfternamn"), 1))     
11	  				Response.Write("<b>" & strPreviousLetter & "</b><br />")
12				End If
13		response.write "<span class=""style1"">" & rs("usrFornamn") &" "& rs("usrEfternamn") &" <b>"& ucase(left(rs("med_kategorier.usr_kategori"),1)) &"</b</span>"
14			else
15				response.write "<span class=""style1""><b>"& ucase(left(rs("med_kategorier.usr_kategori"),1)) &"</b></span>"
16			end if
17			q = rs("usrID")
18		
19	rs.movenext
20	 loop
21	next

SQLen som används ser ut såhär:

"SELECT"&_
" medlemsregister.*, med_origin.*, med_kategorier.*, *"&_
" FROM"&_
" ((medlemsregister INNER JOIN"&_
" med_origin ON medlemsregister.usrId = med_origin.usr_USRORIGIN)"&_
" LEFT OUTER JOIN"&_
" med_kategorier ON med_origin.usr_KATEGORI = med_kategorier.usr_KATID)"&_
" WHERE usrID <> "& dummy &" ORDER BY usrEfternamn ASC"
kolumner.jpg
Medlem sedan dec. 2001873 inlägg
#4

Om jag bockar bort apostrofen på rad 3 så att den skriver ut dom värden som iterationen ger så blir det såhär:

R R
S S
T T
U U
V V
W Å
X Å
Y Å
Z Å

Medlem sedan dec. 2001873 inlägg
#5

Felet berodde på att jag inte såg att det saknades relaterande poster i tabellen med_origin, och det beror på en dåligt ställd fråga mot databasen... Skall se om jag kan göra om den.

255 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)