Toon posts:

[asp] bepaald aantal records selecteren?

Pagina: 1
Acties:

Verwijderd

Topicstarter
als ik bijvoorbeeld 130 entries heb en ik verdeel dat over 6 pagina`s. hoe kan ik het dan voor elkaar krijgen om dat er per pagina maar 25 records getoond worden.

ik moet dus van 0 tm 25 uit de database halen en
dan bij de volgende pagina 26 tm 50 enz...

hoe kan ik dat doen? ik geef voor de pagina een querystring mee om aan te geven waar ie moet beginnen

zeg maar zoiets : <a href="ownerlist.asp?begin=<% =(teller2-1)*25 %>">Pagina-<% =teller2 %></a>

en dan krijg je dit als uitvoer : ownerlist.asp?begin=0 en dan ownerlist.asp?begin=25 enz...
Mischien is het niet helemaal duidelijk maar ik weet ook niet hoe ik het precies kan uitleggen. ik moet in iedergeval een 130 aantal entries verdelen over 25 per pagina en dan moet er boven aan de pagina links komen te staan naar de andere pagina`s maar dat moet dan gewoon het zelfde bestand zijn maar dan moeten er andere entries getoond worden.

ik hoop dat iemand weet hoe ik dit op kan lossen
alvast bedankt.

gr. sjors //devdesigner

Verwijderd

Wat lukt je niet? Je lijkt al een groot deel van het idee in je hoofd te hebben, dus ik zie het probleem niet zo.

1) doe een query
2) bepaal het aantal records: n
3) bepaal hoeveel records er op een pagina weergegeven moeten worden: a
4) bereken hoeveel pagina's er zullen komen: z = n mod a + 1
5) haal de gewenste pagina op (meegegeven via URL, anders default 1, eerste pagina): b, met 1 <= b <= z
6) maak een for loop, en beeld daarin alle paginanummers af, met het huidge pagina nummer bold ofzo.
7) bereken het start record voor de gewenste pagina: x = (b - 1) * a, met b > 0 (eerste pagina is 1, geen negatieve paginanummers) en x <= n (anders ga je voorbij de laatste pagina)
8) ga naar het juiste records met .movenext in een loop.
9) doe een loop waarin je a aantal records afbeeld (of minder, in geval de laatste pagina minder records heeft)

Je kunt het ook op wat meer technisch geavanceerde manieren oplossen, bijv. door je recordset te behouden door het door te geven via je session object, of door te werken met ADO RecordSet paging. De keuze is aan jou.

Succes :)

  • Disciplus-Simplex
  • Registratie: September 2001
  • Laatst online: 28-05 00:58

Disciplus-Simplex

altijd wakker....

Heb wel het een en ander verwijderd maar dit is denk ik wat je bedoelt.
Je kan het aantal records per pagina selecteren en je kan vooruit en achteruit
bladeren. D'r staat ook nog wat bullshit tussen maar dat mag je zelf verwijderen.
Verder kun je dit script uiteraard nog tweaken. Dit heb ik ooit eens gemaakt en
werkt uitstekend. Sorry voor de karige uitleg maar met een beetje inzicht lukt het
wel om hier iets moois van te maken.


<%
intRecPerPage = Int(Request.querystring("intRpp"))

If intRecPerPage = "" or intRecPerPage = 0 Then
intRecPerPage = 20
End If
%>

****HIER kun je het aantal records per page kiezen*****

<select onchange="submitPage(this.options[this.selectedIndex].value)">
<option <%if intRecPerPage = 5 Then Response.Write("selected") end if%> value="20">20</option>
<option <%if intRecPerPage = 10 Then Response.Write("selected") end if%> value="50">50</option>
<option <%if intRecPerPage = 15 Then Response.Write("selected") end if%> value="100">100</option>
<option <%if intRecPerPage = 20 Then Response.Write("selected") end if%> value="250">250</option>
</select>
  records per page
<br>
<br>
<table border="0" bordercolor="silver" cellpadding="1" cellspacing="0" width="500">
<tr>
<td><b>blabla:</b></td>
<td><b>blabla:</b></td>
<td><b>blabla:</b></td>
<td><b>blabla:</b></td>
<td><b>blabla:</b></td>
</tr>
<%
intPage = Int(Request.querystring("intPag"))

If intPage = "" or intPage = 0 Then
intPage = 1
End If

Set objRst = Server.CreateObject("ADODB.RecordSet")

'set the cursor location property (adUseClient)
objRst.CursorLocation = 3

'set the cache size equal to records/page
objRst.CacheSize = intRecPerPage

strSQL = "SELECT * WHATEVER"
objRst.Open strSQL, objCn

If Not objRst.EOF And Not objRst.BOF Then
'move record pointer to first record
objRst.MoveFirst()

'set pagesize
objRst.PageSize = intRecPerPage

'count total pages
intPageCount = objRst.PageCount

'set the absolute page
If intPage <= intPageCount Then
objRst.AbsolutePage = intPage
Else
objRst.AbsolutePage = 1
intPage = 1
End If
End If

intCount = 0
str = ""

While not objRst.EOF And intCount < objRst.pageSize
intCount = intCount + 1

str = str & "<TR>" & Chr(13)
str = str & "<TD>" & objRst("blabla").value & " </TD>" & Chr(13)
str = str & "<TD>" & objRst("blabla").value & " </TD>" & Chr(13)
str = str & "<TD>" & objRst("blabla").value & " </TD>" & Chr(13)
str = str & "<TD>" & objRst("blabla").value & " </TD>" & Chr(13)
str = str & "<TD>" & objRst("blabla").value & " </TD>" & Chr(13)
str = str & "</TR>" & Chr(13)

objRst.MoveNext()
WEnd

Response.Write(str)

objRst.Close
Set objRst = Nothing
objCn.Close
Set objCn = Nothing
%>

</table>
<br>

<%
str = ""

****HIER kun je heen en weer bladeren*****

If intPage > 1 and intPageCount > 1 Then
str = str & "<a href=blabla.asp?intRpp=" & intRecPerPage & "&intPag=" & intPage-1 & ">[back] </a>"
End If
If intPage < intPageCount Then
str = str & "<a href=blabla.asp?intRpp=" & intRecPerPage & "&intPag=" & intPage+1 & "> [next]</a>"
End If

Response.Write(str)

str = ""
%>

</body>
</html>

Ik dien de wetenschap en put daar vreugde uit.......


Verwijderd

ik moet dus van 0 tm 25 uit de database halen en
dan bij de volgende pagina 26 tm 50 enz...
0-25 zijn 26 regels >:)

[quote]
4) bereken hoeveel pagina's er zullen komen: z = n mod a + 1
[quote]
typo ruud, moet div (\) zijn..

Verwijderd

Topicstarter
thnx voor de source maar dit object werkt niet bij mij?

Error Type:
Microsoft VBScript runtime (0x800A01BE)
Object doesn't support named arguments: 'CacheSize'
/sh/test.asp, line 43

hoe los ik dat op?

Verwijderd

Op dinsdag 04 september 2001 07:27 schreef Yarvieh het volgende:
[..]
typo ruud, moet div (\) zijn..
Och ja, natuurlijk, helemaal gelijk. Ik haal die wel vaker door elkaar. :z
Op dinsdag 04 september 2001 17:51 schreef DevDesigner het volgende:
thnx voor de source maar dit object werkt niet bij mij?

Error Type:
Microsoft VBScript runtime (0x800A01BE)
Object doesn't support named arguments: 'CacheSize'
/sh/test.asp, line 43

hoe los ik dat op?
Programmeren, Les 1: gebruik geen source die je niet begrijpt, tenzij het een goed gedocumenteerde en geteste LIB is, met een omschrijving van de randoorwaarden. Dat is vragen om problemen.

BTW, om deze reden lever ik ook zelden hapklare source code aan, want dan leert de lezer er niets van en wordt je bij problemen alleen een soort helpdesk i.p.v. een docent.

.CacheSize is een property van het recordsetobject wat kennelijk niet op een juiste manier wordt gezet.

En bezoek aan MSDN levert mij de volgende pagina op: http://msdn.microsoft.com/library/en-us/ado270/htm/mdprocachesize.asp?frame=true dus hier zou je watmeer info moeten kunnen vinden.

Volgens mij gaat het op de volgende regel fout:
code:
1
2
'set the cache size equal to records/page
objRst.CacheSize = intRecPerPage

Misschien is er iets mis met de waarde in intRecPerPage, misschien ondersteunt je OLEDB provider de .CacheSize property niet goed, misschien doe je iets anders verkeerd. Copy & Paste je source maar eens misschien zie ik dan wat meer.

Verwijderd

Topicstarter
ik snap de source wel maar op een of andere manier kan dat object niet ondersteunt worden. kan dat mischien aan de database connectie liggen?

ik heb dit :
code:
1
2
3
4
5
6
7
8
9
10
11
Set objRst = Server.CreateObject("ADODB.Connection")
objRst.open "provider=Microsoft.Jet.OLEDB.4.0;data source=d:\web\users\forzenl\fpdb\scooterhouse.mdb"

'set the cursor location property (adUseClient)
objRst.CursorLocation = 3 

'set the cache size equal to records/page
objRst.CacheSize = intRecPerPage

strSQL = "SELECT naam,merk,uitlaat,cilinder,snelheid from ownerlist"
objRst.Open strSQL, objCn

zit er iets niet goed???

  • Disciplus-Simplex
  • Registratie: September 2001
  • Laatst online: 28-05 00:58

Disciplus-Simplex

altijd wakker....

MrX heeft inderdaad gelijk dat je van een relatief lastig stuk code niet onmiddelijk wat leert. Ik heb enige tijd les gegeven in ASP (tijdens m'n bijbaantje bij een IT-boer) en weet dat dit niet helemaal de juiste manier is.
Gisteravond had ik echter geen zin om alles duidelijk te verklaren enz. Neem het aanbod van MrX aan en stuur hem jouw source of vraag het aan mij. Gezien mijn drukke bestaan (blablabla) gaat de voorkeur uit naar Mrx :).

Dasss toevallig, heb je net je source gepost. Laten wij eens kijken 8-)
Dit is geen recordset-object maar een connection-object. Dit is een manier om een connectie naar je database tot stand te brengen.
objRst staat bij mij altijd voor recordset obj.

Set objRst (eigenlijk objCn) = Server.CreateObject("ADODB.Connection")
objRst.open "provider=Microsoft.Jet.OLEDB.4.0;data source=d:\web\users\forzenl\fpdb\scooterhouse.mdb"

Zet je *.mdb file wel in een beveiligde dir. Anders is ie zo te downloaden. Via een coole hack kun je zo heel veel
databases op het internet downloaden >:)

Set objRst = Server.CreateObject("ADODB.Recordset")

'set the cursor location property (adUseClient)
objRst.CursorLocation = 3

'set the cache size equal to records/page
objRst.CacheSize = intRecPerPage

strSQL = "SELECT naam,merk,uitlaat,cilinder,snelheid FROM ownerlist"
objRst.Open strSQL, objCn (nu slaat objCn ook ergens op!!)
Veel succes soldier. Misschien heb ik iets over het hoofd gezien maar dat horen we dan wel weer.

Ik dien de wetenschap en put daar vreugde uit.......


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 22:52

Crazy D

I think we should take a look.

Moest je niet de .PageSize gebruiken? En dan met .ActivePage de pagina goed zetten?
Dus om bv naar page 2 te gaan met 50 records per pagina,
rs.PageSize = 50
rs.AbsolutePage = 2:?

Exact expert nodig?


Verwijderd

Topicstarter
oke onwijs bedankt maar in de source die jij er hebt ingeplakt gebruik je objRst als database connectie? en daarnet weer. was het nou goed wat ik er als code had ingeplakt?

  • Disciplus-Simplex
  • Registratie: September 2001
  • Laatst online: 28-05 00:58

Disciplus-Simplex

altijd wakker....

Ik had er geen connectie-object bijgezet omdat ik die in een aparte include heb staan. Die includes heb ik niet mee gecopied.
Een recordset-object is als het ware een auto en het connectie-object is een autoweg. D'r is dus zeker een verschil tussen die twee --> zie internet voor een serieuze uitleg.

Ik dien de wetenschap en put daar vreugde uit.......


Verwijderd

Topicstarter
maar klopt mijn connectie dan wel in deze source?
Pagina: 1