![]() |
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:
Dieser Code funktioniert relativ gut am Beginn der Tabelle, je weiter hinten man jedoch zugreifen möchte, desto langsamer wird natürlich der Zugriff.
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'; Hat hier jemand vielleicht schon eine Methode entdeckt, die überall gleich schnell funtkioniert? mfg Herbert |
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:
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:
SELECT TOP 100 * FROM MyTables WHERE ID > 0
SQL-Code:
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.
SELECT TOP 100 * FROM MyTables WHERE ID > 1234
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz