freddy64 10 Geschrieben 26. Dezember 2009 Melden Teilen Geschrieben 26. Dezember 2009 Folgendes Problem: Ich habe eine Kundendatenbank mit mehreren tausend Datensätzen. Wenn ich einen Kunden zur Bearbeitung aufrufe, will ich auch gleich die ID des vorherigen und nächsten Datensatzes in einer Programmvariable speichern, damit ich Kundenweise durch die Datenbank blättern kann. Eine VB-Anwendung arbeitet mit diesen Kundendaten. Die Abfrage ist momentan in dieser Form. SELECT ID, Name.... FROM tblKunden WHERE Mandant = 5 .Open .Find(ID) 'das ist die Kunden-ID, die ich aktuell bearbeiten will Dann gehe ich mit .MovePrev zum vorherigen Datensatz und hole mir die ID danach mit .MoveNext .MoveNext zum nächsten, meinem aktuell folgenden Datensatz und hole mir dessen ID. Bis zu ein paar 1000 Datensätzen funktioniert das auch relativ schnell. Jetzt habe ich aber eine Datenbank mit 1.400.000 Kundendaten. Da versagt Find kläglich. Es dauert 25 Sekunden, bis der aktuelle, der vorherige und der nächste Datensatz gelesen wurde. Wie kann ich bei einer Abfrage in der Art: SELECT ID, Name... FROM tblKunden WHERE Mandant = 5 AND ID = 259 auf die schnellste Art den Datendatz davor und den Datensatz danach anspringen und die ID der Datensätze lesen, damit meine "vor" und "zurück" Schaltflächen im Programm wissen, welcher Kunde als nächster aufgerufen werden soll. Erschwerend kommt hinzu, dass der gerade noch aktuelle nächste Datensatz bereits durch einen anderen Mitarbeiter gelöscht werden könnte Also noch mal ganz kurz. Mein Programm soll bei klick auf "vor" oder "zurück" zum nächsten oder vorherigen Datensatz abhängig von dem, den ich gerade bearbeite, springen. Ich will im Voraus eben schon wissen, ob noch folgende Datensätze vorhanden sind, damit ich Im Falle von EOF die "vor" und "zurück" Schaltflächen ausgrauen bzw. deaktivieren kann. Hat jemand eine Idee? mfg Fred Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 26. Dezember 2009 Melden Teilen Geschrieben 26. Dezember 2009 Zunnächst soplltest Du mal prüfen, ob "ID" indiziert ist. Wen Du durch ein Result Set "blättern" willst, solltest Du einien cursor verwenden. Sorry, ich habe keine Ahnung, wie das in "VB" umgessetzt wird. Hier ein wenig Hintergrund: CODE Magazine - Article: How Developers Can Avoid Transact-SQL Cursors Google sollte da auch weiterhelfen. -Zahni Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.