Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADO - Limit - Skip (https://www.delphipraxis.net/47903-ado-limit-skip.html)

hsbc 17. Jun 2005 16:00

Datenbank: MS-Access • Zugriff über: ADO

ADO - Limit - Skip
 
Hallo allerseits,

Ich suche nach einer Möglichkeit, eine bestimmte Anzahl an Datensätzen ab einer bestimmten Position mittels ADO auszulesen. Da bei ADO leider kein Skip, wie z.B. bei mySQL oder Firebird funktioniert, habe ich versucht, folgenden Code zu verwenden, in welchen ich Anzahl und Skip übergebe:

Delphi-Quellcode:
if Skip > 0 then
      ZQ_Artikel.SQL.Text :=
        'SELECT TOP ' + IntToStr(Anzahl) + ' * FROM ARTIKEL ' +
        'WHERE ARTNR NOT IN (SELECT TOP ' + IntToStr(Skip) + ' ARTNR FROM ARTIKEL) ' +
        'ORDER BY ARTNR'
      else
      ZQ_Artikel.SQL.Text :=
        'SELECT TOP ' + IntToStr(Anzahl) + ' * FROM ARTIKEL ORDER BY ARTNR';
Dieser Code funktioniert relativ gut am Beginn der Tabelle, je weiter hinten man jedoch zugreifen möchte, desto langsamer wird natürlich der Zugriff.

Hat hier jemand vielleicht schon eine Methode entdeckt, die überall gleich schnell funtkioniert?

mfg
Herbert

alzaimar 20. Jun 2005 23:05

Re: ADO - Limit - Skip
 
Ich mache es so:
Meine Tabelle hat ein AutoInc-Feld 'ID'. Das ist der Primary Key. Bei MS-SQL legt man einen 'CLUSTERED INDEX' rauf.
Um dase rste Datenpaket von 100 Records abzurufen:
SQL-Code:
SELECT TOP 100 * FROM MyTables WHERE ID > 0
Man merkt sich nun die ID des untersten Records dieses Paketes. Sagen wir ID[unten] := 1234. Um nun die nächsten 100 Records zu lesen, reicht es, das hier auszuführen:
SQL-Code:
SELECT TOP 100 * FROM MyTables WHERE ID > 1234
Von diesem Paket merken wir uns wieder die ID des untersten Records usw. Auf diese Weise kann ich Stück für Stück durch den Datenbestand 'scrollen'. Nachteil: Das Rückwärtsscrollen lässt sich nur schwierig realisieren: Es müssen ja die bereits geladenen Datensätze oder zumindest die ID der ersten/letzten Einträge gespeichert werden. Bei hinreichend grossen Paketgrößen sollte Letzteres ausreichende Datenmengen verwalten können.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz