Formular Resultset einmal laden, mehrmals filtern

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Formular Resultset einmal laden, mehrmals filtern

Beitrag von F3K Total »

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
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Formular Resultset einmal laden, mehrmals filtern

Beitrag von DPunch »

Aloha
F3K Total hat geschrieben:Anbei mein Code für die entsprechende Stelle, der Filter funktioniert leider nicht.
In dieser Form natürlich nicht, dafür müsstest Du in der Schleife ein .Reload ansetzen.
F3K Total hat geschrieben:Kann das eventuell mit Resultsetconcurrency zusammenhängen?
Nope

Warum willst Du das RowSet überhaupt filtern?
Ich kann Deinen Schilderungen zwar nicht wirklich folgen, aber Ich nehme an, dass Du das Formular als eine Art "Ergebnistafel" verwenden willst, auf der jeder, den es interessiert, schauen kann, welchen Platz er oder auch ein anderer belegt, und die Anzeige soll zyklisch eine "Seite" weiter springen?
Wenn das das Ziel sein sollte, kannst Du doch auch einfach mit .absolute den Zeiger im Tabellenfeld sichtbar verschieben, immer die 40 Datensätze weiter.
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Formular Resultset einmal laden, mehrmals filtern

Beitrag von F3K Total »

Hallo Dpunch,
genau es handelt sich um eine Ergebnistafel.

Mit reload funktioniert die auch. Das will ich aber gerade vermeiden.

Werde heute abend mal den Zeiger sichtbar verschieben, unsichtbar hat es nicht geklappt.
Mal sehen ob es hilft.
Danke für den Tip

Gruß Rik
Antworten