🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[gelöst] base neue oder geänderte Datensätze sichern

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
malt14
Beiträge: 125
Registriert: Fr 7. Nov 2014, 06:21

[gelöst] base neue oder geänderte Datensätze sichern

Beitrag von malt14 » Fr 7. Nov 2014, 07:36

Guten Tag,

ich benutze LibreOffice Version: 4.2.7.2 unter Microsoft Windows 8.1 Home 6.03.9600 x64, Java 7 Update 71.

In einer base Datenbank - 1,25 MB - gebe ich neue Datensätze ein oder ändere Datensätze. Wenn LibreOffice oder der PC abstürzt, gehen alle Datensätze und Änderungen seit dem letzten Start von Base verloren.
LibreOffice Speicheroptionen sichern z.B. alle erfolgten Änderungen von Writer Dateien, den aktuellen Stand der Base Datei jedoch nicht.
Im Internet fand ich u.a. diesen Hinweis:
http://oooforum.de/viewtopic.php?t=61376&p=230164

Beim Ausführen von „Daten_aus_Cache_schreiben“ erfolgt ein BASIC-Laufzeitfehler (png: oDaten = ThisDatabaseDocument.CurrentController). Ohne „Daten_aus_Cache_schreiben“ wird nur die odb vor dem Base Start gesichert, was nicht hilft.

LibreOffice Version: 4.3.3. versuchte ich. Der gleiche Fehler tritt dort auch auf.
In dieser Version speichert Calc eine ods mit mehreren Verknüpfungen zum Internet nicht, LibreOffice Version: 4.3.3 stürzt bei diesem Speichern jedes mal ab.


Ich verfüge nur über geringe PC und LibreOffice Kenntnisse.

Die erneute Eingabe der Datensätze würde ich gerne vermeiden und bin deshalb für jede Hilfe sehr dankbar.

Grüße
malt14
Dateianhänge
oDaten = ThisDatabaseDocument.CurrentController.PNG
oDaten = ThisDatabaseDocument.CurrentController.PNG (259.96 KiB) 6731 mal betrachtet
Zuletzt geändert von malt14 am So 9. Nov 2014, 13:33, insgesamt 2-mal geändert.

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: base neue oder geänderte Datensätze sichern

Beitrag von RobertG » Fr 7. Nov 2014, 17:57

Hallo malt14,

ich sehe, dass Du das Makro nicht in der datenbankdatei liegen hast, sondern unter "Meine Makros ¬ Dialoge". Das Makro kann aber sowieso nur laufen, wenn die Datenbankdatei öffnet bzw. die Datenbankdatei offen ist.
Wie startest Du "Daten_aus_Cache_schreiben"? Das Beste wäre, dies mit einem Button in einem Formular der Datenbank zu erledigen.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

malt14
Beiträge: 125
Registriert: Fr 7. Nov 2014, 06:21

Re: base neue oder geänderte Datensätze sichern

Beitrag von malt14 » Fr 7. Nov 2014, 22:14

Guten Abend Robert,

Dank für Deine Information.

Ich versuchte, das Makro korrekt unterzubringen.

Starte ich „Daten_aus_Cache_schreiben“ aus dem Formular nach Eingabe neuer oder Änderung vorhandener Datensätze und danach „Datenbankbackup“ wird die Datei im vorgesehenen Sicherungspfad erstellt. Die neuen oder geänderten Datensätze fehlen; Zustand wie beim Start der Datenbank.
Ich starte die beiden Makros aus dem Formular über Extras/Makros..
In dem Datenerfassungsformular versuchte ich Button einzurichten, für „Daten_aus_Cache_schreiben“ und „Datenbankbackup“. „Daten_aus_Cache_schreiben“ Button kann ich anklicken, bei „Datenbankbackup“ erfolgt die beigefügte Fehlermeldung.

Lassen sich „Daten_aus_Cache_schreiben“ und „Datenbankbackup“ kombinieren, so daß man mit einem Button Klick neue oder geänderte Datensätze sichert?
Könnte man einen solchen Button in der Symbolleiste des Formulars platzieren?

Im Handbuch Base - Makros fand ich nichts dazu, kann aber an mir liegen.

Danke für Deine Hilfe

Grüße

malt14
Dateianhänge
Daten_aus_Cache_schreiben.PNG
Daten_aus_Cache_schreiben.PNG (89.68 KiB) 6730 mal betrachtet

malt14
Beiträge: 125
Registriert: Fr 7. Nov 2014, 06:21

Re: base neue oder geänderte Datensätze sichern

Beitrag von malt14 » Fr 7. Nov 2014, 22:15

button Datenbankbackup Fehler
Dateianhänge
button Datenbankbackup Fehler.PNG
button Datenbankbackup Fehler.PNG (105.56 KiB) 6730 mal betrachtet

malt14
Beiträge: 125
Registriert: Fr 7. Nov 2014, 06:21

Re: base neue oder geänderte Datensätze sichern

Beitrag von malt14 » Fr 7. Nov 2014, 22:16

button für Datenbankbackup
Dateianhänge
button für Datenbankbackup.PNG
button für Datenbankbackup.PNG (78.18 KiB) 6730 mal betrachtet

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: base neue oder geänderte Datensätze sichern

Beitrag von RobertG » Sa 8. Nov 2014, 10:02

Hallo malt14,

die Prozedur, die beide kombiniert, ist "Backup_sofort". Aus der heraus wird zuerst "Daten_aus_Cache_schreiben" ausgeführt und anschließend "Datenbankbackup". Die Prozedur "Backup_sofort" sollte also auf jeden Fall mit dem Button verbunden werden, wenn Du ein aktuelles Backup in das Sicherungsverzeichnis haben möchtest.

Ich habe gerade noch einmal das Makro durchprobiert. Werte in einer Tabelle neu geschrieben, das Makro "Backup_sofort" laufen lassen und anschließend die so erstellte Backup-Datei einmal aufgesucht. In der Datei war auch der neue Eintrag vorhanden.

Erscheint bei Dir grundsätzlich die Fehlermedlung "Pfad nicht gefunden"? Dann mach' doch einmal die Einträge
msgbox sUrl_Start
msgbox sUrl_Ziel
Dann siehst Du, welcher Pfad durch das Makro ausgewählt wird.
Kann ja sein, dass irgendwelche Fehler auftauchen, die mit der Wahl von Dateinamen zusammen hängen. Ich habe PCs kennen gelernt, als Dateinamen noch auf 8 Buchstaben ohne Soderzeichen begrenzt waren. Auch heute noch wirst Du bei mir keinen Dateinamen und auch keine Tabellenbezeichnung finden, in der Sonderzeichen, auch Leertasten o.ä. auftauchen. Einzige Zeichen, das ich neben den normalen Buchstaben und Zahlen nutze, ist der Unterstrich.

Habe den Fehler gefunden! Das Makro hatte ich grundsätzlich nur mit dem Start der Base-datei getestet - nicht aus dem geöffneten Formular. Das interne Formular gibt keine URL zurück.
Es hilft:

Code: Alles auswählen

oDoc = ThisComponent
sUrl_Start = oDoc.URL
sTitel = oDoc.Title
DO WHILE sUrl_Start = ""
oDoc = oDoc.Parent
sTitel = oDoc.Title
sUrl_Start = oDoc.URL
LOOP
Damit wird auf jeden Fall die korrekte URL ausgelesen. Ich habe das jetzt auch aus einem Formular und aus einem Subformular getestet. Muss ich sofort im Handbuch ändern. Dann schreibe ich auch gleich noch dazu, wie die Erweiterung auf beliebig viele Backups geht ...

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

malt14
Beiträge: 125
Registriert: Fr 7. Nov 2014, 06:21

Re: base neue oder geänderte Datensätze sichern

Beitrag von malt14 » Sa 8. Nov 2014, 15:25

Hallo Robert,

zunächst herzlichen Dank für Deine Hilfe bisher und, soweit ich das beim kursorischen Lesen im Internet bemerkte, Dein Engagement für das schöne LibreOffice Projekt.

Mit dem zusätzlichen Code funktioniert das „Backup_sofort“ aus dem Formular über „Extras ..“.

Code: Alles auswählen

REM  *****  BASIC  *****


SUB Datenbankbackup
   REM Von der Datenbankdatei *.odb wird eine Kopie in das Backup-Verzeichnis erstellt.
   REM Die Maximalzahl an Kopien ist auf 5 Kopien eingestellt. Anschließend wird die älteste Kopie ersetzt.
   REM Dieses Verfahren deckt nicht ab:
   REM - Dateneingaben, die bei bereits geöffneter Datenbank gemacht werden, da die Daten erst beim Schließen der Datei in die *.odb-Datei geschrieben werden.
   REM Siehe dazu die Prozedur "Daten_aus_Cache_schreiben"
   DIM oPath AS OBJECT
   DIM oDoc AS OBJECT
   DIM sTitel AS STRING
   DIM sUrl_Ziel AS STRING
   DIM sUrl_Start AS STRING
   DIM i AS INTEGER
   DIM k AS INTEGER
   oDoc = ThisComponent
   sTitel = oDoc.Title   'Name des Dokumentes, z.B. Medien_mit_Makros.odb'
   sUrl_Start = oDoc.URL   'Pfad zu dem Titel'
   oPath = createUnoService("com.sun.star.util.PathSettings")
   FOR i = 1 TO 6
      IF NOT FileExists(oPath.Backup & "/" & i & "_" & sTitel) THEN
      REM Im Backup-Verzeichnis des Datenbanknutzers von LO wird gespeichert, und zwar beginnend mit der Nummer, gefolgt durch einen Unterstrich und weiter mit dem ursprünglichen Titel.
         IF i > 5 THEN   
         REM Wenn i größer als 5 wird existieren bereits 5 Sicherheitskopien. Jetzt muss nachgesehen werden, welche Kopie die älteste ist, um diese zu ersetzen.
            FOR k = 4 TO 1 STEP -1
               IF FileDateTime(oPath.Backup & "/" & k & "_" & sTitel) <=  FileDateTime(oPath.Backup & "/" & k+1 & "_" & sTitel) THEN
               REM Die Datei mit der Nummer 4 muss auf vor der mit der Nummer 5 erstellt worden sein. Ist dies der Fall, so wird weiter gesucht.
               REM Die Suche beginnt also bei 4 und wird abwärts fortgesetzt, immer im direkten Vergleich mit der nächst höheren Ziffer.
               REM Ist 1 erreicht und immer noch vor 2 erstellt worden, so wird 1 ersetzt.
                  IF k = 1 THEN
                     i = k
                     EXIT FOR
                  END IF
               ELSE
               REM ist eine Zahl erreicht worden, bei der die Datei mit der höheren Nummer älter ist als die Datei mit der niedrigeren Nummer, so wird die Datei mit der höheren Nummer ersetzt.
                  i = k+1
                  EXIT FOR
               END IF
            NEXT
         END IF
         EXIT FOR
      END IF
   NEXT
   sUrl_Ziel = oPath.Backup & "/" & i &"_" & sTitel
   REM Der Pfad für die Zieldatei wird festgelegt und das Dokument zur Zieldatei hin kopiert.
   FileCopy(sUrl_Start,sUrl_Ziel)
END SUB

SUB Daten_aus_Cache_schreiben
oDoc = ThisComponent
sUrl_Start = oDoc.URL
sTitel = oDoc.Title
DO WHILE sUrl_Start = ""
oDoc = oDoc.Parent
sTitel = oDoc.Title
sUrl_Start = oDoc.URL
LOOP
   REM Schreibt die Daten aus der Tabelle auch während der Laufzeit von Base direkt auf die Platte.
   DIM oDaten AS OBJECT
   DIM oDataSource AS OBJECT
   oDaten = ThisDatabaseDocument.CurrentController
   IF NOT ( oDaten.isConnected() ) THEN oDaten.connect()
   oDataSource = oDaten.DataSource
   oDataSource.flush
END SUB

SUB Backup_sofort
   Daten_aus_Cache_schreiben
   Datenbankbackup
END SUB
Per Button erhalte ich noch immer die gleiche Fehlermeldung.
Kann das an meinen Einstellungen im Button liegen?
Wenn ich in dem Fenster der Fehlermeldung den Button „Makro auswählen“ anklicke und dann „Backup_sofort“, funktioniert es.

Per Button wird zunächst „soffice“ angezeigt, der folgende Pfad stimmt mit dem überein, in den per „Extras ..“ gespeichert wird.

Auch in einer neuen Testdatenbank mit einfachem Namen funktionierte der Button nicht.
Das Löschen der LibreOffice Roaming Daten und Starten der Testdatenbank führte zu keiner Änderung.
Ich weiß nicht, ob eine Neuinstallation von LibreOffice sinnvoll wäre.

Als Laie kann ich nicht beurteilen, ob es mit vertretbarem Aufwand möglich ist, in LibreOffice eine Funktion zum Speichern der odb mit geänderten Datensätzen einzubauen. Auf meinem System stürzt LibreOffice gelegentlich ab - meist wenn ich neben Base noch Calc benutze - und die erneute Eingabe mehrerer Datensätze ist lästig.


Grüße
Malt14
Dateianhänge
button.PNG
button.PNG (17.27 KiB) 6698 mal betrachtet

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: base neue oder geänderte Datensätze sichern

Beitrag von RobertG » Sa 8. Nov 2014, 17:10

Hallo malt14,

Du hast die ergänzung an der falschen Stelle eingebaut.
Dieser Code aus «Datenbankbackup»:

Code: Alles auswählen

oDoc = ThisComponent
sTitel = oDoc.Title   'Name des Dokumentes, z.B. Medien_mit_Makros.odb'
sUrl_Start = oDoc.URL   'Pfad zu dem Titel'
sollte durch diesen Code ersetzt werden:

Code: Alles auswählen

oDoc = ThisComponent
sUrl_Start = oDoc.URL
sTitel = oDoc.Title
DO WHILE sUrl_Start = ""
oDoc = oDoc.Parent
sTitel = oDoc.Title
sUrl_Start = oDoc.URL
LOOP
Ich habe das jetzt für das kommende Handbuch LO 4.4 überarbeitet und noch erweitert, so dass die Anzahl der Backups eingestellt werden kann. Im Handbuch steht jetzt auch, wie das Makro in der Base-Oberfläche direkt einer Symbolleiste zugewiesen werden kann - zusammen mit Screenshots: http://robert.familiegrosskopf.de/lo_hb_dev/

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

malt14
Beiträge: 125
Registriert: Fr 7. Nov 2014, 06:21

Re: base neue oder geänderte Datensätze sichern

Beitrag von malt14 » Sa 8. Nov 2014, 18:41

Hallo Robert,

vielen Dank.
Alles funktioniert!

Grüße

malt14

Freischreiber
* LO-Experte *
Beiträge: 830
Registriert: Fr 28. Mär 2014, 10:41

Re: [gelöst] base neue oder geänderte Datensätze sichern

Beitrag von Freischreiber » Di 18. Nov 2014, 19:28

Hallo,
Kann ja sein, dass irgendwelche Fehler auftauchen, die mit der Wahl von Dateinamen zusammen hängen.
Das kann ich leider bestätigen! Nach diesem Hinweis habe ich meinen Datenbank-Dateinamen, der ein Leerzeichen enthalten hatte, geändert. Und jetzt funktioniert das Makro Datenbankbackup plötzlich, wie es soll. Bisher hatte es, wenn fünf Sicherungen gespeichert waren, künftig immer nur dieselbe aktualisiert beim Öffnen, die anderen vier blieben gleich.

Gruß
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten