Queryergebnisse (schnell) durchlaufen
Verfasst: 25. September 2013, 09:00
Hi,
ich arbeite mich zwar erst gerade in WinDev ein und habe schon das erste Projekt vorliegen mit dem Ziel Performanceoptimierung.
Dank Trace() und Zeitmessung habe ich die Engstellen im Projekt identifiziert, kann sie aber (noch) nicht beseitigen.
Eine diese Engstelle ist das Durchlaufen eines Querys.
Mit HExecuteQuery(...) werden Daten gelesen. Diese Abfrage habe ich schon soweit optimiert, dass nur noch Sekundenbruchteile nötig sind um das Ergebnis zu haben.
Dann wird der/die/das (was ist denn hier eigentlich richtig?) durchlaufen um Daten in einem Scheduler control anzuzeigen.
Ursprünglich wurde das Query mit der Anweisung: durchlaufen. Und obwohl die Anzahl der Datensätze gering ist (auch mal nur ein) Dauert es unheimlich lange bis das Ende erreicht ist.
Nun hatte ich probiert das Query über eine FOR Schliefe zu durchlaufen. Dafür brauche ich aber die Anzahl der Datensätze im Query. Mit Hilfe der Funktion HNbRec(...) und als Alternative auch mal mit HLast(...) und HRecNum(...) habe ich dann die Anzahl ermitteln wollen. Ergebnis alle "H"-Funktionen die ich auf das Query ausführe, dauern unheimlich lange. Unzumutbar lange.
Ich habe auch schon unterschiedliche Variationen mit LOOP und WHILE probiert. Die Schleifen sind dann nicht das Problem, aber dann z.B. das Lesen des nächsten Datensatzes mit HReadNext(...)
Meine Frage für den nächsten Versuch:
- Welche Möglichkeit habe ich die Anzahl der Datensätze eines Querys zu ermitteln, außer mit den genannten Funktionen HNbRec(...), HLast(...) und HRecNum(...)?
- Und ist es möglich ein Query in eine Schliefe durchzulaufen (FOR = 1 TO nAnzahlDatensaetze) ohne den nächsten Daten mit HReadNext(...) lesen zu müssen? D.h. direkt den Datensatz zu adressieren (~wie ein Array) mit Query?
Welche sonstigen Ideen habt Ihr um diesen Flaschenhals zu entschärfen?
ich arbeite mich zwar erst gerade in WinDev ein und habe schon das erste Projekt vorliegen mit dem Ziel Performanceoptimierung.
Dank Trace() und Zeitmessung habe ich die Engstellen im Projekt identifiziert, kann sie aber (noch) nicht beseitigen.
Eine diese Engstelle ist das Durchlaufen eines Querys.
Mit HExecuteQuery(...) werden Daten gelesen. Diese Abfrage habe ich schon soweit optimiert, dass nur noch Sekundenbruchteile nötig sind um das Ergebnis zu haben.
Dann wird der/die/das (was ist denn hier eigentlich richtig?) durchlaufen um Daten in einem Scheduler control anzuzeigen.
Ursprünglich wurde das Query mit der Anweisung:
Code: Alles auswählen
for ALL QRY_Abwesenheit
...
end
Nun hatte ich probiert das Query über eine FOR Schliefe zu durchlaufen. Dafür brauche ich aber die Anzahl der Datensätze im Query. Mit Hilfe der Funktion HNbRec(...) und als Alternative auch mal mit HLast(...) und HRecNum(...) habe ich dann die Anzahl ermitteln wollen. Ergebnis alle "H"-Funktionen die ich auf das Query ausführe, dauern unheimlich lange. Unzumutbar lange.
Ich habe auch schon unterschiedliche Variationen mit LOOP und WHILE probiert. Die Schleifen sind dann nicht das Problem, aber dann z.B. das Lesen des nächsten Datensatzes mit HReadNext(...)
Meine Frage für den nächsten Versuch:
- Welche Möglichkeit habe ich die Anzahl der Datensätze eines Querys zu ermitteln, außer mit den genannten Funktionen HNbRec(...), HLast(...) und HRecNum(...)?
- Und ist es möglich ein Query in eine Schliefe durchzulaufen (FOR = 1 TO nAnzahlDatensaetze) ohne den nächsten Daten mit HReadNext(...) lesen zu müssen? D.h. direkt den Datensatz zu adressieren (~wie ein Array) mit Query?
Welche sonstigen Ideen habt Ihr um diesen Flaschenhals zu entschärfen?