Tabellen in Datenbank - eigene und externe gleichzeitig

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

oerki
*
Beiträge: 15
Registriert: Mo, 16.11.2015 14:16

Tabellen in Datenbank - eigene und externe gleichzeitig

Beitrag von oerki »

Hallo zusammen.

Bisher konnte mir euer Forum gut helfen, nur jetzt finde ich absolut nichts und hoffe ihr könnt mir helfen.
Ich beschäftige mich seit einiger Zeit mit Base und mache immer mehr Fortschritte nur jetzt komme ich an meine Grenze.

Ich habe eine Datenbank mit mehrere Tabellen. Die nötigen Abfragen und Formulare, an denen ich rumprobiert habe und schon ganz zufrieden bin, gibt es auch schon. Die Tabellen sind Filter und Hilfstabellen und halt eine wo die eigentlichen Daten drin sind.
Jetzt wollte ich alles mit einer bestehenden externen Calc Tabelle verknüpfen, nur kann ich das nur unter Calc kopieren und in Base Manuell einfügen. Verknüpfen geht nur, wenn ich mit dem Assistenten eine neue Datenbank anlegen will und dann dort mit bestehender Datenbank verknüpfe.

Also entweder habe ich den Trick noch nicht gefunden wie ich nachträglich eine externe Tabelle verknüpfen kann, oder geht das etwa nicht??

Denn jedesmal die Daten der Calc manuell kopieren und einfügen, kann ich dem Anwender später nicht zumuten. Oder gibt es einen Ansatz mit Makro? Habe auch da nichts gefunden.

Mein Ziel:
Ich habe mehrere (ca. 30) externe Calc-Dateien, diese möchte ich in Base eingefügt haben. Diese sind alle von der Struktur gleich, unterscheiden sich nur im Namen. Ich habe schon ein Makro, dass mir die einzelnen Base-Tabellen zu einer Tabelle zusammenfasst. Also mir aus vielen Datenbanken eine große macht.
Nur wenn ich in meine bestehende Base-Datei keine externen Daten einfügen kann, dann muss der Anwender nachher 30 Tabellen markieren und kopieren, bzw. wenn ich neben den angemeldeten externen Daten keine Filter und Hilfstabellen anlegen kann, dann klappt das alles nicht.

Irgendwer eine Idee? Denn ich weiß nicht, wonach ich bei Google noch suchen soll...
Oder geht das nicht, was ich will???

Vielen Dank schon mal im Vorraus.

Steffen

(falls es wichtig ist: ich verwende OO 4.0.1 und Win 10)
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Tabellen in Datenbank - eigene und externe gleichzeitig

Beitrag von RobertG »

Hallo Steffen,

Du wirst nicht eine Calc-Tabelle und eine Tabelle der internen HSQLDB in der gleichen Datenbank verwalten können. Was allerdings möglich ist ist ein Zugriff auf Texttabellen innerhalb einer internen HSQLDB-Datenbank. Du müsstest also die Calc-Tabellen nach *.csv exportieren.

Wie das mit den Texttabellen funktioniert steht im aktuellen Handbuch im Kapitel "Datenbanktabellen". Ich habe das auch als html-Datei hier liegen:
http://robert.familiegrosskopf.de/lo_hb ... 1826694719

Gruß

Robert
oerki
*
Beiträge: 15
Registriert: Mo, 16.11.2015 14:16

Re: Tabellen in Datenbank - eigene und externe gleichzeitig

Beitrag von oerki »

Hallo!

Vielen Dank fur den Hinweis!

Habe ich mir durch gelesen und auch soweit verstanden.

Drei Frage habe ich dazu noch, bevor ich nachher probiere:
1. Verstehe ich das richtig, dass die CSV und die Base Datei im gleichen Ordner liegen müssen?
2. Aktualisieren sich die Base-Tabellen (also die verknüpfte CSV) dann auch bei jedem Start von Base?
3. Wenn ich in der CSV schon eine eindeutige Zahl in der ersten Spalte habe (z.B. 20-001, 20-002 20-003, usw...), kann ich mir dann die ID sparen? Oder macht das mit dem Bindestrich Probleme, da das keine richtige "Zahl" ist? Ich will ja nicht direkt mit den importieren CSV arbeiten, sondern diese in eine bestehende Base-Tabelle per Makro einfügen lassen.

VG

Steffen
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Tabellen in Datenbank - eigene und externe gleichzeitig

Beitrag von RobertG »

Hallo Steffen,
oerki hat geschrieben: 1. Verstehe ich das richtig, dass die CSV und die Base Datei im gleichen Ordner liegen müssen?
Ich habe das bisher nicht anders getestet. Ich gehe allerdings davon aus, dass die *.csv-Datei lediglich relativ im Dateisystem angegeben werden muss. Im Handbuch steht eben nur die Datei, weil sie im gleichen Verzeichnis wie die Base-Datei liegt.
oerki hat geschrieben: 2. Aktualisieren sich die Base-Tabellen (also die verknüpfte CSV) dann auch bei jedem Start von Base?
Base greift nur dann schreibend auf die *.csv-Datei zu, wenn Du das erlaubst. Die *.csv-Datei ist eine Textdatei und wird nicht wie die anderen Tabellen im temporären Speicher verarbeitet.
oerki hat geschrieben: 3. Wenn ich in der CSV schon eine eindeutige Zahl in der ersten Spalte habe (z.B. 20-001, 20-002 20-003, usw...), kann ich mir dann die ID sparen? Oder macht das mit dem Bindestrich Probleme, da das keine richtige "Zahl" ist?
Du brauchst für die *.csv-Datei nur dann einen Primärschlüssel, wenn Du die Datei schreibbar haben willst. Ansonsten ist dieser Schlüssel nicht notwendig - vor allem, wenn Du sowieso die Datei nur per Makro auswerten willst.

Gruß

Robert
oerki
*
Beiträge: 15
Registriert: Mo, 16.11.2015 14:16

Re: Tabellen in Datenbank - eigene und externe gleichzeitig

Beitrag von oerki »

Hallo Robert,

ich habe dann mal getestet. Waren noch so ein zwei Dinge über die ich gestolpert bin, aber jetzt klappt alles mit der automatischen Aktualisierung, danke dir für den Tipp.
Muss jetzt nur noch ein schönes Makro für Calc basteln, das mir die Tabelle in CSV mit Komma und Anführungszeichen macht und dann noch in Unicode UTF-8 (für Umlaute und €) speichert.
Bin jetzt aber schon mal einen großen Schritt weiter.

Vielen vielen Dank

Steffen
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Tabellen in Datenbank - eigene und externe gleichzeitig

Beitrag von F3K Total »

Kurzer Tipp:
Auch wenn dein Weg beschreitbar ist, wäre es nicht einfacher, einfach alle Calc Dateien direkt per Makro auszulesen und in die relevante Base-Tabelle einzulesen?
Ein Makro für alles.
Gruß R
oerki
*
Beiträge: 15
Registriert: Mo, 16.11.2015 14:16

Re: Tabellen in Datenbank - eigene und externe gleichzeitig

Beitrag von oerki »

Ohne es probiert zu haben, denke ich mal das wird zu komplex.
Ich werde ca. 30 Calc Tabellen haben, also 30 Nutzer. Und eine Base Tabelle, die dann diese auswerten soll. Ich wollte das halt über eine extra Datei (Export) machen machen, damit nicht 30 mal in Base was einlesen zu müssen.
Mein Ziel war ja das direkt eine ODS zu exportieren und die dann automatisch in der Base Datei aktualisiert wird, aber mit der CSV klappt das genauso gut.
Hab auch schon den Export der CSV fertig. Der passiert dann automatisch beim schließen der Calc-Eingabe-Tabelle.
So muss sich keiner Gedanken um ne Aktualisierung machen.
Abgesehen davon, habe ich auch mal in dieser Richtung gesucht, aber immer nur von Base zu Calc gefunden, aber nicht anders rum. Hast du da irgendwo nen Artikel, oder so, wo ich mir das mal durchlesen, ansehen kann?
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Tabellen in Datenbank - eigene und externe gleichzeitig

Beitrag von F3K Total »

Hallo,
oerki hat geschrieben: Hast du da irgendwo nen Artikel, oder so, wo ich mir das mal durchlesen, ansehen kann?
nein habe ich nicht, würde mir so ein Makro schreiben. Wenn du nun schon fertig bist, und alles funktioniert, so what?
Viel Spaß
Gruß T
oerki
*
Beiträge: 15
Registriert: Mo, 16.11.2015 14:16

Re: Tabellen in Datenbank - eigene und externe gleichzeitig

Beitrag von oerki »

Danke!
Steffen
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Tabellen in Datenbank - eigene und externe gleichzeitig

Beitrag von RobertG »

Hallo *,

ich habe da einmal etwas getüftelt, wie ich, ohne eine Calc-Datei geöffnet zu haben, eventuell Daten auslesen kann. Ist erst einmal nur ein Ansatz, den ich auch nur mit einer Tabelle, beschriftet ab der ersten Zeile, 2 Spalten und 5 Zeilen, getestet habe:

Code: Alles auswählen

Sub CalcData
	DIM oDoc AS OBJECT
	DIM oDocView AS OBJECT
	DIM Arg()
	sUrl = "file:///home/user/Dokumente/DBTest.ods"
	oDoc = StarDesktop.loadComponentFromURL(sUrl,"_blank", 0, Arg() )
	oDocView = oDoc.CurrentController.Frame.ContainerWindow
	oDocView.Visible = False
	loColumns = uBound(oDoc.Sheets(0).ColumnDescriptions)
	loRows = uBound(oDoc.Sheets(0).RowDescriptions)
	oRange = oDoc.Sheets(0).getCellRangeByPosition(0,0,loColumns,loRows)
	aDat = oRange.getDataArray()
	DIM aListe(uBound(aDat))
	FOR i = 0 TO uBound(aDat)
		aRow = aDat(i)
		stRow = ""
		FOR k = 0 TO loColumns
			stRow = stRow & " | " & aRow(k)
		NEXT
		stRow = Right(stRow, Len(stRow) - 3)
		msgbox stRow
	NEXT
	oDoc.close(True)
End Sub
Die Variablen sind nicht alle deklariert. Das Makro geht von einer Tabelle aus, die mit der oberen linken Ecke (A1) beginnt. Jede Zeile wird ausgelesen und zur Anzeige in eine Messagebox als String zusammengefasst. An der Stelle kann natürlich auch das Einlesen in die Datenbank erfolgen.
Die URL muss natürlich entsprechend der eigenen Daten angepasst werden.

Gruß

Robert
RobertG
********
Beiträge: 2033
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Tabellen in Datenbank - eigene und externe gleichzeitig

Beitrag von RobertG »

Hallo *,

ich habe mich noch einmal mehr mit dem Import von Calc nach Base befasst und jetzt eine Beispieldatenbank mit Makro zusammengestellt. Das Einlesen funktioniert. Es werden nur Spalten eingelesen, bei denen der Spaltenkopf mit der gleichen Bezeichnung versehen ist wie die Feldbezeichnung in der Tabelle. Andere Informationsspalten werden ausgelassen.

Ich hänge die Beispieldatenbank zusammen mit der entsprechenden Calc-Tabelle einmal als Päckchen an. Werde das wohl noch besser dokumentiert im nächsten Handbuch mit aufnehmen.

Gruß

Robert
Dateianhänge
Datenimport.zip
Datenimport direkt aus einer Calc-Tabelle
(19.66 KiB) 190-mal heruntergeladen
Antworten