GELÖST Backup per Makro, Aufruf vom Formular

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

GELÖST Backup per Makro, Aufruf vom Formular

Beitrag von WSO »

Hallo Zusammen,
ich habe das Makro für Backup aus dem Base-Handbuch in meine Anwendung übernommen.
Es wird über ein Formular, in dem weitere Administratorfunktionen angesiedelt sind, aufgerufen.

Zum Aufruf über ein Formular sind die Zuweisungen der Start.- und Ziel-URL so anzupassen:

Code: Alles auswählen

	sTitel = ThisDatabaseDocument.Title
	sUrl_Start = ThisDatabaseDocument.URL
Ist ein nettes Teil, Dank an den Author.
Gruss,
WSO
Zuletzt geändert von WSO am Mo, 14.07.2014 23:33, insgesamt 1-mal geändert.
acco
***
Beiträge: 52
Registriert: So, 04.05.2014 19:54

Re: Backup per Makro, Aufruf vom Formular

Beitrag von acco »

Hallo Wolfram,

das kann bei eingebetteten Datenbanken zu trügerischer Sicherheit führen, da die Datenbank zum Zeitpunkt des Speicherns unter Umständen schon länger geöffnet ist. Alle Eingaben und Änderungen seit öffnen der Datenbank werden bei Ausführung des Makros nicht gespeichert, sind dann also verloren. Wenn das jedem User klar ist, dann ok.

Deshalb läßt Robert das Makro beim öffnen der DB automatisch im Hintergrund ausführen, der User wähnt sich so nicht in falscher Sicherheit. Der Vorteil der Ausführung des Makros aus einem Formular (bei eingebetteter DB) ist mir nicht ersichtlich. Vielleicht hilfst Du mir da auf die Sprünge? Denn ich bin Deiner Meinung, es ist ein "nettes Teil".

Gruß

acco
openSUSE 13.1, LibreOffice 4.3.2.2
RobertG
********
Beiträge: 2034
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Backup per Makro, Aufruf vom Formular

Beitrag von RobertG »

Hallo Wolfram, hallo acco,

aus dem Grunde steht in der Beispieldatenbank auch die Erweiterung, die ich auch hier im Formul aus den Diskussionen aufgegriffen habe:

Code: Alles auswählen

SUB Daten_aus_Cache_schreiben
	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
Die *.odb-Datei wird ja erst beim Abspeichern verändert geschrieben. Soll also während der geöffneten Datei ein Backup gemacht werden, so muss zuerst der temporäre Inhalt in die *.odb-Datei übertragen werden. Das macht "Daten_aus_Cache_schreiben".

Gruß

Robert
acco
***
Beiträge: 52
Registriert: So, 04.05.2014 19:54

Re: Backup per Makro, Aufruf vom Formular

Beitrag von acco »

Hallo Robert, hallo Wolfram,

dann mach ich aus "nett" mal "klasse". Die Erweiterung kannte ich noch nicht. Danke!

Gruß

acco
openSUSE 13.1, LibreOffice 4.3.2.2
WSO
*****
Beiträge: 233
Registriert: Di, 22.04.2014 13:03

Re: Backup per Makro, Aufruf vom Formular

Beitrag von WSO »

Hallo acco und Robert,
ja stimme voll und ganz zu, die Erweiterung von Robert kannte ich, ist nur noch nicht eingebaut.
Den Hinweis die Sicherung automatisch beim Anlauf zu machen finde ich wertvoll.
Da die Datenbank aber etliche male pro Tag geöffnet wird, denke ich jetztz drüber nach, die Sicherung max 1 X pro Tag automatisch laufen zu lassen, dem Anwender aber die Möglichkeit einer zusätzlichen Sicherung anzubieten.
Gruss,
Wolfram
tobiman26
***
Beiträge: 63
Registriert: Mi, 20.01.2016 15:17
Kontaktdaten:

Re: GELÖST Backup per Makro, Aufruf vom Formular

Beitrag von tobiman26 »

Hallo Leute das ist genau das was ich gesucht habe
ich habe die Version aus dem Base handbuch übernommen das bezieht aber nicht wie hier genannt die URL die man angibt sondern die die man unter Extras Einstellungen OpenOffice Pfade als Sicherungsordner gewählt hat nun habe ich folgendes Problem beim ausführen des Makros kommt der Fehler
" Pfad nicht gefunden "

Code: Alles auswählen

SUB Datenbankbackup
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
sUrl_Start = oDoc.URL
oPath = createUnoService("com.sun.star.util.PathSettings")
FOR i = 1 TO 6
IF NOT FileExists(oPath.Backup & "/" & i & "_" & sTitel) THEN
IF i > 5 THEN
FOR k = 4 TO 1 STEP -1
IF FileDateTime(oPath.Backup & "/" & k & "_" & sTitel) <= FileDateTime(oPath.Backup & "/" & k+1 & "_" & sTitel) THEN
IF k = 1 THEN
i = k
EXIT FOR
END IF
ELSE
i = k + 1
EXIT FOR
END IF
NEXT
END IF
EXIT FOR
END IF
NEXT
sUrl_Ziel = oPath.Backup & "/" & i &"_" & sTitel
FileCopy(sUrl_Start,sUrl_Ziel)
END SUB

SUB Daten_aus_Cache_schreiben
   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

könnt ihr mir da weiter helfen weil der Ordner den ich ausgewählt habe existiert
Mfg Tobias 8)

Windows 7 64bit + AOO 4.1.2 + LO 5.0.0.0
OpenSUSE 42.1 32 bit + LO 5.0.2.2
RobertG
********
Beiträge: 2034
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: GELÖST Backup per Makro, Aufruf vom Formular

Beitrag von RobertG »

Hallo tobiman26,

gebe einmal zwischen diesen beiden Schritten

Code: Alles auswählen

sUrl_Ziel = oPath.Backup & "/" & i &"_" & sTitel
FileCopy(sUrl_Start,sUrl_Ziel)
msgbox sUrl_Ziel
ein. Also:

Code: Alles auswählen

sUrl_Ziel = oPath.Backup & "/" & i &"_" & sTitel
msgbox sUrl_Ziel
FileCopy(sUrl_Start,sUrl_Ziel)
Dann schau einmal nach, ob das alles stimmig ist. Der Pfad müsste unter "Sicherungskopien" bei Dir verzeichnet sein.

Gruß

Robert
tobiman26
***
Beiträge: 63
Registriert: Mi, 20.01.2016 15:17
Kontaktdaten:

Re: GELÖST Backup per Makro, Aufruf vom Formular

Beitrag von tobiman26 »

Ich hab ein Neuen Ordner angelegt und unter Sicherheitskopien den Pfad geändert jetzt gehts :D
Mfg Tobias 8)

Windows 7 64bit + AOO 4.1.2 + LO 5.0.0.0
OpenSUSE 42.1 32 bit + LO 5.0.2.2
Antworten