Hallo Jott,
nicht ganz, ich steuere meine Datenbank über eigene Menüs.
Aus diesen Menüs heraus öffne ich mal ein Formular und mal einen Dialog.
Ich öffne also meine Datenbank, und öffne dann
direkt, ohne in die Ansicht "Tabellen" zu wechseln oder ein Fomular per Doppelklick in der Ansicht "Formulare" zu öffnen, ein Formular oder einen Dialog über ein Menü, an dem ein Makro hängt.
Auf diese Weise kommt das Problem meiner Einschätzung nach zustande:
Um Daten in die Datenbank speichern zu können, muß es zwischen Datenbank-Dokument und der eingebetteten HSQLDB, sprich dem Ort, an dem die Daten gespeichert werden, eine "activeConnection" geben.
Mit xray von der Benutzeroberfäche der Datenbank aus, kann man diese "activeConnection" beobachten, und zwar mit dem Befehl
Solange man in Base nicht in die Ansicht "Tabellen" gewechselt ist, bzw. kein Formular in der Ansicht "Formulare" per Doppelklick geöffnet hat, ist die "activeConnection" nicht vorhanden, zeigt im xray keinen Inhalt.
Ich dachte bisher, mit einem Makro und dem o.a. Befehl
Code: Alles auswählen
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext") ...
wird diese Verbindung erzeugt.
Komischerweise kommt sie auch halbwegs zustande, denn die per Makro geöffneten Dokumente zeigen ja Daten an, sprich, es werden Daten aus der Datenbank (embeddet-HSQLDB) gelesen.
Wenn nun aber Daten geändert werden, wie gesagt, der Dialog oder das Formular wurde per Makro geöffnet, und die Datenbank dann wieder geschlossen wird, sind die eingegebenen Daten weg, also nicht abgespeichert, nicht in die Datenbank geschrieben.
Wenn man stattdessen, vor dem Öffnen eines Formulares oder eines Dialoges per Makro, einmal in die Tabellenansicht wechselt oder ein Formular per Doppelklick öffnet, ist die "activeConnection" im xray nicht mehr leer.
Sprich die Verbindung in die HSQLDB ist "geschaltet" und zwar fürs Lesen und fürs Schreiben.
Ab jetzt werden alle geänderten, hinzugefügten Daten sauber abgespeichert.
Also, aus meiner Sicht handelt es sich hier um einen Bug in Base.
Die Frage ist, wie können wir sicherstellen, dass die "activeConnection" zustande kommt, ohne vorher ein Formular per Doppelklick zu öffnen oder in die Ansicht "Tabellen" wechseln zu müssen?
Hat jemand eine Idee?