webForumDet fria alternativet

Paging, även vid sökningar ?

ASP

8 svar · 397 visningar · startad av Observer

Medlem sedan maj 200351 inlägg
Frågan#1

Hej!

Jag har försökt få till det här med paging, som så många andra.
Jag har sökt här på webforum och inte hittat någon lösning.

Så, antingen har jag gjort fel, eller så kanske någon kan hjälpa mig att hitta en lösning...

Jo, pagingen fungerar utmärkt om jag listar en tabell med en SQL sats som den här:

	"SELECT * FROM tblMedlemmar RIGHT JOIN TblCompany ON TblCompany.Ftagkod = TblMedlemmar.Ftagkod ORDER BY tblMedlemmar.id"

Men, så fort jag blandar in lite andra sökningar så går det snett...
Vad gör jag fel ?


'============Paging
Dim intPageSize, intPage, intTotalPages, intCounter

intPageSize = 100 '## -- byt ut till hur många poster du vill ska visas per sida --

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

'## -- kontrollera så att inte intPage variabeln är tom --
If intPage = "" Then 
	intPage = 1 '## -- visa första sidan som default --
End If

ENamnSelection = Request("ENamnSelection") 
' Kan vara 1, 2 eller 3
' 1 = Börjar med, 2 = exakt, 3 = Innehåller

WildCard = Chr(37) 

StrSQL = "              SELECT * "
strSQL = strSQL & " FROM tblMedlemmar "
StrSQL = strSQL & " RIGHT JOIN TblCompany ON TblCompany.Ftagkod = TblMedlemmar.Ftagkod"	
StrSQL = strSQL & "  WHERE"
strSQL = strSQL & " tblMedlemmar.Active = 1 "

If eNamn <> "" Then
	If ENamnSelection = 1 Then
strSQL = strSQL & "AND tblMedlemmar.eNamn LIKE '" & eNamn & WildCard & "' "
	ElseIf  ENamnSelection = 2 Then
strSQL = strSQL & "AND tblMedlemmar.eNamn = '" & eNamn & "' "
	ElseIf  ENamnSelection = 3 Then
strSQL = strSQL & "AND tblMedlemmar.eNamn LIKE '" & WildCard & eNamn & WildCard & "' "
	End If	
End If
	
strSQL = strSQL & " ORDER BY tblMedlemmar.eNamn ASC, tblMedlemmar.fnamnf ASC"

With objRst
    .ActiveConnection = objConn
    .Source = StrSQL
    .PageSize = intPageSize
    .CursorType = 3
    .LockType = 1
    .Open
End With

Antal = objRst.RecordCount

Dim bgColor
bgColor = "#ECEAE6"

If NOT objRst.EOF Then

'## -- visa rätt sida i recordsetet --
objRst.AbsolutePage = intPage

'## -- hur många sidor består recordsetet av --
intTotalPages = objRst.PageCount

	Do Until objRst.EOF OR intCounter >= intPageSize
	intCounter = intCounter + 1

		  	  if bgColor = "#ECEAE6" THEN
		   	     bgColor = "#FFFFFF" 
		 	   ELSE
		  	     bgColor = "#ECEAE6"
		    	end if
%>

<Tr>
<td class=anvisn BgColor="<%=bgColor%>"><a href="Member_View.asp?id=<%= objRst("id")%>"><%= objRst("Personnummer")%></a></td>
<td class=anvisn BgColor="<%=bgColor%>"><%= objRst("AnstNr")%></td>
<td class=anvisn BgColor="<%=bgColor%>"><% InitialUpperCase(objRst("FNamnf"))%></td>
<td class=anvisn BgColor="<%=bgColor%>"><% InitialUpperCase(objRst("Enamn"))%></td>
<td class=anvisn BgColor="<%=bgColor%>"><% InitialUpperCase(objRst("Hemadress"))%></td>
<td class=anvisn BgColor="<%=bgColor%>"><%= PostNr%></td>
<td class=anvisn BgColor="<%=bgColor%>"><%= objRst("Ort")%></td>
<td class=anvisn BgColor="<%=bgColor%>"><%= objRst("TelHem")%></td>
<td class=anvisn BgColor="<%=bgColor%>"><%= objRst("Avdelning")%></td>
<td class=anvisn BgColor="<%=bgColor%>"><%= objRst("GeoPlac")%></td>
<td class=anvisn BgColor="<%=bgColor%>"><%= objRst("FtagBen")%></td>
</tr>

<%
	objRst.MoveNext
	Loop

End If
%>

<TR valign="top">
  <TD colspan="11" align="center" class=anvisn>

<%
Call PageNavigation(intPage, intTotalPages)
%>

koden till PageNavigation:


'=====================================================================================================================
Sub PageNavigation(ByVal Page, TotalPages)
    Dim strScriptName, N

    '## -- denna sidas namn --
    strScriptName = Request.ServerVariables("SCRIPT_NAME")

    '## -- länk till föregående sida --
    '## -- kontrollera att det inte är första sidan som visas --
    If CInt(Page) > 1 Then
         '## -- inte första sidan som visas så gör en länk --
        Response.Write "<A href=""" & strScriptName & "?page=" & Page - 1 & "&PersNr=" & PersNr & "   ""><img src=""/images/Pages-back.gif"" border=""0"" Align=""AbsMiddle"" ALT=""Klicka för Föregående Sida""></A> "
    Else
        '## -- det är första sidan som ska visas. gör ingen länk --
'        Response.Write "<< Föregående "
    End If

    '## -- bygg upp själva pagebaren, dvs varje sidnummer ska ha en länk
    '## -- så att besökaren snabbt kan ta sig till rätt sida --
    For N = 1 To CInt(TotalPages)
        If N <> CInt(Page) Then
            '## -- ej aktuell sida, länka --
            Response.Write "<A href=""" & strScriptName & "?page=" & N & """>" & N & "</A> "
        Else
            '## -- aktuell sida, länka ej -- 
            Response.Write "<B>" & N & "<B> "
        End If
    Next

    '## -- länk till nästa sida. om vi står på sista sidan ska den ej vara länkad --
    If CInt(Page) < CInt(TotalPages) Then
        '## -- vi är inte på sista sidan --
        Response.Write "<A href=""" & strScriptName & "?page=" & Page + 1 & "&Action=Search&PersNr=" & PersNr & "&AnstNr=" & AnstNr & "&eNamn=" & eNamn & " "">"
        Response.Write "<img src=""/images/Pages-forward.gif"" border=""0"" Align=""AbsMiddle"" ALT=""Klicka för Nästa Sida""></A>"
    Else
        '## -- vi är på sista sidan. länka ej --
'        Response.Write "Next >>"
    End If

End Sub

Säg att jag nu söker på Andersson,
då får jag 102 träffar.

100 första visas på sidan 1, som planerat. Kanon!
Men, så klickar jag på nästa sida, och då förväntar jag mig endast 2 poster.
Men då börjar listan från början igen och visar mig 3800 träffar på 39 sidor.

Hur skall jag få ordning på detta när jag använder mig av sökningar ?
(ni känner igen paging funktionen, jag har fått den härifrån...)

Har jag gjort något tokigt ?

Medlem sedan juni 200032 967 inlägg
#2

Du måste skicka med alla sökvillkoren i sidlänkarna också.

Medlem sedan maj 200351 inlägg
#3

Ja, det var det jag trodde med och gjorde så här i paging funktionen, där länkarna skrivs ut:


'## -- länk till nästa sida. om vi står på sista sidan ska den ej vara länkad --
    If CInt(Page) < CInt(TotalPages) Then
        '## -- vi är inte på sista sidan --
        [B]Response.Write "<A href=""" & strScriptName & "?page=" & Page + 1 & "&Action=Search&PersNr=" & PersNr & "&AnstNr=" & AnstNr & "&eNamn=" & eNamn & " "">"[/B]
        Response.Write "<img src=""/images/Pages-forward.gif"" border=""0"" Align=""AbsMiddle"" ALT=""Klicka för Nästa Sida""></A>"

Det är väl så du menar ?
jag trodde det skulle lösa allt...

Medlem sedan juni 200032 967 inlägg
#4

Ser länkarna riktiga ut i webbläsaren då? Hur hämtar du in värdena?

Medlem sedan maj 200351 inlägg
#5

Ja, det ser korrekt ut i alla fall:


http://www.blahblah.net/Member_List.asp?page=2&PersNr=&AnstNr=&eNamn=Andersson

Hämtar in dom så här:


	PersNr = Request.Querystring("PersNr")
	AnstNr = Request.Querystring("AnstNr")
	fNamnf = Request.Querystring("fNamnf")
	eNamn = Request.Querystring("eNamn")

Ser ok ut i mina ögon, men börjar klart tvivla på dom vid det här laget...

Medlem sedan dec. 19996 721 inlägg
#6

Kontrollera hur SQL-satsen blir. Finns eNamn etc. tillgängliga i subben som söker? Dimma utanför.

En annan sak att tänka på är att man måste URLEncode:a argumenten som ska vara med i länken.

Medlem sedan maj 200351 inlägg
#7

OK, jag testade att skriva ut min SQL sats och den ser ok ut i mina ögon:


SELECT * FROM tblMedlemmar RIGHT JOIN TblCompany ON TblCompany.Ftagkod = TblMedlemmar.Ftagkod WHERE tblMedlemmar.eNamn = 'Andersson' AND Active = 1 ORDER BY tblMedlemmar.eNamn ASC, tblMedlemmar.fnamnf ASC

Och jag lade till URLEncode när jag skriver ut länken:

Response.Write "<A href=""" & strScriptName & "?page=" & Page + 1 & "&Action=Search&PersNr=" & PersNr & "&AnstNr=" & AnstNr & "&eNamn=" & Server.URLEncode(eNamn) & " "">"

Då blir länken så här, om jag kopierar den från adressfönstret:


http://blahblah.net/Member_List.asp?page=2&PersNr=&AnstNr=&eNamn=Andersson

Rent generellt sett, är jag på rätt spår ?

:q

Medlem sedan dec. 19996 721 inlägg
#8

Observer skrev:

Rent generellt sett, är jag på rätt spår ?

:q

Helt klart

Medlem sedan maj 200351 inlägg
#9

Ahh, det var jag som var blind!

Hade inte läst in variabeln ENamnSelection
och då kunde ju inte SQL satsen funka som den skulle...

Nu funkar allt, och jag är glad igen! :birp

Tack för att ni kikade och kom med tips!

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