AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ADO - Limit - Skip

Ein Thema von hsbc · begonnen am 17. Jun 2005 · letzter Beitrag vom 21. Jun 2005
Antwort Antwort
hsbc

Registriert seit: 28. Jan 2004
Ort: Krems/Donau
404 Beiträge
 
Delphi 7 Professional
 
#1

ADO - Limit - Skip

  Alt 17. Jun 2005, 17:00
Datenbank: MS-Access • Zugriff über: ADO
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
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

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

Re: ADO - Limit - Skip

  Alt 21. Jun 2005, 00:05
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:
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:
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:56 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