webForumDet fria alternativet

Uppdela sidorna (som i FAQ:en)

ASP

17 svar · 233 visningar · startad av Pudolf

Medlem sedan juli 2000221 inlägg
Frågan#1

Hej
På min hemsida så har jag en söksida. Nu så visas alla funna sökningar på samma sida, men jag skulle vilja att det endast visades 20 st/per sida. Om resultatet blir fler än 20 så delas det upp på 2 sidor osv... Precis som i exemplet på FAQ-sidan.

Men jag förstår inte riktigt hur jag ska implentera in det i min kod, så jag undrar om någon kan hjälpa mig?

Här är koden, obs: jag tog bort lite långa kodrader som jag tror ändå inte är så viktiga i sammanhanget.

<%
SQL = "SELECT * FROM Tabellen WHERE rubrik LIKE '%" & Replace(Trim(Request.Form("Search")), "'", "''") & "%' ORDER BY datum Desc, tid Desc "
Set RS = Connection.Execute(SQL)
%>
<%

If RS.EOF Then

'############# FALSK TABELL ##########
response.write "<table width='580' border='0' cellspacing='0' cellpadding='0'><td>"
response.write "tyvärr, ingen fanns på det sökordet"
response.write "</td></table>"

Else

'TABELL
response.write "<table width='400' border='0' cellspacing='0' cellpadding='0'>"

On Error Resume Next

while not RS.eof

'## HÄR HÄMTAR JAG UT LITE VÄRDEN FRÅN DATABASEN, T EX RUBRIK.
response.write "" & RS("format") & ""

RS.movenext

'## HÄR HÄMTAR JAG UT LITE VÄRDEN FRÅN DATABASEN, T EX RUBRIK.
response.write "" & RS("format") & ""

RS.movenext
wend

response.write "</table>"

End If
%>

En sak som skulle vara kul är oxo att det visas t ex såhär:

Sida: 1 av 3 (1-2-3)
' Där dess siffror är direktlänkar till sina respektive sidor.

Och nedanför texten.
Föregående | Nästa
' En kul grej vore oxo om Nästa knappen är ljusgrå, istället för länk, om det inte finns någon "nästa-sida" likadant med föregående-knappen.

Vore oerhört tacksam om någon hjälpte mig med detta. Har försökt med den versionen i FAQ:en, men lyckas aldrig :(

Tacksam för svar!
MvH Pudolf

Medlem sedan mars 20002 836 inlägg
#2

Hello,

kolla in wFScript: PageNavigation

cya

------------------
'*********************
Response.Write("PatrikB")
Response.End
'*********************

Medlem sedan juli 2000221 inlägg
#3

Hej!

Tack för koden! Men jag stötte på lite problem., får nämligen upp felmeddelandet:

Microsoft VBScript compilation error '800a0400' 

Expected statement 

/sok.asp, line 246 

With objRS
^

Jag kopierade din kod från kodsidan och lade in på min söksida. dessa koder lade jag upp:

HÖGST UPP PÅ SIDAN...

<%
Sub PageNavigation(nPage, nTotPages)
Dim strScriptName	' AS String
Dim I				' AS Integer
strScriptName = Request.ServerVariables("SCRIPT_NAME")
' If not first page, then show previous
'--------------------------------------
If CInt(nPage) <> 1 Then
Response.Write("<a href=""" & strScriptName & "?" & _
"page=" & nPage - 1 & """>Föregående</a> - ")
End If	' end previous
' loop through total pages and create links	
' to all pages in recordset	
'------------------------------------------
For I = 1 TO nTotPages
If CInt(I) <> CInt(nPage) Then
Response.Write("<a href=""" & strScriptName & "?" & _
"page=" & I & """>" & I & "</a> ")
Else 
Response.Write "<b>[" & I & "]</b> "
End If
Next	' next page
' If Not current page is the last page	
' then show next page	
'-------------------------------------
If CInt(nPage) <> CInt(nTotPages) Then
Response.Write(" - <a href=""" & strScriptName & "?" & _
"page=" & nPage + 1 & """>Nästa</a>")
End If	' end next page
End Sub
%>

UNDER DETTA SKREV JAG IN QUERYSTRING-GREJEN...

<%
intPage = Requet.QueryString("page")
If intPage = "" Then intPage = 1
%>

SEDAN LITE LÄNGRE NED PÅ SIDN...

<%
strSQL = "SELECT * FROM Tabell WHERE rubrik LIKE '%" & Replace(Trim(Request.Form("Search")), "'", "''") & "%' ORDER BY datum Desc, tid Desc "
Set objRS = Server.CreateObject("ADODB.Recordset")

With objRS
.CacheSize = 5
.PageSize = 10
.Open strSQL, objConn, 3, 1
.AbsolutePage = intPage
.PageSize = 10

End With
intCount = objRS.RecordCount
intTotPages = objRS.PageCount

If Not objRS.EOF Then
Do Until objRS.EOF or nRecCount >= objRS.PageSize
Response.Write "<b>" & objRS(0) & "</b><br>"
nRecCount = nRecCount + 1
objRS.MoveNext

Loop			
End If

objRS.Close		
Set objRS = nothing
%>

----
Här visas posterna upp med hjälp av koden från grundinlägget
---

OCH SEDAN DÄR SIDNAVIGERINGEN SKA VARA...

<%
Call PageNavigation(intPage, intTotPages)
%>

Ja, det var nog allt. Vet någon vad jag gjort fel? Vore oehört tacksam för svar!

/MvH Pudolf

Medlem sedan juli 2000221 inlägg
#4

kan det vara så att jag lagt kodbitarna på fel ställen? (PatrikB kanske vet?)

Tacksam för svar
/MvH Pudolf

Medlem sedan mars 20002 836 inlägg
#5

Hello,

ser rätt ut.
En sak som ställer till det är nog detta:

With objRS etc.

Att använda With går endast om man har VBScript Engine 5.x installerad på servern.

Prova med att ta bort With objRS och lägg till objRS framför varje punkt som finns ned till End With

så här:

objRS.CacheSize = 5
objRS.PageSize = 10
objRS.Open ....
etc.

cya,

------------------
'*********************
Response.Write("PatrikB")
Response.End
'*********************

Medlem sedan juli 2000221 inlägg
#6

Hej,

tack för svaret, antagligen har servern inte VBScript Engine 5.x, så jag tog bort With-prylarna. Men då blev det ett nytt problem :(

Det tycks vara ngt fel med Rad 249..

ADODB.Recordset error '800a0bb9' 

Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another. 

/sok.asp, line 249

Jag har ingen aning om vad det betyder men du eller ngn annan kanske gör det?

Detta är Rad 247-251

objRS.CacheSize = 5
objRS.PageSize = 10

'rad 249
objRS.Open strSQL, objConn, 3, 1
'rad 249

objRS.AbsolutePage = intPage
objRS.PageSize = 10

Mycket tacksam för svar!
/MvH Pudolf

[Redigerat av Pudolf den 18 dec 2000]

Medlem sedan juni 200032 967 inlägg
#7

om du kör en svensk version av access kan det mycket väl vara så att den bråkar på att du har använt datum (som är ett reserverat ord) som kolumnnamn.

prova att klamra och rapportera.

alltså:

strSQL = "SELECT * FROM Tabell WHERE rubrik LIKE '%" & Replace(Trim(Request.Form("Search")), "'", "''") & "%' ORDER BY [datum] Desc, tid Desc "

du kan ju iofs klamra alla fältnamn, för att vara helt säker. tid kan också vara reserverat, men jag är inte helt hundra.

mvh

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
let's look for treasure!</A>

Medlem sedan mars 20002 836 inlägg
#8

Hello,

då återkommer man hela tiden till att det är lättare att ALLTID använda sig av ett prefix på tabell och fältnamn, tex TBL_MIN_TABELL eller FLD_MITT_FALT
så slipper man oroa sig att man har använt sig av ett reserverat uttryck i tabell/fält namn

cya,

------------------
'*********************
Response.Write("PatrikB")
Response.End
'*********************

Medlem sedan juli 2000221 inlägg
#9

Hej.

Men det verkar inte vara det som är felet. Jag testade byta namn, sätta klamrar etc.

Men får fortfarande felet

ADODB.Recordset error '800a0bb9' 

Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another. 

/sok.asp, line 249

Vad kan det vara?
/MvH Pudolf

Medlem sedan juni 200032 967 inlägg
#10

[Tabell] :q

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
let's look for treasure!</A>

Medlem sedan juli 2000221 inlägg
#11

det är inte det som är felet. testat med andra namn på tabellen oxo.

denna rad sägs vara fel.

objRS.Open strSQL, objConn, 3, 1

Men jag vet inte vad som är fel, ngn?

/Mvh pudolf

Medlem sedan juni 200032 967 inlägg
#12

har du skapat objConn?

------------------
<A HREF="http://cartman.nu" TARGET=_blank>
let's look for treasure!</A>

Medlem sedan juli 2000221 inlägg
#13

Hejsan.
fick det mesta att fungerar nu.
det avr det där med objConn, ja :)

Hade visst skapat den som Connection istället :/

Hursomhelst. Den här kodbiten

<%
strSQL = "SELECT * FROM Tabell WHERE rubrik LIKE '%" & Replace(Trim(Request.Form("Search")), "'", "''") & "%' ORDER BY datum Desc, tid Desc "
Set objRS = Server.CreateObject("ADODB.Recordset")

objRS.CacheSize = 5
objRS.PageSize = 10
objRS.Open strSQL, objConn, 3, 1
objRS.AbsolutePage = intPage
objRS.PageSize = 10

intCount = objRS.RecordCount
intTotPages = objRS.PageCount

If Not objRS.EOF Then
Do Until objRS.EOF or nRecCount >= objRS.PageSize
Response.Write "<b>" & objRS(0) & "</b><br>"
nRecCount = nRecCount + 1
objRS.MoveNext

Loop 
End If

objRS.Close 
Set objRS = nothing
%>

Den verkar räkna ned från 38 (vilket för tillfället är det högsta id:et i min databas) och sedan 10 steg nedåt/sida.

Det jag vill är att, istället för dessa siffror om id ska komma upp, är min kod från grundinlägg. Där den visar rubrik och sånt.

Vet ngn var jag ska lägga in/ta bort för att det skall fungera?

Tacksam för svar!
/MvH Pudolf

[Redigerat av Pudolf den 18 dec 2000]

Medlem sedan juli 2000221 inlägg
#14

Det är alltså så att jag vill ha min grundkod som visas istället för siffror som räknas ned till 0.

Men jag vet inte vilka kodsnuttar jag ska radera/redigera.. :(

Någonstans måste jag väl stoppa in koden från grundinlägget?

För det är väl den här koden som räknar ned "id" från högsta till noll?

If Not objRS.EOF Then
Do Until objRS.EOF or nRecCount >= objRS.PageSize
Response.Write "<b>" & objRS(0) & "</b><br>"
nRecCount = nRecCount + 1
objRS.MoveNext

Där någonstans måste jag väl klämma in min kod? Men.. var?

Tacksam för svar!
/mvh pudolf

Medlem sedan mars 20002 836 inlägg
#15

Hello,

jepp, det stämmer.

det är i raden med Response.Write ... objRS(0) som du ska ändra.

objRS(0) pekar på att det e första fältet/platsen i recordsetet.

Istället för objRS(0) kan du sätta objRS("MITT_FALT_NAMN")

cya,

------------------
'*********************
Response.Write("PatrikB")
Response.End
'*********************

Medlem sedan juli 2000221 inlägg
#16

hej,

jag fick det att fungera efter några ändringar. såhär ser det ut nu:

<%
strSQL = "SELECT * FROM Tabell WHERE rubrik LIKE '%" & Replace(Trim(Request.Form("Search")), "'", "''") & "%' ORDER BY [datum] Desc, [tid] Desc "Set objRS = Server.CreateObject("ADODB.Recordset")

objRS.CacheSize = 5
objRS.PageSize = 10
objRS.Open strSQL, Connection, 3, 1
objRS.AbsolutePage = intPage
objRS.PageSize = 10

intCount = objRS.RecordCount
intTotPages = objRS.PageCount

If Not objRS.EOF Then
Do Until objRS.EOF or nRecCount >= objRS.PageSize

response.write "<table width='580' border='0' cellspacing='0' cellpadding='2'>"

On Error Resume Next

'rad #1
response.write "" & RS("format") & ""

nRecCount = nRecCount + 1
objRS.movenext

'rad #2
response.write "" & RS("format") & ""

nRecCount = nRecCount + 1
objRS.movenext
Loop

response.write "</table>"

End If

%>

Och det fungerar rättså bra. Men det här är ju en söksidan, och när man söker på något som inte finns, då får jag felmeddelandet att "posten inte finns eller kan vara raderad" Så då måste man väl ha en Else sats eller nått som säger att det inte fanns något resultat?

Men var ska jag slänga in den, som ni ser i grundinlägget användae jag mig av en.

If RS.EOF Then

'############# FALSK TABELL ##########
response.write "<table width='580' border='0' cellspacing='0' cellpadding='0'><td>"
response.write "tyvärr, ingen fanns på det sökordet"
response.write "</td></table>"

Else

osv....

Och, PatrikB, jag såg på exemplet för din kod(http://www.mrwize.nu/dev/pagenavigation.asp) att det stod, "sida 1 av 21", hur gör man så :) ?

Tacksam för svar!
/mvh pudolf

[Redigerat av Pudolf den 20 dec 2000]

Medlem sedan mars 20002 836 inlägg
#17

Hello,

Bara att skriva:
<%
Response.Write(""Sida <b>" & intPage & "</b> av <b>" & _
intTotPages & "</b>")

cya,

------------------
'*********************
Response.Write("PatrikB")
Response.End
'*********************

Medlem sedan juli 2000221 inlägg
#18

Hej, jag upptäckte just ett problem :(

när man säker på t ex "hej", då letas alla poster som innehåller just det ordet upp och visas där i listan på sok.asp.

Men om det är t ex 12 träffar, då delas den upp på 2 sidor, fast vid den andra sidan så tar den fram allihopa posterna! Som om jag enbart hade skrivit SELECT * FROM Tabell ! Sedan när jag backar till sida 1 så har sökresultat även där försvunnit och bytts ut mot samtliga poster istället!

Jag fattar inte varför? Någon som vet vad som är fel? (tack för koden förresten, PatrikB)

/mvh pudolf

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