MoveLast ( Anfängerfrage )
-
Hallo,
wie oben schon bemerkt, bin ich absoluter Anfänger auf dem Gebiet der
Oracle ODBC Programmierung. Immerhin habe ich es geschafft, mit den ganzen
Links hier, mir eine kleine Stammdatenverwaltung zu schreiben, die auch
prinzipiell funktioniert. Im Prinzip kann ich durch meine Datenbank durchblättern, ändern, einfügen oder auch löschen ( Die Datenbank besteht
aus ca. 90000 Datensätzen, die einen Primary und zwei Secondary Keys haben ).Jetzt zu meiner eigentlichen Frage; ich brauche noch eine Funktion, die auf den letzten Datensatz in der Datenbank ( Primary Key ) positioniert, damit ich dann von da aus zurückgehen kann ( man 'blättert' jeweils 50 Datensätze vor oder zurück, diese werden dann in einer Listctrl angezeigt ). Dummerweise braucht das MoveLast () ewig lang, mindestens im 15 Sek. Bereich; dies ist
mir nicht klar, da der Primary Key doch eigentlich sortiert sein müßte.Oder liegt der Fehler am anfänglichen Select Befehl, der
SELECT * from ... ORDER BY Primary Index heißt ( jedenfalls so
ähnlich, habe ich jetzt nicht hier )Falls die Frage ( das Problem ) zu trivial sein sollte, sorry
vielleicht hat ja einer eine tolle Info für mich
tschüss Dieter
-
Sagen wir mal er steht am Anfang auf 0:
select * from tabelle where key between 0 and 50 order by key;
Dann will er weiterblättern und die Datensätze 50-100 lesen:
select * from tabelle where key between 50 and 100 order by key;
Wie leicht auffällt, musst du in deinem Programm nur startIndex speichern und jeweils 50 für endIndex dazuaddieren. startIndex darf zusätzlich nicht <0 werden und nicht >anzEinträge.
Ich weiß nicht was du da mit MoveLast() machst, ich habe fast die Befürchtung du gibts ein Query für alle Datensätze ab und wundest dich dann warum 90000KB ~ 90MB in deinem Speicher nicht schnell durchforstet werden
MfG SideWinder
-
nur statt between wäre limit besser - denn was machst du, wenn die IDs nicht fortlaufend sind?
die höchste ID (um von hinten nach vorne zu gehen) bekommst du per
select max(id) from ...
die anzahl der einträge per
select count(id) from ...und per limit kann man angeben wieviele datensätze gelesen werden sollen
-
erstmal, werde ich nachher mal ausprobieren; die Idee, daß bei einem
MoveLast () offensichtlich über die ganze Tabelle gescrollt wird,
hatte ich natürlich auch schon; stellt sich die Frage, warum das Open
mit dem entsprechenden Select * from recordset ... blitzschnell da ist,
und man von anfang an perfekt durchsuchen ( und zwar blitzschnell ) kann.
Muß doch eigentlich von rückwärts genauso gut gehen ?
Vielleicht fehlt mir auch nur das Verständnis für solch eine relationale
Datenbank, da ich bisher nur mit rein indexorientierten Datenbanken
zu tun hatte.tschüss, Dieter
-
Weil du vermutlich das Resultset auf dem Server läßt.
Somit werden die Daten nicht auf den Client übertragen was ja bei der Anzahl Datensätze erhebliche Zeit beansprucht.Ob ODBC bei MoveLast alles Datensätze auf den Client lädt und dann ein MoveLast durchführt weiß ich leider nicht. Hängt von ODBC-Treiber ab.
Anzunehmen ist es aber bei deinem Problem.
-
Shade Of Mine schrieb:
nur statt between wäre limit besser - denn was machst du, wenn die IDs nicht fortlaufend sind?
Oracle kennt den Befehl limit nicht, dieser ist MySQL Spezifisch...