Supportnet / Forum / Datenbanken
Abfrage dauert mir zu lange
Frage
Hi there,
ich habe mir eine Formular erstellt, mit dem man recht bequem Datensätze anzeigen lassen kann. Das Formular selbst ist ein Endlosformular. in dem Endlosformular werden aber nicht alle Daten angzeigt sondern nur ein bestimmter Ausschnitt aus einer Tabelle. Um das zu bewerkstelligen, habe ich hier eine Funktion die zwar geht, aber erbärmlich langsam ist, sobald Daten angezeigt werden sollen, die irgendwo in/ab Zeile 2000 liegen. D.h. je weiter "hinten/unten" die Daten liegen, umso langsamer wird die Funktion:
Function creSQL()
'Diese If-Abfrage mach mir sorgen:
If zähler > Forms![Bestellformular].schritt Then
Forms![Bestellformular].RecordSource = "select top " & Forms![Bestellformular].schritt & " * from KapOrder where " _
& "bestellnr not in (select top " & zähler - Forms![Bestellformular].schritt & " bestellnr from KapOrder)"
Else
Me.RecordSource = "select top " & Forms![Bestellformular].schritt & " * from KapOrder"
End If
End Function
Weiss jemand zufällig warum?
MfG und Danke,
M. Franke
P.S. die Funktion hab nicht ich geschrieben, sondern habe ich irgendwo im Netz gefunden...*g*
Antwort 1 von hendrikw
Weil in dem Subselect (not in ...) eine immer größere Datenmenge durchsucht werden muss.
Falls Du das nach Bestellnummer sortiert anzeigen lässt (order by bestellnr), merke Dir die letzte angezeigte und hole Dir die nächsten n:
select top 20 from KapOrder where bestellnr > letzte_angezeigte_nummer
Dabei gehe ich davon aus, dass auf der bestellnr ein Index liegt (primary key ?).
mfg
Hendrik
Falls Du das nach Bestellnummer sortiert anzeigen lässt (order by bestellnr), merke Dir die letzte angezeigte und hole Dir die nächsten n:
select top 20 from KapOrder where bestellnr > letzte_angezeigte_nummer
Dabei gehe ich davon aus, dass auf der bestellnr ein Index liegt (primary key ?).
mfg
Hendrik
Antwort 2 von weirdmf2
Habe die Zeile eben umgeändert, jetzt läuft alles schön schnell, zeigt aber keine Daten mehr im Endlosformular an :( Vorher lief langsam, hat aber alles angezeigt, jetzt läuft schnell und zeigt nichts mehr an. Lol.
Me.RecordSource = "select top " & Me.schritt & " * from KapOrder where " & "bestellnr not in (select top " & zähler - Me.schritt & " bestellnr > kennummer from KapOrder)"
Muss ich da noch irgendwelche Bezüge schaffen oder so?
MfG und Danke,
M. Franke
Me.RecordSource = "select top " & Me.schritt & " * from KapOrder where " & "bestellnr not in (select top " & zähler - Me.schritt & " bestellnr > kennummer from KapOrder)"
Muss ich da noch irgendwelche Bezüge schaffen oder so?
MfG und Danke,
M. Franke

