Formular: Wie setze ich den Focus bei einem Tabellenkontrollfeld?

Liebe Liste,

ich konstruiere gerade ein Formular mit einem Tabellenkontrollfeld, in
dem bei falschen Eingaben der Focus auf das falsche Feld zurückgesetzt
werden soll:
oDoc = thisComponent
oDrawpage = oDoc.Drawpage
oForm = oDrawpage.Forms.getByName("Filter")
oSubForm = oForm.getByName("Ausleihe")
oFeld = oSubForm.getByName("Grid")
REM Der Controller ist in diesem Fall das Tabellenkontrollfeld. Die
Teile der Tabelle sind nur über den Index erreichbar.
oDocCrl = ThisComponent.getCurrentController()
oCtlView = oDocCrl.GetControl(oFeld)
oListView = oCtlView.getByIndex(0)
oListView.setFocus()

Die Methode "setFocus" ist in den Methoden aufgeführt (dbg_methods).
Allein der Cursor reagiert darauf nicht.
Ich meine, so etwas schon einmal erreicht zu haben - nur wie?

Gruß

Robert

Ich antworte mir kurz selbst, damit klar ist, dass sich die Sache
erledigt hat:

ich konstruiere gerade ein Formular mit einem Tabellenkontrollfeld, in
dem bei falschen Eingaben der Focus auf das falsche Feld zurückgesetzt
werden soll:
oDoc = thisComponent
oDrawpage = oDoc.Drawpage
oForm = oDrawpage.Forms.getByName("Filter")
oSubForm = oForm.getByName("Ausleihe")
oFeld = oSubForm.getByName("Grid")
REM Der Controller ist in diesem Fall das Tabellenkontrollfeld. Die
Teile der Tabelle sind nur über den Index erreichbar.
oDocCrl = ThisComponent.getCurrentController()
oCtlView = oDocCrl.GetControl(oFeld)
oListView = oCtlView.getByIndex(0)
oListView.setFocus()

Die Methode "setFocus" ist in den Methoden aufgeführt (dbg_methods).
Allein der Cursor reagiert darauf nicht.
Ich meine, so etwas schon einmal erreicht zu haben - nur wie?

Auch wenn "setFocus" vorgesehen ist funktioniert es anscheinend nicht.
Ich muss nach oCtlView, also der Ansicht des Tabellenkontrollfeld gehen
und dann
oCtlView.SetCurrentColumnPosition(0)
setzen - dann springt der Cursor zurück und ich werde zu einer neuen
Eingabe veranlasst.

Gruß

Robert

Hallo Liste,

ich wollte mal fragen, ob irgendwer ein ähnliches "Problem" hat - bzw.
eine Lösung für meines :wink:

Ich habe etwa 20 PCs (Win2k, WinXP, Ubuntu), die mittels Base-
Datenbanken und dem bei LO vorinstallierten "MySQL Connector for
OpenOffice 1.0.1" auf einen MySQL-Server (Früher 5.0.x, jetzt 5.1.54
und anderer Computer) zugreifen. Auf den Rechnern ist LibreOffice
3.3.2 installiert, testweise auf einem der Rechner LibreOffice 3.4.5.

Die Extension arbeitet eigentlich zur vollsten Zufriedenheit - bis auf
ein Manko, das in täglichen Betrieb extrem störend ist, und bei jedem
Rechner auftritt:

Wenn Base das erste Mal auf eine Tabelle zugreift, dauert das (je nach
Tabelle) bis zu 40 Sekunden. Es kam noch nie zu einem Programmabsturz
oder Fehler, lediglich der Bildschirm war eingefroren. Früher hatten
wir den Server 5.0 für den der Treiber nicht funktionieren soll (tut
er aber doch), da war das Phänomen am Anfang nach dem Einloggen in die
Datenbank zu beobachten. 3-4 Minuten ging gar nix, dann war das Programm
normal zu bedienen, so lange die Connection über den "Schnellstarter"
gespeichert blieb. Ich dachte, dass würde sich dann mit der neuen
Serversoftware geben ... aber es hat sich nur verändert - der Start der
Datenbank erfolgt unmittelbar, und ohne Verzögerung (das Startformular
ist nicht an Daten gebunden), dafür muss man jetzt bei jedem
Formularstart einen Kaffee mit einkalkulieren.

Ich wollte daher den Status unter Server 5.0.x nachbauen und hab in das
Startmakro eine Routine eingebaut, die auf alle Tabellen erstmals
zugreift. (ein Statement.Objekt von ThisDatabaseDocument.
CurrentController.ActiveConnection in der alle Tabellen mit

Hallo,

Die Verzögerungen treten also immer dann auf, wenn die Oberfläche von
Base versucht auf den Server zuzugreifen. Selbiges kann beim Erstellen
von Abfragen im Editor oder beim Ansehen einer Tabelle beobachtet
werden.

Meine Frage daher: hat jemand schon Ähnliches erlebt, bzw. gibt's
irgendwelche Tipps diese langsamen Zugriffe zu beschleunigen?

Formular vielleicht ausserhalb der ODB-Datei speichern (Verbindung mit der DB im Formular wiederherstellen, sonst ist sie weg), und dann geteilt aufrufen ? Es kommt, so wie ich das verstehe, darauf, dass LO den kompletten Ergebnissatz im Speicher laden muss, um ein Navigationskursor (Scroll Cursor) im Formular setzen zu können. Vielleicht kann mas das umgehen, in dem man das Formular auf eine Abfrage baut, die nur einen Unterteil der Tabellenergebnisse zurückweist ??

Alex

Hallo,

Die Verzögerungen treten also immer dann auf, wenn die Oberfläche von
Base versucht auf den Server zuzugreifen. Selbiges kann beim Erstellen
von Abfragen im Editor oder beim Ansehen einer Tabelle beobachtet
werden.

Meine Frage daher: hat jemand schon Ähnliches erlebt, bzw. gibt's
irgendwelche Tipps diese langsamen Zugriffe zu beschleunigen?

Formular vielleicht ausserhalb der ODB-Datei speichern (Verbindung mit der DB im Formular wiederherstellen, sonst ist sie weg), und dann geteilt aufrufen ?

bringt leider nichts.

Es kommt, so wie ich das verstehe, darauf, dass LO den kompletten Ergebnissatz im Speicher laden muss, um ein Navigationskursor (Scroll Cursor) im Formular setzen zu können.

hätte ich auch gedacht, aber ...

Vielleicht kann mas das umgehen, in dem man das Formular auf eine Abfrage baut, die nur einen Unterteil der Tabellenergebnisse zurückweist ??

... auch wenn ich auf einen eindeutig sortierten Schlüssel zurückgreife
und im Resultset nur der erste Datensatz abgefragt wird verändert sich
nichts.

Ausserdem passiert's ja immer wenn die Oberfläche das erste Mal
auf mehr als den Tabellennamen zugreift, also auch dann wenn nur
Tabellendefinitionen gefragt sind (wären) wie z.B. beim Erstellen
von Abfragen.

Mittlerweile stehe ich kurz davor, alle Datenbanken des Servers in einer
zu vereinen und dann mit jdbc oder odbc zuzugreifen, da bestehen die
Verzögerungen nicht, egal wie auf die Tabellen/Abfragen/Views
zugegriffen wird.