webForumDet fria alternativet

Hjälp med For loop

ASPur ASP

10 svar · 217 visningar · startad av Jörgen HP

Medlem sedan feb. 20012 412 inlägg
Frågan#1

Tja WF!

Sitter och änrar alla mina loopar till mitt forum mot Getrows istället, det går ju fortare har det konstaterat. Har stött på klabberi om det inte finns några poster som matchar hämtningen.


<%
For I = 0 To UBound(arrSearch,2)

Username = arrSearch(0,I)
Ename = arrSearch(1,I)
Fname = arrSearch(2,I)
Profil = arrSearch(3,I)
Subject = arrSearch(4,I)
Comment = arrSearch(5,I)
MessId = arrSearch(6,I)
dteDate = arrSearch(7,I)

Dim color
Dim counter
counter = counter + 1
If counter Mod 2 = 0 then
color = "#d1d1a3"
Else
color = "#CACAA4"
End If

If I = UBound(arrSearch,2) Then Exit For

Response.Write "<tr bgcolor=""#CCCC99""><td bgcolor=""#d1d1a3"" colspan=""3""><p><font color=""#333333"" face=""verdana"" size=""-1"">Tyvärr, inga matchande inlägg</font></p></td></tr>"

Else
     
Response.Write "<tr bgcolor=""" & color & """>" & _
        
"<td width=""171""><p><font color=""#333333"" face=""verdana"" size=""-2"">" & _
"<strong><a href=""viewmsg.asp?MessId="&MessId&""">" & _
" " & Subject & "</a></strong></p></td><td width=""105""><p><font color=""#333333"" face=""verdana"" size=""-2"">" & Username & "</font></p></td> " & _
"<td width=""112""><p align=""center"">" & SweDateLong(dteDate) & "  </p></td>" & _
      "</tr>"

Next
End If

%>

Normalt skriver man ju If RS.EOF Then
Respnse.Write "Det fanns inga poster" men hur skriver man när man hämtar det i en array? Gjorde ett strongt försök ovan, men får felmess:


Microsoft VBScript compilation error '800a03fc' 

Expected 'Next' 

/login/forumsearch.asp, line 156 

Else

mvh Jörgen

------------------
*** Var går gränsen mellan långa kortbyxor och korta långbyxor? ***

Medlem sedan dec. 200012 464 inlägg
#2

Du kan väl först testa om rs.eof är falskt och enbart då anropa getrows, dvs

<%
If rs.eof then

Response.Write "<tr bgcolor=""#CCCC99""><td bgcolor=""#d1d1a3"" colspan=""3""><p><font color=""#333333"" face=""verdana"" size=""-1"">Tyvärr, inga matchande inlägg</font></p></td></tr>"

Else
arrSearch = rs.getrows()
For I = 0 To UBound(arrSearch,2)

Username = arrSearch(0,I)
Ename = arrSearch(1,I)
Fname = arrSearch(2,I)
Profil = arrSearch(3,I)
Subject = arrSearch(4,I)
Comment = arrSearch(5,I)
MessId = arrSearch(6,I)
dteDate = arrSearch(7,I)

Dim color
Dim counter
counter = counter + 1
If counter Mod 2 = 0 then
color = "#d1d1a3"
Else
color = "#CACAA4"
End If

Response.Write "<tr bgcolor=""" & color & """>" & _

"<td width=""171""><p><font color=""#333333"" face=""verdana"" size=""-2"">" & _
"<strong><a href=""viewmsg.asp?MessId="&MessId&""">" & _
" " & Subject & "</a></strong></p></td><td width=""105""><p><font color=""#333333"" face=""verdana"" size=""-2"">" & Username & "</font></p></td> " & _
"<td width=""112""><p align=""center"">" & SweDateLong(dteDate) & " </p></td>" & _
"</tr>"

Next
End If

%>

------------------
essentitia preter non sans multiplicandum

Medlem sedan feb. 20012 412 inlägg
#3

hmm, nu måste jag missat något. Anledningen till Getrows(), var väl att slippa skapa ett extra recset förutom det som finns i bakgrunden så att säga. Samt att kunna stänga kopplingen med databasen så fort som möjligt.
Har gjort så här nu:


strSQL = "SELECT p.req_Username, p.req_Ename, p.req_Fname, p.req_Profil, " & _
"d.Subject, d.Comment, d.MessId, d.Date " & _
"FROM Debatt d " & _
"INNER JOIN Profil p " & _
"on d.AnvId = p.AnvId " & _
"where req_Username Like '%" & FixaTecken(Request.form("keyword")) & "%' and orgthread=true " & _
"or req_Ename Like '%" & FixaTecken(Request.form("keyword")) & "%' and orgthread=true " & _
"or req_Fname Like '%" & FixaTecken(Request.form("keyword")) & "%' and orgthread=true " & _
"or req_Profil Like '%" & FixaTecken(Request.form("keyword")) & "%' and orgthread=true " & _
"or Subject Like '%" & FixaTecken(Request.form("keyword")) & "%' and orgthread=true " & _
"or Comment Like '%" & FixaTecken(Request.form("keyword")) & "%' and orgthread=true "
strConn = "DSN="
Set objConn = Server.CreateObject("ADOdb.Connection")
objconn.Open strConn
arrSearch = objConn.Execute(strSQL).GetRows()
objConn.Close()
Set objConn = Nothing

Skapar jag ett recset också blir det väl lite kaka på kaka eller? Hur menar du att man bör göra?

mvh Jörgen

------------------
*** Var går gränsen mellan långa kortbyxor och korta långbyxor? ***

Medlem sedan feb. 20012 412 inlägg
#4

Har jag fattat rätt om jag skriver så här istället?


strConn = "DSN="

Set objConn = Server.CreateObject("ADODB.Connection")

objConn.Open strConn
		
strSQL = "SELECT p.req_Username, p.req_Ename, p.req_Fname, p.req_Profil, " & _
"d.Subject, d.Comment, d.MessId, d.Date " & _
"FROM Debatt d " & _
"INNER JOIN Profil p " & _
"on d.AnvId = p.AnvId " & _
"where req_Username Like '%" & FixaTecken(Request.form("keyword")) & "%' and orgthread=true " & _
"or req_Ename Like '%" & FixaTecken(Request.form("keyword")) & "%' and orgthread=true " & _
"or req_Fname Like '%" & FixaTecken(Request.form("keyword")) & "%' and orgthread=true " & _
"or req_Profil Like '%" & FixaTecken(Request.form("keyword")) & "%' and orgthread=true " & _
"or Subject Like '%" & FixaTecken(Request.form("keyword")) & "%' and orgthread=true " & _
"or Comment Like '%" & FixaTecken(Request.form("keyword")) & "%' and orgthread=true "

Set objRS = objConn.Execute(strSQL)

If Not objRS.EOF Then
				arrSearch = objRS.GetRows()
				
			End If
				
			objRS.Close
		Set objRS = Nothing
			
		objConn.Close
	Set objConn = Nothing

If objRS.EOF then
Response.Write "<tr bgcolor=""#CCCC99""><td bgcolor=""#d1d1a3"" colspan=""3""><p><font color=""#333333"" face=""verdana"" size=""-1"">Tyvärr, inga matchande inlägg</font></p></td></tr>"

Else
For I = 0 To UBound(arrSearch,2)

Username = arrSearch(0,I)
Ename = arrSearch(1,I)
Fname = arrSearch(2,I)
Profil = arrSearch(3,I)
Subject = arrSearch(4,I)
Comment = arrSearch(5,I)
MessId = arrSearch(6,I)
dteDate = arrSearch(7,I)

Dim color
Dim counter
counter = counter + 1
If counter Mod 2 = 0 then
color = "#d1d1a3"
Else
color = "#CACAA4"
End If

Response.Write "<tr bgcolor=""" & color & """>" & _

"<td width=""171""><p><font color=""#333333"" face=""verdana"" size=""-2"">" & _
"<strong><a href=""viewmsg.asp?MessId="&MessId&""">" & _
" " & Subject & "</a></strong></p></td><td width=""105""><p><font color=""#333333"" face=""verdana"" size=""-2"">" & Username & "</font></p></td> " & _
"<td width=""112""><p align=""center"">" & SweDateLong(dteDate) & " </p></td>" & _
"</tr>"

Next
End If

mvh Jörgen

------------------
*** Var går gränsen mellan långa kortbyxor och korta långbyxor? ***

[Redigerat av jorgen den 17 jun 2001]

[Redigerat av jorgen den 17 jun 2001]

[Redigerat av jorgen den 17 jun 2001]

Medlem sedan dec. 200012 464 inlägg
#5

Jo, även om du skriver

arrSearch = objConn.Execute(strSQL).GetRows()

så skapas ett recordset. Tidsvinsten med getrows ligger i att man ersätter de databasanrop, som movenext ger upphov till, med ett enda.

------------------
essentitia preter non sans multiplicandum

Medlem sedan feb. 20012 412 inlägg
#6

Okey, om jag skriver som i mitt första exempel:


arrSearch = objConn.Execute(strSQL).GetRows()

Var kommer RS in i bilden, jag måste ju skapa något som heter RS innan jag kan använda det.

mvh jörgen, som är mkt förvirrad just nu!

------------------
*** Var går gränsen mellan långa kortbyxor och korta långbyxor? ***

Medlem sedan dec. 200012 464 inlägg
#7

Om du skriver på det sättet så borde du kunna testa med

if ubound(searcharr,2) = 0 then
  'inga rader funna
else
for i = 0 to ubound(searcharr,2)
...
next
end if

------------------
essentitia preter non sans multiplicandum

Medlem sedan feb. 20012 412 inlägg
#8

Thanx! Nu hajar jag bättre :-)

mvh Jörgen

------------------
*** Var går gränsen mellan långa kortbyxor och korta långbyxor? ***

Medlem sedan feb. 20012 412 inlägg
#9

Hej!

Det blev inte riktigt bra, söker jag på ngt som inte finns får jag felmeddelandet:

ADODB.Recordset.1 error '800a0bcd'

Either BOF or EOF is True, or the current record has been deleted; the operation requested by the application requires a current record.

/login/forumsearch.asp, line 26

Rad 26 är denna:

arrSearch = objConn.Execute(strSQL).GetRows()

mvh Jörgen

------------------
*** Var går gränsen mellan långa kortbyxor och korta långbyxor? ***

[Redigerat av jorgen den 17 jun 2001]

Medlem sedan dec. 200012 464 inlägg
#10

Det verkar som om getrows inte fungerar på ett tomt recordset. Du får nog dela upp det i separata anrop (som i mitt första förslag).

------------------
essentitia preter non sans multiplicandum

Medlem sedan feb. 20012 412 inlägg
#11

Hej igen...

Skrev så här och det funkar, är det något i denna koden jag kan förändra till det bättre? Vill nämligen lära mig korrekt nu och lämna webstudiokod bakom mig *flin*

mvh Jörgen


strSQL = "SELECT p.req_Username, p.req_Ename, p.req_Fname, p.req_Profil, " & _
"d.Subject, d.Comment, d.MessId, d.Date " & _
"FROM Debatt d " & _
"INNER JOIN Profil p " & _
"on d.AnvId = p.AnvId " & _
"where req_Username Like '%" & FixaTecken(Request.form("keyword")) & "%' and orgthread=true " & _
"or req_Ename Like '%" & FixaTecken(Request.form("keyword")) & "%' and orgthread=true " & _
"or req_Fname Like '%" & FixaTecken(Request.form("keyword")) & "%' and orgthread=true " & _
"or req_Profil Like '%" & FixaTecken(Request.form("keyword")) & "%' and orgthread=true " & _
"or Subject Like '%" & FixaTecken(Request.form("keyword")) & "%' and orgthread=true " & _
"or Comment Like '%" & FixaTecken(Request.form("keyword")) & "%' and orgthread=true "
strConn = "DSN="
Set objConn = Server.CreateObject("ADOdb.Connection")
objconn.Open strConn
set rs = objConn.Execute(strSQL)

If rs.eof then
Response.Write "<tr bgcolor=""#CCCC99""><td bgcolor=""#d1d1a3"" colspan=""3""><p><font color=""#333333"" face=""verdana"" size=""-1"">Tyvärr, inga matchande inlägg</font></p></td></tr>"

Else
arrSearch = rs.getrows()

objConn.Close()
Set objConn = Nothing

For I = 0 To UBound(arrSearch,2)

Username = arrSearch(0,I)
Ename = arrSearch(1,I)
Fname = arrSearch(2,I)
Profil = arrSearch(3,I)
Subject = arrSearch(4,I)
Comment = arrSearch(5,I)
MessId = arrSearch(6,I)
dteDate = arrSearch(7,I)

Dim color
Dim counter
counter = counter + 1
If counter Mod 2 = 0 then
color = "#d1d1a3"
Else
color = "#CACAA4"
End If

Response.Write "<tr bgcolor=""" & color & """>" & _

"<td width=""171""><p><font color=""#333333"" face=""verdana"" size=""-2"">" & _
"<strong><a href=""viewmsg.asp?MessId="&MessId&""">" & _
" " & Subject & "</a></strong></p></td><td width=""105""><p><font color=""#333333"" face=""verdana"" size=""-2"">" & Username & "</font></p></td> " & _
"<td width=""112""><p align=""center"">" & SweDateLong(dteDate) & " </p></td>" & _
"</tr>"

Next
End If

------------------
*** Var går gränsen mellan långa kortbyxor och korta långbyxor? ***

[Redigerat av jorgen den 18 jun 2001]

134 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)