Jump to content

Abfrage


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...