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...