Hallo zusammen,
ich habe es versucht, aber leider bisher nicht hinbekommen.
In meiner Base-embeddet HSQL-DB habe ich eine umfangreiche Abfrage, die dauert etwas länger, da viele Berechnungen dahinterstehen.
Es handelt sich dabei um eine Zwischenauswertung eines Wettbewerbes.
Nun möchte ich die Abfrage in einem Tabellenfeld auf einem Formular anzeigen lassen.
Und zwar den ganzen Tag lang, mit einer "do loop while" Schleife.
Die Abfrage ist eine von vielen, wird etwa alle 5 Minunten wieder aufgerufen. Der Inhalt des Formulares ändert sich aber nur etwa jede Stunde einmal, nämlich dann, wenn eine Wettbewerbsrunde abgeschlossen ist. Um den Rechner, der währenddessen zur Eingabe der Teilnehmerergebnisse verwendet wird, nicht übermäßig zu belasten, möchte ich die Abfrage wirklich nur dann ausführen lassen, wenn sich am Zwischenergebnis etwas geändert hat, eben etwa einmal pro Stunde.
Nun möchte ich folgendes erreichen.
- einmal abfragen, das Formular füllt sich mit dem Resultset.
- jetzt jedesmal, wenn das Formular angezeigt wird, das geladene Resultset filtern.
Beispiel: 120 Teilnehmer, auf den Bildschirm passen lesbar aber nur 40.
Daher
1.) Anzeige Zeile 1-40
2.) Anzeige Zeile 41-80
3.) Anzeige Zeile 81-120
4. Erst wenn eine neue Wettbewerbsrunde abgeschlossen ist, also die Einzelergebnisse von allen 120 Teilnehmer eingegeben wurden, ein Reload des Formulares durchführen.
Hat jemand eine Idee?
Kann das überhaupt funktionieren?
Anbei mein Code für die entsprechende Stelle, der Filter funktioniert leider nicht.
Code: Alles auswählen
if isnew=true then
oFormTR.Filter=""
sql="SELECT (*) FROM ""Zwischenwertung"" order by ""Rank"""
oFormTR.Command = sql
oFormTR.CommandType = 2
oFormTR.FetchSize=Anzahl_Teilnehmer 'Beispiel 120
oFormTR.execute
oFormTR.reload
endif
for i=0 to blaetter'
oFormTR.Filter = "(""Rank"" <= "+((i+1)*40)+" AND ""Rank"" >= "+((i*40)+1)+")"
oFormTR.ApplyFilter(true)
wait 20000 ' 20 Sekunden anzeigen
next i
Kann das eventuell mit Resultsetconcurrency zusammenhängen?
beste Grüsse von Rik