Hello,
kolla in wFScript: PageNavigation
cya
------------------
'*********************
Response.Write("PatrikB")
Response.End
'*********************
17 svar · 233 visningar · startad av Pudolf
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
Hello,
kolla in wFScript: PageNavigation
cya
------------------
'*********************
Response.Write("PatrikB")
Response.End
'*********************
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
kan det vara så att jag lagt kodbitarna på fel ställen? (PatrikB kanske vet?)
Tacksam för svar
/MvH Pudolf
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
'*********************
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]
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>
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
'*********************
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
[Tabell] :q
------------------
<A HREF="http://cartman.nu" TARGET=_blank>
let's look for treasure!</A>
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
har du skapat objConn?
------------------
<A HREF="http://cartman.nu" TARGET=_blank>
let's look for treasure!</A>
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]
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
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
'*********************
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]
Hello,
Bara att skriva:
<%
Response.Write(""Sida <b>" & intPage & "</b> av <b>" & _
intTotPages & "</b>")
cya,
------------------
'*********************
Response.Write("PatrikB")
Response.End
'*********************
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