webForumDet fria alternativet

oändlig loop

4 svar · 272 visningar · startad av icaaq

icaaqMedlem sedan okt. 20005 273 inlägg
#1

Jag har haft en gästbok på en site i snart ett år och påden använder jag PatrikB´s paging script och i söndags gick den in i en oändlig loop, jag vet inte om det var någon annan som var inne i koden eller vad som hände men jag behöver hjälp att lösa detta snabbt ....här kommer den aktuella koden

[red]
<%
'## -- hämta alla poster --
Function getRecords
	Dim m_objConn
	Dim m_strConnString
	Dim m_strSQL
	Dim m_objRS
	Dim m_arrRecords
	
	m_strConnString = "provider=Microsoft.Jet.OLEDB.4.0;" & _
		"Data Source=c:\inetpub\data\gbok.mdb"
		
	'## -- skapa connection object och öppna upp databasen --
	Set m_objConn = Server.CreateObject("ADODB.Connection")
		m_objConn.Open m_strConnString
		
		'## -- sql-fråga för att hämta alla poster --
		'## -- denna ska du ändra så att den stämmer
		'##    med det som du vill hämta --
		m_strSQL = "SELECT f_namn, f_datum, f_mess " & _
			"FROM t_gbok " & _
			"ORDER BY f_datum DESC"
						
			'## -- recordset för att hämta alla poster --
			Set m_objRS = m_objConn.Execute(m_strSQL)
			
				If Not m_objRS.EOF Then
					m_arrRecords = m_objRS.GetRows
					getRecords = m_arrRecords
				End If
				
				'## -- clean up --
				m_objRS.Close
			Set m_objRS = Nothing
			
		m_objConn.Close
	Set m_objConn = Nothing

End Function
'## -- skriver ut sidnavigeringen --
'## -- skriv ut föregående sida --
Sub PrevPage(ByVal WichPage)
	Dim strScriptName
	strScriptName = Request.ServerVariables("SCRIPT_NAME")

	'## -- skriv ut en länk till föregående sida --
	If CInt(WichPage) > 1 Then
		Response.Write "<A href='" & strScriptName & "?" & _
			"page=" & WichPage - 1 & "'>&laquo; Föregående</A> "
	Else
		Response.Write "&laquo; Föregående "
	End If
End Sub

'## -- skriv ut nästa sida --
Sub NextPage(ByVal HowManyPages, ByVal WichPage)
	Dim strScriptName
	strScriptName = Request.ServerVariables("SCRIPT_NAME")
	
	'## -- skriv ut en länk till nästa sida --
	If CInt(WichPage) < CInt(HowManyPages) Then
		Response.Write "<A href='" & strScriptName & "?" & _
			"page=" & WichPage + 1 & "'>Nästa &raquo;</A>"
	Else
		Response.Write " Nästa &raquo;"
	End If

End Sub

'## -- skriv ut sidnummer navigeringen --
Sub PageNumbers(ByVal HowManyPages, WichPage)
	Dim strScriptName
	Dim I
	
	'## -- kolla om det finns några sidor --
	If HowManyPages = 0 Then
		Response.Write "0"
		Exit Sub
	End If
	
	strScriptName = Request.ServerVariables("SCRIPT_NAME")

	'## -- skriv ut länkar till sid nummer n. 
	'##    Den sida som visas ska ej vara länkad --
	For I = 1 To HowManyPages
		If CInt(I) <> CInt(WichPage) Then
			Response.Write "<A href='" & strScriptName & "?" & _
				"page=" & I & "'>" & I & "</A> "
		Else
			Response.Write "<B>" & I & "</B> "
		End If
	Next

End Sub

'## -- vilken post ska pagingen börja på --
Function getStartID(ByVal PageSize, ByVal ViewPage) ' As Integer
	Dim m_intStart
	m_intStart = ((PageSize * ViewPage) - PageSize)
	getStartID = m_intStart
End Function

'## -------------------------------------------------------------
'## -- räkna ut hur många sidor som ska visas --
'## -- updated: July 14, 2001
'## -- update by: Patrik Berggren, [email]mrwize@mrwize.nu[/email]
'## -------------------------------------------------------------
'##
'## -- vid vissa tillfällen returnerades fel sidantal.
'##    Felet/Buggen berodde på avrundningen med CInt()
'##    och CLng().
'## -- Avrundningen som jag gjorde:
'##
'##    m_intTotalPages = CInt((HowManyRecords / PageSize) + 0.5)
'##
'##    vart i vissa fall fel och sid antalet vart fler än 
'##    vad det egentligen skulle vara.
'##    Lösningen, hoppas jag, är att kolla hur stor resten
'##    blir vid avrundning.
'##    Om resten är större än 0 eller mindre än 0.5 så ska en sida
'##    läggas till.
'##    I annat fall så gäller avrundningen.
'##    Har testat flera olika kombinationer med olika records antal
'##    och sidstorlekar och ej hittat några buggar.
'##    Så nu hoppas jag att denna paging är buggfri *ler*
'## -------------------------------------------------------------
Function countPages(ByVal HowManyRecords, ByVal PageSize)
	Dim m_intTotalPages, m_intRest

	m_intTotalPages = HowManyRecords / PageSize

	If m_intTotalPages < 1 Then
		m_intTotalPages = 1
	Else
		m_intRest = m_intTotalPages - CLng(m_intTotalPages)
		
		If m_intRest > 0 AND m_intRest < 0.5 Then
			m_intTotalPages = CLng(m_intTotalPages) + 1
		Else
			m_intTotalPages = CLng(m_intTotalPages)
		End If
	End If

	'## -- return how many pages --
	countPages = m_intTotalPages
End Function

Dim arrRecords
Dim intPageSize
Dim intPage
Dim intStartID
Dim I
Dim intId
Dim strNamn
Dim dteDatum
Dim strMess
Dim intTotalPages
Dim intTotalRecords

'## -- vilken sida ska visas --
intPage = Request.QueryString("page")
If intPage = "" Then intPage = 1

'## -- hur många poster ska visas per sida --
intPageSize = 10

'## -- hämta alla records, hämtas med metoden getrows och returneras 
'##    som en array. --
arrRecords = getRecords

'## -- vilken post är den första --
intStartID = getStartID(intPageSize, intPage)
'*****************************************************

If IsArray(arrRecords) Then
  intTotalRecords = UBound(arrRecords,2) + 1
  		'## -- hur många sidor finns det i recordsetet --
  		intTotalPages = countPages(intTotalRecords, intPageSize)
  		With Response
		   .Write" <tr> " &vbCrLf
            .Write" <td colspan=""2""> <font size=""1"" face=""Verdana, Arial, Helvetica, sans-serif"">Totalt: <b>"&intTotalPages&"</b> sidor med <b>"&intTotalRecords &"</b> inlägg." &vbCrLf
            .Write" </font><hr noshade size=""1""></td>" &vbCrLf
          .Write" </tr>" &vbCrLf
          End With
  			'Response.Write "<P>Visar nu sida <B>" & intPage & "</B> av " & intTotalPages & "</P>"
  			For I = intStartID To ((intStartID + intPageSize) -1)
	
  				strNamn = arrRecords(0,I)
  				dteDatum = Mid(FormatDateTime(arrRecords(1,I),1),5)&" Kl:"&FormatDateTime(arrRecords(1,I),4)
  				strMess = arrRecords(2,I)
  				 With Response
				.Write" <tr> "& vbCrLf
				.Write" <td bgcolor=""#EBD8D8""><font face=""Verdana, Arial, Helvetica, sans-serif"" size=""1""><b>"&strNamn&"</b></font></td>"& vbCrLf
				.Write" <td width=""50%"" bgcolor=""#EBD8D8""><font face=""Verdana, Arial, Helvetica, sans-serif"" size=""1"">"&dteDatum&"</font></td>"& vbCrLf
				.Write" </tr>"& vbCrLf
				.Write" <tr valign=""top""> "& vbCrLf
				.Write" <td colspan=""2"" height=""50"" bgcolor=""#F7EEEE""><font face=""Verdana, Arial, Helvetica, sans-serif"" size=""1"">"&wfParser.Parse(strMess)&"</font></td>"& vbCrLf
				.Write" </tr>"& vbCrLf
				End With		
			If I = UBound(arrRecords,2) Then Exit For
			Next
Else
	'## -- inga poster fanns i db --
	intPage = 0
	intTotalRecords = 0
	intTotalPages = 0
	
	'## -- skriv ut att inga poster hittades --
				With Response 
				.Write"<tr> "& vbCrLf
				.Write"<td colspan=""2"" bgcolor=""#EBD8D8""><font face=""Verdana, Arial, Helvetica, sans-serif"" size=""1"">Det finns inga inl&auml;gg...........</font></td>"& vbCrLf
				.Write"</tr>"& vbCrLf
				End With
End If
			With Response
          .Write"<tr> "& vbCrLf
            .Write"<td colspan=""2""> "& vbCrLf
              .Write"<hr noshade size=""1""> "& vbCrLf
            .Write"</td> "& vbCrLf
          .Write"</tr> "& vbCrLf
          .Write"<tr> "& vbCrLf
            .Write"<td colspan=""2""> "& vbCrLf
              .Write"<font face=""Verdana, Arial, Helvetica, sans-serif"" size=""1"">"
              End With
				Call PrevPage(intPage)
				Response.Write " | "

				Call NextPage(intTotalPages,intPage)

				Response.Write "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Totalt: "&intTotalPages
				Response.Write " sidor med "&intTotalRecords &" inlägg." &vbCrLf
'***********************************************************************************
[/red]

kan ni se nått fel....

mvh icaaq

doggelitoMedlem sedan juni 20003 076 inlägg
#2

Jag använder också hans kod och ser inget fel.
Vad händer om du skriver fasta värden i for-loopen?

For I = 1 To 5
icaaqMedlem sedan okt. 20005 273 inlägg
#3

DEt konstiga är att koden funkar hemma(lokalt) men så fort jag lägger upp den på hotellet så hänger den sig.......

Hur ser man vilken MDAC man använder?

doggelitoMedlem sedan juni 20003 076 inlägg
#4

lägg till under denna: :)

Set m_objRS = m_objConn.Execute(m_strSQL)
response.Write m_objConn.Version

/red raden behöver inte ligga där, du kan lägga den direkt under öppningen av connectionobjektet.

icaaqMedlem sedan okt. 20005 273 inlägg
#5

Jag vet inte vad som var fel men jag reparerade databasen och sen funkade allt som det skulle igen......

tack ändå, icaaq

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