Hallo Stephan,
ich habe mich jetzt zum ersten mal überhaupt mit dem Gridcontrol eines Dialogs befasst. Bei größeren Datenmengen (hier 12 Spalten und etwas über 8000 Datensätzen) konnte ich erst einmal das Problem nachvollziehen.
Das Ganze scheint auch nachvollziehbar, wenn ich eine Abfrage erstelle und diese Abfrage bei direktem SQL an die Datenbank schicke. Will ich bei so einer Abfrage direkt zum letzten Datensatz scrollen, so benötigt die Abfrage dafür bei mir auch eine Zeit von ca. 8 Sekunden. Dies ist merkwürdigerweise bei mir nur bei der HSQLDB der Fall. Nutze ich die interne Firebird-Variante, dann geht das sofort. Der Dialog in Firebird ist dementsprechend auch viel schneller geladen als der in HSQLDB. HSQLDB eben ca. 8 Sekunden, in Firebird unter 2 Sekunden. Eine MariaDB (direkter Treiber) zeigt bei mir wie Firebird keine nennenswerte Verzögerung beim Laden von über 8000 Datensätzen direkt in den Dialog. Sobald ich dann allerdings über JDBC gehe wird das ganze wieder ausgebremst. Das muss etwas mit der Einstellung FetchSize zu tun haben, die leider beständig für die SQL-Anweisung auf 1 steht. Schau einmal hier:
https://venkatsadasivam.com/2009/02/01/ ... etch-size/
Die Benutzeroberfläche von Base trägt dem anscheinend Rechnung. Mit einer Abfrage ohne direktes SQL scheint im Hintergrund der Dateninhalt beständig nachgeladen zu werden. Das direkte Bewegen zum letzten Datensatz erscheint deutlich schneller. Ich vermute, je schneller ich den Button nach der Abfrage betätige, desto langsamer erscheint das Ganze mir.
Also bin ich einen Schritt weiter gegangen und habe mir gesagt: Mach' es wie Microsoft. Täusche vor, dass alles da ist nur der Desktop ist noch nicht bedienbar.
Mit diesem Code erhalte ich die ersten 200 Datensätze aus meiner Tabelle und packe die schon einmal in den Dialog.
Dann erstelle ich eine 2. Prozedur, die an vom Dialog "on focus" ausgelöst wird - am liebsten wäre mir ja da der Scrollbalken des Tabellenkontrollfeldes.
Die Prozedur lädt nur einmal nach
Code: Alles auswählen
DIM inShow AS INTEGER
SUB GridFolgedatenZeigen
IF inShow = 0 THEN
inShow = 1
...
stSql = "SELECT LIMIT 200 0 * FROM ""Suchtabelle"" "
...
END IF
END SUB
Das lädt dann den ganzen Rest.
Binde ich das an das Gridcontrol, dann ist das eben erst nach der Ladezeit bedienbar. Der Dialog mit dem Startinhalt ist aber da.
Gruß
Robert