Seite 1 von 1

[gelöst] keine Speicherung geänderter Daten nach Migration HSQLDB > Firebird,

Verfasst: So 20. Okt 2019, 11:54
von Knox
Hallo,
nach Migration gem. Anleitung funktioniert fast alles wieder problemlos. Die Datenbank wird vom "Hauptformular" aus gesteuert. Benutzer sehen im Prinzip auch nur dieses Formular und die dort ausgewählten Formulare bzw. Berichte. Ich habe beim Funktionstest jedoch festgestellt, dass nach Makro-gesteuertem Schließen des Hauptformulars und Beenden von Base neu erfasste Daten und Änderungen nicht gespeichert werden, obwohl explizit die Speicherung "oDoc.store()" in dem bekannten Makro enthalten ist. Erst wenn ich das Hauptformular ohne Makro schließe und auf der Benutzeroberfläche Speichern bestätige oder Base schließe, werden die Datensätze gespeichert bzw. erscheint ein Hinweis. Unter HSQLDB hat alles einwandfrei funktioniert. Obwohl in jedem Formular die Speichern-Schaltfläche betätigt wird und die geänderten Daten in den Tabellen zu finden sind, werden sie beim Schließen von Base nicht übernommen.
Daher meine Frage: Kann man die doppelte Speicherbestätigung in Firebird per Makro auslösen oder handelt es sich um einen Fehler, der zur Zeit noch nicht zu beheben ist?

Gruß Knox

Re: keine Speicherung geänderter Daten nach Migration HSQLDB > Firebird,

Verfasst: Mi 23. Okt 2019, 07:52
von Wanderer
Hallo,

ohne Quelltext schwierig.

Ich suche Fehler meist erstmal bei mir, daher erst die Prüfung, ob das odoc.store() durchlaufen wird - msgbox etc.

Dann nach Roberts Hinweis im folgenden Link prüfen, ob odoc den richtigen Inhalt hat:
https://ask.libreoffice.org/de/question ... chliessen/

Das generell beim Beenden nicht gespeichert wird hätte sonst schon jemandem auffallen müssen.

Mfg, Jörn

Re: keine Speicherung geänderter Daten nach Migration HSQLDB > Firebird,

Verfasst: Mi 23. Okt 2019, 17:57
von Knox
Danke für den Hinweis Jörn. Kann es leider erst nächste Woche testen. Das Problem der doppelten Speicherabfrage mit Firebird wurde schon mehrfach im Netz erwähnt. Auch RobertG ist sich offenbar nicht sicher in seinem Lösungsansatz ob es funktioniert, aber klingt logisch. Die produktive Datenbank läuft schon seit Jahren problemlos mit embedded HSQLDB und daran wird erst etwas geändert, wenn sicher keine Fehler mehr auftreten.
Gruß Knox

Re: keine Speicherung geänderter Daten nach Migration HSQLDB > Firebird,

Verfasst: Sa 26. Okt 2019, 22:29
von Knox
Hallo,
ich habe leider immer noch keine Lösung für das Problem gefunden. Wenn ich wie bei HSQLDB per Makro
oDoc = ThisDatabaseDocument
oDoc.store()
oDoc.close(True)
StarDesktop.terminate()
das Hauptformular schließe und Libre Office beende, dann erscheint die zweite Aufforderung zum Speichern geänderter Daten nicht und alle Datenänderungen werden nicht übernommen.
Ich habe jetzt das Makro abgeändert, so dass nur das Hauptfomular geschlossen wird. Die Anwendung muss dann entweder manuell geschlossen werden, damit der Hinweis auf geänderte Daten erscheint oder vor Beendigung von Base wird der Speichern-Button betätigt. Nicht elegant, aber für den Übergang machbar. Meines Erachtens handelt es sich bei der doppelten Datenspeicherung um einen ärgerlichen Bug.
Gruß Knox

Re: keine Speicherung geänderter Daten nach Migration HSQLDB > Firebird,

Verfasst: So 27. Okt 2019, 08:51
von F3K Total
Moin,
denke man muss die Daten vor dem Speichern der .odb in die eingebettete Firebird-Datenbank zurückschreiben, das geht per Makro mit:

Code: Alles auswählen

ThisDatabasedocument.Datasource.flush
Gruß R

Re: keine Speicherung geänderter Daten nach Migration HSQLDB > Firebird,

Verfasst: Mo 28. Okt 2019, 10:07
von Knox
Das war genau das, was ich gesucht habe. Das Problem hat mich viel Zeit gekostet. Vielen Dank F3K Total. Meine Anmeldung in dem Forum hat sich schon richtig gelohnt. :D
Aus dem alten Makro (hatte ich mir mal als Muster kopiert und es wird wahrscheinlich oft verwendet) musste ich zusätzlich noch oController.ActiveConnection.close() entfernen, sonst funktioniert das Update der Datenbank nicht.

Mit diesem Makro funktioniert jetzt die Speicherung ohne weitere Rückfrage, das Schließen des Hauptformulars und der Anwendung:

Code: Alles auswählen

SUB speichern_und_beenden(event as object)
        oController = ThisDatabaseDocument.CurrentController
        oController.closeSubComponents
        oDoc = ThisDatabaseDocument
        oDoc.Datasource.flush
        oDoc.close(True)
        StarDesktop.terminate()   
END SUB 
Ich weiß nicht, ob diese Lösung optimal ist. Gerne nehme ich Änderungs- oder Verbesserungsvorschläge entgegen.