Gå til innhold

Anbefalte innlegg

LØST! Løsning er i en annen tråd her

 

Har bygget opp en tabell med artister, og henter ut infoen med vedlagt kode.

Behersker MSSQL og ASP, VbScript bra, men surrer meg inn i en veldig tung tankegang når jeg prøver å finne en løsning på å fordele tabellen på flere sider.

Det første jeg tenkte var å ha en teller som teller antall loops, og stopper etter x antall rader. Så tenkte jeg å bruke "adoRec.MoveNext" etter at telleren har oppfyllt en gitt verdi, for så å ta samme prosess om igjen. Men så stopper det opp i tankene når jeg finner ut at jeg må finne antall ganger loopen skal foretas på x rader.

Noen ideer/forslag?

 

<% fjernet
%>

Endret av neitakk
Lenke til kommentar
  • 1 måned senere...
Videoannonse
Annonse

I MySQL kan du bruke LIMIT til dette. Du legger til en GET-parameter (link) for å vite hvilken side du er på.

 

Eksempel:

side.asp?page=1

side.asp?page=2

side.asp?page=3

 

osv.

 

 

La oss si du har en tabell med 5 sider. Du vil vise 10 rader pr. side.

 

På Side 1 så kjører en spørring og skriver ut html

SELECT * FROM table LIMIT 10

 

Denne spytter ut de 10 første radene.

 

På Side 2 blir spørringen:

SELECT * FROM table LIMIT 10, 10

 

Denne spytter ut 10 rader, men med 10 raders "offset" hvis du skjønner.

 

Side 3:

SELECT * FROM table LIMIT 20, 10

 

Du beregner ut offset ved å gange antall rader du vil vise pr. side med parameteren page.

 

Request.QueryString("page") * 10

Lenke til kommentar

MSSQL har ingen "LIMIT" keyword. Her må du bruke TOP.

 

SELECT TOP 5 * FROM...

 

Dessverre kan man ikke velge et offset på samme måte som med LIMIT, så her må man være litt mer kreativ. Enten bruker du siste ID som parameter. Slik at side 2 f.eks får følgende adresse: minSide.asp?startat=20

 

med tilhørende sql:

"SELECT TOP 10 * FROM Tabell WHERE pk_id > " + Request.QueryString["startat"]

 

eller så må du løse det programmatisk, ved at første siden henter f.eks TOP 10, andre TOP 20, osv... Og så må du da "hoppe over" alle de recordsa du ikke skal vise på siden, ved hjelp av en test i en løkke.

 

...hvis dette gjorde ting litt klarere.

Lenke til kommentar
  • 1 måned senere...

Løsning:

 

	
<Putt inn SQL-spørringen>

' Open the recordset.
objRst.Open strSQL
objRst.CacheSize = objRst.PageSize
intPageCount = objRst.PageCount 
intRecordCount = objRst.RecordCount 

If CInt(intPage) > CInt(intPageCount) Then intPage = intPageCount
If CInt(intPage) <= 0 Then intPage = 1

If intRecordCount > 0 Then
 objRst.AbsolutePage = intPage
 intStart = objRst.AbsolutePosition
 If CInt(intPage) = CInt(intPageCount) Then
 	intFinish = intRecordCount
 Else
 	intFinish = intStart + (objRst.PageSize - 1)
 End if
End If[

   For intRecord = 1 to objRst.PageSize
<Hent ut variabler her>
   	objRst.MoveNext
   If objRst.EOF Then Exit for
   Next
objRst.Close 

Endret av neitakk
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...