Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: 10Records vor- und zurückblättern (Paging)

  Alt 28. Mai 2008, 09:54
Also, wenn Du durch eine lange Tabelle blättern willst, dann :
Erstelle einen CLUSTERED(!!!) INDEX auf der Spalte, nach der sortiert werden soll. Wir nennen die jetzt mal 'SEQ' (für Sequenz).

Dann:
In Delphi deklarierst du zwei Variablen: 'TopSeq' und 'BottomSeq'.

So, jetzt der Code:
Init:
'Select Top 10 * from MyTable Order by SEQ'
Du bekommst maximal 10 Zeilen. Der Wert 'SEQ' der 1.Zeile kommt in TopSeq, der der letzten Zeile in 'BottomSeq'

Nächste Seite laden:
'Select Top 10 * from MyTable Where SEQ > :BottomSeq order by SEQ'
Du bekommst maximal 10 Zeilen. Der Wert 'SEQ' der 1.Zeile kommt in TopSeq, der der letzten Zeile in 'BottomSeq'

Vorherige Seite laden:
'select * from (Select Top 10 * from MyTable Where SEQ > :TopSeq order by SEQ Desc) x order by SEQ'
Du bekommst maximal 10 Zeilen. Der Wert 'SEQ' der 1.Zeile kommt in TopSeq, der der letzten Zeile in 'BottomSeq'

Der Trick ist der Clustered Index, denn dann verbraucht die Sortierung keine Zeit (die Daten sind bereits sortiert abgelegt). Du wirst bei dieser Lösung keine Verzögerung bemerken, egal wie groß die Tabelle ist.

Unter SQL 2005 gehts vielleicht auch noch einfacher, aber so hab ich mir seit 10 Jahren beholfen und es funzt sehr gut.

Die Frage, die Du dir stellen solltest, lautet aber:
Zitat von Die Frage:
"Wieso soll jemand durch unmengen von Daten scrollen wollen ?"
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat