Toon posts:

[asp] sql paging met odbc & access 2000

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik wil dus uit een tabel met 100+ records steeds een eental hebben, nu heb ik al zitten stoeien met LIMIT [offset],[aantal], maar dat schijnt niet tewerken voor een ODBC databasekoppeling (volgens een aantal mensen hiero, en ook volgens mijn bevindingen)

tweede optie was STARTROW = [begin] en MAXROWS = [aantal], maar dat lijkt ook niet te werken

voor de liefhebbers, mij sqlquery: SELECT * FROM messages WHERE TopicId="&topic&" LIMIT 0,10

(owja, ik heb gezien dat dit een nogal common probleem is wat veel is langsgekomen, maar ik haal vooral tegenstrijdige berichten uit de search)

Verwijderd

Topicstarter
schopje dan maar, want ik zit nog steeds met hetzelfde probleem.
Ik vraag me trouwens af waarom er niet gereageerd is, weet niemand een oplossing, of is dit zo'n n00b-vraag dat niemand zin heeft om te antwoorden?

  • Sjnirk
  • Registratie: Maart 2001
  • Laatst online: 27-03-2025

Sjnirk

Hie vrieve

Ik vat je vraag niet helemaal, maar misschien heb je iets aan deze topic

[topic=471675]

Bikkelen gebeurt pas na 2:00


Verwijderd

Topicstarter
ik wil niet de hele recordset binnenhalen en dan er doorheen wandelen, want dat is veel te veel overhead denk ik (je gaat niet honderden records binnenhalen om er vervolgens maar 25 te laten zien) Ik wil dus gewoon 25 records hebben, en wel die 25 records met een bepaalde beginpositie, maar dat lijkt niet te werken voor een adodb recordset

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 09-09 16:14

Crazy D

I think we should take a look.

Misschien over het hoofd gezien? :)
Het is overigens wel vaker voorgekomen.
Je kan een paar dingen doen, maar ik denk dat het het makkelijkste (en snelste?) is om als je pagina 2 (record 11 t/m 20) wilt hebben, eerst een top 10 query doet om het hoogste ID op te halen, en vervolgens een top 10 "where ID > zojuist opgehaalde ID". Voor zover ik weet biedt Access geen andere manier, behalve met recordset-properties (pagesize, pagecount, currentpage (of properties die daar op lijken), maar je wordt niet vrolijk als je 1000 records ophaalt om er een paar te tonen, dan is een 2e query sneller lijkt me).

Exact expert nodig?


  • Sjnirk
  • Registratie: Maart 2001
  • Laatst online: 27-03-2025

Sjnirk

Hie vrieve

Daarom kijk es onderaan bij de laatste reply van de topic die ik net stuurde, met deze pagina kun je record voor record bladeren zonder de hele recordset binnen te halen, lijkt me niet echt een ontzettend grote opgave om er daar dan 25 van te maken ipv 1

Bikkelen gebeurt pas na 2:00


Verwijderd

Topicstarter
Op dinsdag 23 april 2002 11:44 schreef Crazy_D het volgende:
Misschien over het hoofd gezien? :)
Het is overigens wel vaker voorgekomen.
Je kan een paar dingen doen, maar ik denk dat het het makkelijkste (en snelste?) is om als je pagina 2 (record 11 t/m 20) wilt hebben, eerst een top 10 query doet om het hoogste ID op te halen, en vervolgens een top 10 "where ID > zojuist opgehaalde ID". Voor zover ik weet biedt Access geen andere manier, behalve met recordset-properties (pagesize, pagecount, currentpage (of properties die daar op lijken), maar je wordt niet vrolijk als je 1000 records ophaalt om er een paar te tonen, dan is een 2e query sneller lijkt me).
dit vond ik op zich een geniaal idee, maar nu ik dat aan het uitvoeren ben stuit ik weer op een probleem

Als eerste zou je zoiets willen uitvoeren:
SELECT MAX(MessageId) AS begin TOP [offset] FROM Messages WHERE Topic=[topicid] AND Visible=TRUE

en dan die tweede:
SELECT TOP [size] FROM Messages WHERE MessageId>DB("begin") AND Topic=[topicId] AND Visible=TRUE

die eerste is dus geen geldige SQL, maar hoe krijg ik dan de x-de messageid eruit die voldoet aan die WHERE clausule?
je kan natuurlijk de hele boel weer binnenhalen en dan met movelast naar de laatste gaan en om het messageid gaan vragen, maar dan heb je weer een hele bende onnodige records binnengeslurpt (zeker bij hogere pagina's) en dat wil ik dus niet

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 09-09 16:14

Crazy D

I think we should take a look.

Je query klopt niet... top staat verkeerd in de 1e...
Maar uhmmm ik bedenk me dat dat niet gaat werken, max(messageid) zal altijd de hoogste zijn... |:( :z
Ik kan ff niets beters bedenken dan met een subquery...
code:
1
2
3
4
5
6
7
select max(MessageId) as Begin
from Messages
where MessageId in (
    SELECT top [offset] MessageId
    FROM Messages
    WHERE Topic=[topicid] AND Visible=TRUE
)

Maar da's denk ik niet de meeste efficiente, maar er komt ff niks beters uit m'n hoofd ;)

Exact expert nodig?


Verwijderd

Topicstarter
subquery's :? zo leer je nog eens wat :P /me duikt het web weer eens op...
Pagina: 1