[erledigt] Tabelle vollständig einlesen
Moderator: Moderatoren
[erledigt] Tabelle vollständig einlesen
In einem Hilfsformular werden die Daten einer MySQL-Tabelle (ca. 200 Datensätze) zur Auswahl angeboten. Wenn das Formular aufgerufen wird, werden zunächst etwa 50 Datensätze angezeigt; erst während man im Tabellenkontrollfeld nach unten blättert, kommen nach und nach (relativ langsam) die weiteren Datensätze. Beim "normalen" Arbeitsablauf ist dieses Verhalten zwar nützlich, aber wenn eine Auswahl angeboten wird, möchte man von Anfang an eine vollständige Übersicht erhalten (zumal 200 Zeilen nicht übermäßig viel sind).
Gibt es irgendwo eine Einstellung, mit der ich das vollständige Einlesen erzwingen kann, bevor die Daten im Kontrollfeld angezeigt werden? Danke! Jürgen
Gibt es irgendwo eine Einstellung, mit der ich das vollständige Einlesen erzwingen kann, bevor die Daten im Kontrollfeld angezeigt werden? Danke! Jürgen
Zuletzt geändert von juetho am So, 23.09.2012 15:54, insgesamt 1-mal geändert.
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Re: Tabelle vollständig einlesen
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Tabelle vollständig einlesen
Schöner Trick, genügt aber noch nicht; es liefert bei last() die Fehlermeldung mit der maximalen Ungenauigkeit:
Danach über das Ereignis "Ansicht wurde erzeugt" direkt im Hilfsformular:
Schließlich habe ich diese Routine dem Ereignis "Dokument aktivieren" zugewiesen. (Dieses Ereignis passt eigentlich überhaupt nicht, denn es wird auch nach der Fehlermeldung erneut ausgelöst.) Dabei wurde das Makro einmal ausgeführt (natürlich mit der nötigen Pause), bei jedem späteren Aufruf folgt derselbe Fehler.
Ich habe den Verdacht, dass der Aufruf der Methode last() "zu schnell" kommt und der Befehl zum Laden der Daten innerhalb des Formulars noch nicht abgeschlossen ist. Ich vermute sehr stark, dass dein Trick trotzdem funktioniert, aber dass ich ihn in einen anderen Zusammenhang einbinden muss. Hast du auch dafür einen Tipp? Gruß Jürgen
Ich habe mehrere Varianten versucht: zunächst innerhalb des Makros, das das Hilfsformular aufruft:SQLException
Message:Fehler in der Funktionsfolge
Code: Alles auswählen
lkzForms = thisDatabaseDocument.FormDocuments.getByName("fibu.selectLkz").open
lkzForm = lkzForms.drawpage.forms.MainForm
' lkzForm.reload ' zunächst ohne, dann in einem weiteren Versuch mit reload
lkzForm.last
lkzForm.first
Code: Alles auswählen
Sub SelectLkzShowAll
oForm = thisComponent.drawpage.forms.MainForm
oForm.last
oForm.first
End Sub
Ich habe den Verdacht, dass der Aufruf der Methode last() "zu schnell" kommt und der Befehl zum Laden der Daten innerhalb des Formulars noch nicht abgeschlossen ist. Ich vermute sehr stark, dass dein Trick trotzdem funktioniert, aber dass ich ihn in einen anderen Zusammenhang einbinden muss. Hast du auch dafür einen Tipp? Gruß Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Re: Tabelle vollständig einlesen
Hi,
versuch es mal mit dem Ereignis "Beim Laden" von MainForm.
Gruß R
versuch es mal mit dem Ereignis "Beim Laden" von MainForm.
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Tabelle vollständig einlesen
Danke, das passt noch am ehesten. Es blieb nur das Problem aus meiner anderen Frage "Ladezeit eines Formulars beobachten/melden". Mit der MessageBox konnte ich hier nicht arbeiten; die passte nicht in die Reihenfolge der Befehle. Stattdessen habe ich den Auswahl-Button provisorisch mit "Bitte warten" beschriftet und ihn erst nach first() auf Enabled = true gesetzt. Das bringt zwar nach wie vor etwas Wartezeit, ist aber alles in allem in Ordnung. Gruß Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Re: [erledigt] Tabelle vollständig einlesen
Hi,
vielleicht hiflt Dir auch
In der API steht dazu:
FetchSize: retrieves the number of result set rows that is the default fetch size for result sets generated from this Statement object.
If this Statement object has not set a fetch size, the return value is implementation-specific.
Gruß R
vielleicht hiflt Dir auch
Code: Alles auswählen
oForm.FetchSize
FetchSize: retrieves the number of result set rows that is the default fetch size for result sets generated from this Statement object.
If this Statement object has not set a fetch size, the return value is implementation-specific.
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: [erledigt] Tabelle vollständig einlesen
In der Tat, das ist noch eine Verbesserung: Es verzichtet auf das Hin- und Herspringen der aktuellen Zeile bzw. unlockControllers() und scheint auch etwas schneller zu gehen. Abschließend gehört jetzt zum Ereignis "Beim Laden" des Hauptformulars folgende Routine:
Danke nochmals für deine hilfreiche Mitwirkung! Jürgen
Code: Alles auswählen
Sub SelectLkzShowAll
if not thiscomponent.currentcontroller.isFormDesignMode then
rem alle 240 Datensätze bereitstellen
oForm = thisComponent.drawpage.forms.MainForm
oForm.fetchSize = 240
rem nach dem Laden den OK-Button freigeben
btn = oForm.getByName("btnOK")
btn.Label = "Land übernehmen"
btn.Enabled = true
end if
End Sub
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC