Seite 1 von 2
[GELÖST]: Direktstart Formular funktioniert nicht mehr nach schließen LO
Verfasst: Di 1. Nov 2022, 10:39
von Titus001
Hallo Zusammen,
vielleicht hat jemand eine Lösung bei folgendem Problem:
Habe den Direktstart mit Dokument öffnen verbunden:
SUB Formular_Direktstart
REM Start des ausgewählten Formular beim Öffnen der DB
DIM oDatenquelle AS Object
oDatenquelle = ThisDatabaseDocument.CurrentController
If NOT (oDatenquelle.isConnected()) THEN
oDatenquelle.connect()
END IF
Wait 1000
oDatenquelle.loadComponent(com.sun.star.sdb.application.DatabaseObject.FORM, "frm_Startseite", FALSE)
End Sub
Das funktioniert auch wenn ich die DB öffne und schließe ohne Probleme (mehrfach probiert)
Wenn ich allerdings LO schließe und die DB dann aus dem Explorer erneut öffne bleibt das Makro bei
oDatenquelle.loadComponent(com.sun.star.sdb.application.DatabaseObject.FORM, "frm_Startseite", FALSE)
hängen (Habe deshalb temporär das Wait eingebaut)
Bin dankbar für jeden Hinweis.
Gruß
Re: Direktstart Formular funktioniert nicht mehr nach schließen LO
Verfasst: Mi 2. Nov 2022, 21:15
von RobertG
Hallo Titus001,
ich würde das einfach über
Code: Alles auswählen
SUB FormOpen
ThisDatabaseDocument.FormDocuments.getByName("frm_Startseite").open
END SUB
lösen. Das Ganze an
Extras → Anpassen → Ansicht wurde erzeugt des Datenbankdokuments binden und die Öffnung läuft problemlos. Die Verknüpfungen von Makro und auslösendem Ereignis musst Du auch gegebenenfalls testen. Manchmal funktioniert auch
→ Dokument öffnen.
Wenn ich allerdings LO schließe und die DB dann aus dem Explorer erneut öffne …
Hier meinst Du wohl ein Öffnen direkt aus der Windows-Benutzeroberfläche ohne den Start des Startmoduls von LibreOffice, oder? Da kann ich unter Linux nichts zu sagen.
Re: Direktstart Formular funktioniert nicht mehr nach schließen LO
Verfasst: Do 3. Nov 2022, 08:35
von Titus001
Hallo Robert,
danke für die Rückmeldung.
Wenn ich den Code an "Ansicht erzeugen" binde passiert gar nichts.
Ohne die Datenquelle zu verbinden und an "Dokument öffnen" gibt es die folgende Fehlermeldung:
BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.lang.WrappedTargetException
Message:
TargetException:
Type: com.sun.star.sdbc.SQLException
Message: [OOoBase] Es besteht keine Verbindung zur Datenbank..
Ich habe sowohl versucht das Makro in der Dokumentenbibliothek als auch in der LibreOfficeBibliothek zu sichern und
beim Start der DB zu aktivieren. Irgendwie schaffe ich es nicht in der Startsequenz die Verbindung zu DB zu erreichen.
Registriert ist ist die DB - ist also nicht das Problem.
Ich fahre übrigen auf MAC OS 11.7.1 nicht Windows.
Für jeden Typ dankbar

Re: Direktstart Formular funktioniert nicht mehr nach schließen LO
Verfasst: Do 3. Nov 2022, 09:48
von RobertG
Wenn ich den Code an "Ansicht erzeugen" binde passiert gar nichts.
… müsste "Ansicht erzeugt" heißen - die Ansicht ist dann da.
Das sind so die üblichen Merkwürdigkeiten. Ich habe das hier in einer Prozedur, die vorher die Datenbankdatei als Sicherungskopie hinterlegt und dann erst das Formular startet. Dabei ist aber kein weiterer Kontakt zur Datenbank erstellt.
Müsste
Dann doch wohl besser erst den Kontakt zur Datenbank erstellen, wie Du das gemacht hast:
Code: Alles auswählen
SUB FormOpen
oDatenquelle = ThisDatabaseDocument.CurrentController
If NOT (oDatenquelle.isConnected()) THEN oDatenquelle.connect()
ThisDatabaseDocument.FormDocuments.getByName("frm_Startseite").open
END SUB
Re: Direktstart Formular funktioniert nicht mehr nach schließen LO
Verfasst: Do 3. Nov 2022, 11:18
von Titus001
… müsste "Ansicht erzeugt" heißen - die Ansicht ist dann da.
ja richtig "Ansicht wurde erzeugt" - meinte ich auch.
Aber auch mit Kontakt zur Datenbank erzeugt
f NOT (oDatenquelle.isConnected()) THEN oDatenquelle.connect()
passiert bei der Anbindung an "Ansicht wurde erzeugt" gar nichts
Wo ist den deiner Erfahrung nach das Ereignis zu sichern?
In der Bibliothek der DB oder in der von LibreOffice (MeineMakros)
Re: Direktstart Formular funktioniert nicht mehr nach schließen LO
Verfasst: Do 3. Nov 2022, 12:22
von RobertG
Wo ist den deiner Erfahrung nach das Ereignis zu sichern?
In der Bibliothek der DB oder in der von LibreOffice (MeineMakros)
Ich sichere grundsätzlich alle Makros in der Datenbankdatei. Das mache ich schon allein deswegen, weil ich Datenbanken auch an andere Personen weiter gebe und die dort genauso funktionieren sollen wie bei mir.
Wenn Du sonst mit so etwas wie "ThisComponent", "ThisDatabaseDocument" und ähnlichem arbeitest kann das zu Problemen führen. Da ist dann eine sichere Verbindung nur so möglich:
Code: Alles auswählen
DIM oDatabaseContext AS OBJECT
DIM oDatasource AS OBJECT
DIM oConnection AS OBJECT
oDatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
oDatasource = oDatabaseContext.getByName("angemeldeter Name der Datenbank in LO")
oConnection = oDatasource.GetConnection("","")
Habe ich alles im Handbuch gesammelt.
Re: Direktstart Formular funktioniert nicht mehr nach schließen LO
Verfasst: Do 3. Nov 2022, 14:58
von Titus001
Habe ich alles im Handbuch gesammelt.
Da habe ich doch alle Versuche und Infos her
Und bisher hat auch alles super geklappt
Ausblenden der Steuerelemente etc.
Nur jetzt hänge ich fest
eine sichere Verbindung nur so möglich:
Habe ich auch so im Mako eingebaut:
Code: Alles auswählen
SUB Formular_Direktstart
REM Start des ausgewählten Formular beim Öffnen der DB
DIM oDBContext AS OBJECT
DIM oDataSource AS OBJECT
DIM oConnectToDB AS OBJECT
DIM oDatenquelle AS OBJECT
oDBContext=createUnoService("com.sun.star.sdb.DatabaseContext")
oDataSource=oDBContext.getByName("NeueTurnierDB")
oConnectToDB=oDataSource.GetConnection ("","")
oDatenquelle = ThisDatabaseDocument.CurrentController
If NOT (oDatenquelle.isConnected()) THEN
oDatenquelle.connect()
END IF
ThisDatabaseDocument.FormDocuments.getByName("frm_Startseite").open
REM alternativ geht auch:
REM oDatenquelle.loadComponent(com.sun.star.sdb.application.DatabaseObject.FORM,"frm_Startseite", FALSE)
End Sub
Das Makro ist mit "Dokument öffnen" in der Datenbank gesichert.
Alles wir gehabt: es funktioniert super solange LO nicht geschlossen wird. Ich kann die DB (bei aktivierten LO) starten und es geht direkt in das Startformular. Kann die DB schließen und beim erneuten öffnen alles super.
Beende ich LO und starte es erneut hängt sich das Makro beim Laden des Formulars auf.
Hatte gehofft jemand hatte mal das gleiche Problem und eine Lösung gefunden.
Re: Direktstart Formular funktioniert nicht mehr nach schließen LO
Verfasst: Do 3. Nov 2022, 15:32
von RobertG
Zum Schluss hin hast Du alles mögliche doppelt und dreifach in Deinem Makro.
Wo liegen denn nun die Makros? Alle Makros im Handbuch liegen in der Datenbankdatei, sofern da nicht ausdrücklich etwas anderes steht (wie z.B. das Starten eines Berichtes von einem externen Formular).
Lade Doch einmal eine kleine Beispieldatei hoch, bei der das bei Dir nicht klappt. Die braucht ja gerade einmal eine Tabelle ohne Inhalt, ein Formular dazu und das entsprechende Makro.
Re: Direktstart Formular funktioniert nicht mehr nach schließen LO
Verfasst: Do 3. Nov 2022, 18:42
von Titus001
Hallo Robert,
ich habe mal die DB auf das Problem reduziert. Konnte die .odb nicht hochladen, deswegen .zip
Wenn du die DB mit Makro Startes bleibt sie hängen. Vielleicht findest du ja einen Grund.
Danke für deinen Bemühungen.
Re: Direktstart Formular funktioniert nicht mehr nach schließen LO
Verfasst: Do 3. Nov 2022, 20:50
von RobertG
Hallo Titus,
ich habe das jetzt auf
Code: Alles auswählen
SUB Formular_Direktstart
oDatenquelle = ThisDatabaseDocument.CurrentController
If NOT (oDatenquelle.isConnected()) THEN
oDatenquelle.connect()
END IF
ThisDatabaseDocument.FormDocuments.getByName("frm_Startseite").open
END SUB
beschränkt, da das Makro ja in der Datenbankdatei liegt. Unter LO 7.3.6.2 startet alles einwandfrei und auch das Formular startet. Unter LO 7.4.2.3 startet das Ganze beim ersten Durchlauf einwandfrei. Beim 2. Durchlauf wird aber das Formulare nicht geöffnet. Ich habe ähnliches schon einmal gesehen. Da muss ich ein einfaches Beispiel nachbauen und einen Bug für ausgeben.
Auch der Start mit "Ansicht wurde erzeugt" läuft einwandfrei - bis auf die Wiederholung bei LO 7.4.2.3. Da startet nicht einmal das Makro sondern nur die Fehlermeldung. Habe das als
https://bugs.documentfoundation.org/sho ... ?id=151879 gemeldet.