Export der Datenbank?

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Export der Datenbank?

Beitrag von Toxitom »

Hey Manfred,

hmm, da gibt es derzeit keinen direkten Weg :-(

Wenn du nicht über Calc gehen willst, kannst du dir auch ein kleines Makro schreiben - und dann alle Daten als z.B. csv File ausgeben, quasi einen Textdump machen. Nuttz du dafür ein Formular (auf dem du dann auch den Startknopf für das Makro unterbringen könntest) ist das auch nicht allzuviel Aufwand.

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Export der Datenbank?

Beitrag von Toxitom »

Hallo Manfred,

also, der "Export-Button" wird wird für Formulare und Bericht benötigt - die werden dadurch eigenständige Dokumente - außerhalb von Base.

Mit dem "Conection" hast du recht - das ist eben das Prinzip von Base. Mit dem Rest liegst du fasch. Base ist quasi nur ein "Frontend", ein Mittler zwischen der DB-Engine und dem Benutzer. Lediglich wenn du keine eigene DB-Engine hast und die interne HSQLDB nutzt, speichert Base die Daten intern - also in der Basedatei selbst. Ansonsten werden die Daten in der externen Datenbank gespeichert - und nur die Abfragen etc (in SQL-Schreibweise) in Base selbst gespeichert.
Wenn du also eine MySQL-Datenbank besitzt, so verbindet Base nur zu dieser - die Daten selbst bleiben in MySQL. Also, deine Sicherungsstrategien haben dann nichts mit Base zu tun.
Zurück zu der Konvertierung: Was willst du von wo nach wohin "konvertieren". Das geht natürlich - mit Copy&Paste. Bsp: Du möchtest deine Calc-Tabelle in eine MySQL Tabelle "konvertieren". Dann musst du zunächst in MySQL selbst die Tabelenstruktur anlegen (das kann Base direkt nicht so einfach), jetzt erzeugst du zwei Base-Dateien - einmal mit der Calc-Tabelle als Basis, einmal mit der MySQL Verbindung. Beide Basedatein sind jetzt auf dem Bildschirm offen - im Tabellenbereich. Jetzt markierst du die Tabelle in der Base/Calc Datei und wählst "Kopieren", wechselst in die Base/Mysql Datei, gehst in den Tabellenbereich und wählst "Einfügen". Der Assistent öffnet sich und du kannst schritt für Schritt deine Daten "konvertieren" :-)

Und was die Makros angeht: Sieh dir mal den ersten Post im Basic-Forum an - da sind alle relevanten Stellen aufgeführt. Darüber hinaus empfehle ich die Referenz-Literatur - findest du -> hier - tia, und wenn du detaillierter beschreibst, was du genau willst, kann man vielleicht auch hier helfen. Nur ohne Makro-Grundlage wird das schwierig...

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Export der Datenbank?

Beitrag von Toxitom »

Hey Friedhelm,
Da unter Calc keine Formuare zur Verfügung stehen...
Wie meinst du das? Natürlich stehen unter Calc genauso Formulare zur Verfügung wie unter Writer - oder Draw. Das ist alles das gleiche Modul. Möglicherweise musst du halt nur die Funktionalitäten selsbt programmieren (also Eintrag der Feldinhalte in spezielle Zellen).
Falls du nur eine Eingabemaske bräuchtest - kennst du meine "Datenmaske"? (findest du -> hier). Vielleicht hilft dir das schon ;-)

Zum zweiten Punkt: Weisst du, wie genau der "Dump" aussehen muss? Ich habe hier ein Makro, das einen Datentabelle als CSV-Datei ausgibt. Wenn du mir exakt sagst, wie die Struktur aussehen soll, könnte ich das evt. anpassen. Dan köntest du eine Sicherungsdatei "per Knopfdruck" erzeugen :-)

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Export der Datenbank?

Beitrag von Toxitom »

Hey Friedhelm,

na denn, hier folgt der Code für das Erstellen eines Textdumps einer Tabelle.

Du gehst wie folgt vor: Erezuge ein neues Formular in der Entwurfsansicht, plaziere lediglich einen Button auf das Formular - und benenne ihn wie du willst. Im Formular-Navigator verknüpfst du nun das Formular mit deiner Tabelle.
Nun speichere das Formular, schliesse es und öffne es erneut im Entwurfsmodus (sonst werden die Änderungen nicht übernommen).
Dann erzeugst du ein neues Code-Modul (Basic) im Dokument, kopierst den Code rein, passt ihn evt. an, verknüpfst den Button mit dem Makro, gehst aus dem Entwurfsmodus (wichtig! sonst geht das nicht!) - und testest es :-)

Es sollte eine nette Textdatei mit ";" zwischen den Feldern entstehen. Übernommen wird alles als "Text", weitere Anpassungen kannst du natürlich vornehmen. Aktuell nutze ich als Zeilenseperator Windowstypisch CR+LF - mäöglicherweise musst du das auch anpassen.
Falls du zusätzlich die Spaltennamen benötigst - musst du halt entsprechnde Codeteile einfügen ;-)

Code: Alles auswählen

Sub TextDumpErstellen
	GlobalScope.BasicLibraries.loadLibrary("Tools")
	oDoc = thisComponent
	REM Ausgabedatei im gleichen Verzeichnis wie Basedatei
	sURL = DirectoryNameoutofPath(oDoc.parent.URL, "/") & "/TestDump.txt"
	
	oForm = oDoc.drawpage.forms.getbyname("Standard") 'das Formular
	
	nSp = oForm.columns.count    ' Anzahl der Spalten
	
	REM Ausgabedatei öffnen
	oFileAccess = createUnoService("com.sun.star.ucb.SimpleFileAccess")
	oDatei = oFileAccess.openFileWrite(sURL)
	oTextOutPutStream = createUnoService("com.sun.star.io.TextOutputStream")
	oTextOutPutStream.setOutputStream(oDatei)
	REM Daten schreiben
	iZe = oForm.first()
	do while iZe
		for i= 1 to nSp
			if i > 1 then oTextOutPutStream.writeString(";")
			if not (oForm.getString(i) = "") then  'wenn das Feld leer ist, nichts schreiben
			   oTextOutPutStream.writeString("""" & oForm.getString(i) & """")
			end if
		next i
		oTextOutPutStream.writeString(chr(13) & chr(10))
		iZe = oForm.next()
	loop
	
	oDatei.closeOutput()
	
	msgbox "Fertig"
End Sub
Viele Grüße
Thomas

PS: Ist ein reiner Code-Sniplett. Funktioniert, sollte aber dringend noch mit entsprechenden Sicherheitsroutinen und Fehlerroutinen versehen werden - für den produktiven Einsatz!
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Gabriel123
***
Beiträge: 65
Registriert: Mo, 14.01.2008 19:31

Re: Export der Datenbank?

Beitrag von Gabriel123 »

Hallo Thomas,

gibt es eine Möglichkeit, dass Makro so anzupassen, dass die Datei immer komplett überschrieben wird? Wenn meine Tabelle in Base kleiner wird und ich dann den export noch mal machen werden nur die ersten zeilen überschrieben und dahinter kommen dann och die alten vom ersten export=)

Wo kann ich denn was zur Thematik finden? Dateien öffnen & schreiben...

Gruß
Gabriel
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Export von HSQLDB Datenbank Tabellen

Beitrag von komma4 »

manfred07 hat geschrieben:Eigentlich möchte ich nur Daten aus OO Base exportieren, also quasi den Inhalt meiner Tabellen (ggf. mit Tabelleneigenschaften evtl im Sql-Format).
Das geht bei HSQLDB mit dem SQL Befehl SCRIPT:

Code: Alles auswählen

script '/zentrale/firma/2008/testdata/hsqldb_dump.sql'
bei geöffneter BASE-Datei mit Extras>SQL...>auszuführendes Kommando
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Gabriel123
***
Beiträge: 65
Registriert: Mo, 14.01.2008 19:31

Re: Export der Datenbank?

Beitrag von Gabriel123 »

Ich will ja nur den reinen Tabelleninhalt ausgeben! Also per script läuft das nicht.

So geht es recht einfach. Aber auch hier das Problem, wenn schon daten in der CSV Datei sind werden neue einfach hinten dran gehangen oder nur teilweise überschrieben. Bei jedem Export soll aber die Datei komplett übrschrieben werden. Als Umweg wäre denkbar die csv datei per Makro zu löschen und dann neu anzulegen beim export...aber ein wenig umständlich

Code: Alles auswählen

SELECT * INTO TEXT "output_csv_file_name" FROM "kunden" 
Gabriel123
***
Beiträge: 65
Registriert: Mo, 14.01.2008 19:31

Re: Export der Datenbank?

Beitrag von Gabriel123 »

Wirklich keine Einfälle? Hm dann muss ich einen anderen Weg suchen...
Antworten