Avatar billede karga Nybegynder
01. december 2005 - 19:16 Der er 6 kommentarer

Paging i MS SQL

Ved at bruge PageSize og AbsolutePage til en MS SQL database får jeg denne fejl
Det aktuelle postsæt understøtter ikke bogmærker. Det kan skyldes en begrænsning af provideren eller af den valgte markørtype.

Der er en hel del der har fået den rundt omkring på nettet, men der er ikk lige nogen der har kunnet svare af det jeg har set... Har både søgt på hele sætningen og self fejlkoden (0x800A0CB3)


Nogen der ved hvordan og hvorledes? Fejllinien ligger der hvor jeg initialiserer AbsolutePage - har prøvet med forskellige tildelinger, men det gider den heller ikke

Har en tabel på 50+ rækker, så det er ikke fordi der er for få eller noget - jeg har sat pagesize til 2 for at være sikker


Den gider hverken køre på min lokale server eller på mit webhotel... Det har dog virket før hos samme udbyder, så vidt jeg husker


HJÆLP!
Avatar billede dsj Nybegynder
01. december 2005 - 22:49 #1
Årsagen er, at MS SQL ikke understøtter SQL-standardens OFFSET-funktion. MS SQL understøtter heller ikke direkte LIMIT, men har en pendant, kaldet TOP. Ved at omskrive den givne SQL-sætning, er det muligt at opnå den samme effekt som OFFSET, blot vil det være med en højere belastning til følge; dog vil der ikke være nogen mærkbar forskel så længe du kun har få hundrede rækker i den givne tabel. Følgende er den SQL-sætning, som du skal bruge:

SELECT TOP PageSize * FROM (SELECT TOP <PageSize * AbsolutePage> * FROM <table> ORDER BY <column> DESC) t ORDER BY <column>

Alt angivet med < og > er der, hvor du selv skal indsætte data og navne
Avatar billede arne_v Ekspert
02. december 2005 - 03:29 #2
er LIMIT en del af ANSI SQL ?

de 2 alternativer er:

1)  hold query resultat åben mellem requests

2)  bare SELECT TOP pagsiz*pagno ... og smid (pagno-1)*pagsiz væk

man skal huske på at paging med LIMIT (eller alternativ #2) ikke garanterer konsistente
resultater hvis der samtidigt sker INSERT og DELETE
Avatar billede fennec Nybegynder
02. december 2005 - 08:34 #3
Paging virker fint for mig med MS-SQL. Brug koden fra dette sted:
http://activedeveloper.dk/artikler/default.asp?articleid=31

Du skal bare rette strDSN så den passer til MS-SQL.

ps. Kan også være fordi du bruger:
set rs = conn.execute("...")

.. til at selecte med. Det dur ikke. Der skal bruges rs.open metoden.
Avatar billede arne_v Ekspert
02. december 2005 - 14:11 #4
det er vist teknisk set en alternativ #2 bare med koden i ADO
Avatar billede karga Nybegynder
03. december 2005 - 17:10 #5
Jeg fandt ud af det - Sku bruge et Recordset istedet for Connection...
Mange tak for hjælpen!
Avatar billede fennec Nybegynder
05. december 2005 - 08:34 #6
karga >>
Du har ikke angivet hvem der har hjulpet dig, eller om du selv fandt ud af det. Da jeg nævnte det i min ps, smider jeg et svar. Hvis du selv fandt ud af det, så husk at smide et svar selv og tage point, så ?'et bliver lukket.

.o) <-- One Eyed Jack
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester