webForumDet fria alternativet

loopa ut 3 i taget från mysql databas

ASP

4 svar · 669 visningar · startad av noshornin

Medlem sedan aug. 2008815 inlägg
Frågan#1

Jag har en mysql databas med 2 fält. Ett fält som innehåller en länk till en bild och ett fält som innehåller text som ska stå under bilden.

Jag har också en table med 3 kolumner.
Jag vill loopa ut 3 bilderna från databasen till de tre kolumnerna. Sen vill jag skapa en ny rad och loopa ut texten till de 3 ovanstående bilderna.

jag har skrivit en klumpig och ful kod som dessutom inte fungerar ordentligt:

i = 0
while (not rs.EOF)
i = i+1
if i > 3 or  rs.EOF Then
i=0
Response.write("</tr>")
Response.write("<tr>")
Response.write("<td>"& firstString &"</td> <td>"& secondString &"</td> <td>"& thirdString &"</td> ")
Response.write("</tr>")
Response.write("<tr>")
End if

if i = 1 Then
firstString = rs.fields(1).value 
End if

if i = 2 Then
secondString = rs.fields(1).value 
End if

if i = 3 Then
thirdString = rs.fields(1).value 
End if

Response.write("<td><img src='"&rs.fields(0).value&"' height='142' idth='100'></a></td>")

rs.MoveNext
   wend

hoppas någon fattar vad jag menar och kan hjälpa mig! Sen undrar jag om man kan använda namnen på fälten i databasen - som man gör med access databaser - istället för "rs.fields(0).value"!

Medlem sedan okt. 2007446 inlägg
#2

det där ser överdrivet rörigt ut

ett betydligt enklare sätt här borde vara att använda getRows
http://www.aspdev.org/articles/asp-getrows/

Då kan man stega runt lite i resultatet så att man tex kan skriva ut en lista på alla bilder först, och sen bara plocka ut bildtexterna för sig

tricket är att skriva en loop som håller sig mellan 0 och antalet poster samt stegar fram "3 poster i taget"

Medlem sedan aug. 2008815 inlägg
#3

tack för svaret!
Exakt vad jag behövde!
Men hur stegar man fram "3 poster i taget" i asp? Jag har letat lite på google men har inte hittat hur man gör!

Medlem sedan aug. 2008815 inlägg
#4

jag hittade inget sätt att öka en for loop med 3 itaget så jag skrev följande istället:

counter = 0
while counter <= RowsInLeet

For icounter= 0 to 2
Response.write("<td><img src='"&arrLeet(1,counter+icounter)&"'></td>")
Next

Response.write("</tr><tr>")

For icounter= 0 to 2
Response.write("<td>"&arrLeet(0,counter+icounter)&"</td>")
Next

Response.write("</tr><tr>")
counter = counter+3
Wend

Men problemet är att om det inte finns 3, 6, 9 poster utan kanske 5 poster så får jag felmeddelandet "Subscript out of range" Någon ide på hur man kan förhindra detta?

Medlem sedan aug. 2008815 inlägg
#5

Jag lade in 2 if satser och fick det att funka!

<%
set myConn = createobject("ADODB.Connection") 
myConn.open "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=******; UID=*****; PWD=*****"
set myRS=Server.CreateObject("ADODB.recordset")

strEventSQL = "SELECT text, bildLink FROM Leet"
set RS = myConn.Execute (strEventSQL)

If Not rs.EOF Then
' Gets all the records
arrLeet = rs.GetRows()
End If

Set rs = Nothing
myConn.Close
Set myConn = Nothing

' Retrieve the total # of rows
RowsInLeet = ubound(arrLeet,2)
%>
counter = 0
while counter <= RowsInLeet

For icounter= 0 to 2
if counter+icounter <= RowsInLeet
Response.write("<td><img src='"&arrLeet(1,counter+icounter)&"'></td>")
End if
Next

Response.write("</tr><tr>")

For icounter= 0 to 2
if counter+icounter <= RowsInLeet
Response.write("<td>"&arrLeet(0,counter+icounter)&"</td>")
End if
Next

Response.write("</tr><tr>")
counter = counter+3
Wend
251 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
117 ms — ändringar (db)