Archiv des LibreOffice- und OpenOffice.org-Wiki

[ÜberSicht] [TitelIndex] [WortIndex] [SeiteFinden

(./) SO8 OOo2

Damit eine CSV-Datentabelle von OpenOffice.org als DatenQuelle benutzt werden kann, muss eine ODB-Datenbankdatei erstellt werden. Hier werden die Möglichkeiten beschrieben, die CSV-Datei außerhalb dieser Datei zu belassen. Dann kann sie auch von anderen Programmen gelesen und bearbeitet werden. Die ODB-Datenbankdatei enthält dann nicht die eigentlichen Daten, aber neben den Informationen zum Umgang mit der CSV-Datei auch Formulare, Berichte und Abfragen.

1. Als Text-Datenquelle

Hierbei müssen alle Tabellen, die zur Datenbank gehören sollen, im selben Verzeichnis liegen und die selbe Endung haben, weil sie in einer gemeinsamen ODB-Datei erfasst werden. Außerdem müssen alle die gleichen Trenner benutzen und den gleichen ZeichenSatz, weil dies nur einheitlich eingestellt werden kann.

1.1. Herstellen der ODB-Datei

Zum Erstellen der ODB-Datei benutzen Sie den Assistenten: Datei → Neu → Datenbank.

1. Schritt:

assistent1.png

2. Schritt:

assistent2.png

3. Schritt:

Wenn Sie im Datenbankfenster links die Kategorie Tabellen auswählen, sehen Sie rechts die einzelnen Tabellen. Mit dem kleinen schwarzen Dreieck ganz rechts können Sie von keine zu Dokument wechseln (DropDown-Feld) und so eine Vorschau der Daten sehen.

tabellenansicht.png

Wenn einige Zeichen der Daten merkwürdig aussehen, ist wahrscheinlich ein falscher ZeichenSatz eingestellt. Wählen Sie den richtigen unter Bearbeiten → Datenbank → Eigenschaften… → Zusätzliche Einstellungen aus.

1.2. Eigenschaften

bearbeiten.png

Zahlen und Texte werden automatisch erkannt. Datumsformate müssen in der Darstellung vorliegen, die dem Gebietsschema entspricht.

tabellenentwurf.png

Sie können die Struktur der Tabelle innerhalb des Base-Moduls nicht ändern. Die entsprechenden Optionen unter Bearbeiten sind alle ausgegraut.

Sie können die CSV-Datentabelle nicht innerhalb des Base-Moduls oder in der Datenquellenansicht bearbeiten. Um Daten zu ändern müssen Sie immer erst die Verbindung lösen, d.h. das Base-Modul bzw. die Datenquellenansicht schließen. Dann können Sie die Datei mit Calc oder im Writer öffnen und bearbeiten und dann wieder abspeichern. Erst wenn Sie jetzt erneut eine Verbindung herstellen, stehen die geänderten Daten zur Verfügung.

Um die Formatierung einer Spalte zu ändern, öffnen Sie mit Rechtsklick auf den Tabellennamen das KontextMenü der Tabelle und wählen dort Öffnen.

oeffnen.png

Dann öffnen Sie mit einem Rechtklick auf den Spaltennamen das KontextMenü der Spalte und klicken dort auf Spaltenformatierung….

spaltenformatierung.png

Die auswählbaren Zeichensätze sind auf 8-Bit Zeichensätze beschränkt. Insbesondere steht der sonst für OpenOffice.org-Dokumente benutzte Zeichensatz UTF-8 nicht zur Verfügung.

Das Verzeichnis kann später in den Einstellungen gewechselt werden, um die Bezüge an Umbenennungen anzupassen.

2. Als HSQL Text-Tabelle

Hierbei müssen die csv-Dateien im gleichen Verzeichnis liegen wie die odb-Datei. Die csv-Dateien brauchen jedoch weder gleiche Trenner oder gleiche Endungen noch den gleichen Zeichensatz zu besitzen, weil die Einstellungen pro Datei erfolgen.

Zunächst legen Sie mit dem Assistenten Datei → Neu → Datenbank eine neue, leere Datenbank an und speichern sie ins selbe Verzeichnis, in dem die csv-Dateien liegen. Sie können auch eine schon vorhandene odb-Datei aus diesem Verzeichnis benutzen.

2.1. HSQL Text-Tabelle erzeugen

Mit Extras → SQL… öffnen Sie das SQL-Kommandofenster. Dort tragen Sie einen SQL-Befehl nach folgendem Muster ein:

CREATE TEXT TABLE "de_utf8_1" (
"Nr" INTEGER NOT NULL,
"Sache" VARCHAR(50),
"Wert" DOUBLE,
"Datum" DATE,
PRIMARY KEY("Nr"))

Die in Blockbuchstaben geschriebenen Begriffe sind Schlüsselwörter und müssen genau so geschrieben werden wie hier zu sehen. Die anderen Texte sind von ihnen gewählte Bezeichner. Sie müssen mit einem Buchstaben anfangen und sollten (dürfen?) weder Sonderzeichen noch Umlaute noch Leerzeichen enthalten.

Nach TABLE steht der zukünftige Name der Tabelle im Base-Modul. In den folgenden runden Klammern stehen zunächst die Definitionen für die einzelnen Felder, jeweils abgeschlossen mit einem Komma. Eine solche Definition besteht aus dem Feldnamen in Anführungszeichen und der Typangabe. Die Datentypen müssen in Reihenfolge und Typ genau mit den Daten in der csv-Datentabelle übereinstimmen.

Als letztes folgt die Festlegung, welches Feld der Primärschlüssel sein soll. Ein Primärschlüssel ist unbedingt erforderlich, sonst kann man keine Datensätze einfügen, löschen oder ändern. Dieses Feld muss bei der Typangabe zusätzlich den Eintrag NOT NULL erhalten.

Tipp: Notieren Sie sich das Kommando in einer Textdatei und fügen Sie es hier mit Copy&Paste ein. Damit lassen sich eventuell notwendige Verbesserungen leichter durchführen und Sie können später nachvollziehen, welches Kommando Sie benutzt haben.

Übermitteln Sie das Kommando mit der Schaltfläche Ausführen an das Datenbanksystem. Im Bereich Status sollte dann Befehl erfolgreich ausgeführt gemeldet werden.

Nach Ansicht – Tabellen aktualisieren wird die neue Tabelle im Tabellenbereich aufgeführt.

2.2. Verbindung zur csv-Datentabelle herstellen

Falls geschlossen öffnen Sie das SQL-Kommandofenster wieder mit Extras → SQL…. Nun tragen Sie einen SQL-Befehl nach folgendem Muster ein und führen ihn aus:

SET TABLE "de_utf8_1" SOURCE "test.csv;ignore_first=true;fs=|;encoding=utf-8"

Nach TABLE steht der Tabellenname, so wie Sie ihn im ersten Kommando definiert haben.

Nach SOURCE folgen die Angaben, um die Verbindung zur csv-Datei herzustellen. Die Angaben stehen als ganzes in Anführungszeichen. Zwischen den einzelnen Angaben steht jeweils ein Semikolon. Die Angaben im einzelnen (alle Parameter nur Kleinbuchstaben):

  1. test.csv Der Dateiname der csv-Datei. Diese Angabe muss als erstes stehen.

  2. ignore_first=true Mit dieser Angabe wird die erste Zeile der csv-Datei übersprungen. Dies ist erforderlich, wenn es eine Kopfzeile mit Feldbezeichnern ist.

  3. fs=| (field separator). Zusätzlich zu konkreten Zeichen gibt es Spezialschreibweisen, z.B.

    • \semi Semikolon
      \apos Apostroph
      \t Tabulator
      \u#### Unicode-Zeichen, das durch seine hexadezimale Nummer bestimmt ist

  4. encoding=utf-8 Angabe des Zeichensatzes. Weitere gängige Zeichensätze sind iso-8859-1 und windows-1252.

Nach Ansicht → Tabellen aktualisieren sehen Sie nach Klick auf den Tabellennamen im Vorschaubereich die Daten aus der csv-Datentabelle.

2.3. Eigenschaften

3. Einbinden mit ODBC (WinXP)

Das Vorgehen hier wurde unter WinXP getestet, deutsche Version mit deutschen Regionaleinstellungen. Es ist gut möglich, dass es für andere Windows Versionen ähnlich funktioniert.

Vorteile gegenüber der unter 1. dargestellten Verbindung als Text:

Die Einschränkung, dass die Tabellen nur gelesen werden können, besteht aber auch hier.

Beim Weg über ODBC werden die SQL-Befehle letztendlich von der Microsoft Jet Engine bearbeitet.

3.1. Vorgehen in Kurzform

3.2. ODBC-Datenquelle definieren

1. Datenbank-Assistenten mit Datei → Neu → Datenbank starten.

2. Option Verbindung zu einer bestehenden Datenquelle, Auswahl ODBC.

3. Schaltflächen Durchsuchen und dann Verwalten. Damit verlassen Sie OOo vorübergehend und befinden sich in dem Windows Dialog ODBC-Datenquellen-Administration. Den gleichen Dialog erreichen Sie auch direkt von der Windows Benutzeroberfläche über Start → Systemsteuerung → Datenquellen (ODBC).

4. Klick auf Hinzufügen öffnet die Treiberauswahl. Wählen Sie Microsoft Texttreiber (*.txt *.csv). Fertig stellen.

5. Nun befinden Sie sich im Dialog ODBC Text Setup. Dialog durch Klick auf Optionen >> erweitern.

6. Format definieren öffnet den Dialog ODBC Text Setup, in dem einige Einstellungen möglich sind, die dann in die Datei schema.ini eingetragen werden.

5. Die neue Datenquelle sollte jetzt in der Liste aufgeführt sein. OK (Dialog ODBC-Datenquellen-Administrator)

6. Datenquelle aus der Liste auswählen. OK (Dialog Datenquellen)

7. Die Datenquelle sollte jetzt im Eingabefeld stehen. Wenn Sie die Datenquelle schon unter Windows als ODBC-Datenquelle eingerichtet hatten, können Sie den Namen natürlich auch direkt eintragen. Weiter.

8. Ein Passwort ist nicht sinnvoll, lassen Sie die Felder frei. Mit der Schaltfläche Verbindung testen überprüfen Sie, ob OOo die Datenquelle findet. Der Erfolg sagt übrigens noch nichts darüber aus, ob die Datentabellen auch korrekt gelesen werden. Weiter.

9. Nur wenn Sie die Datenquelle registrieren lassen, steht sie über die Datenquellenansicht F4 in den anderen Modulen zur Verfügung steht. Fertig stellen.

10. Legen Sie Namen und Speicherort der OOo-eigenen Datenquellen-Verwaltungsdatei (Endung odb) fest. Diese kann im gleichen Ordner liegen wie die csv-Datentabellen.

Wenn Sie nun versuchen, sich die Tabellen anzuschauen, werden Sie wahrscheinlich Fehlermeldungen erhalten oder es sind nicht alle Spalten vorhanden. Dann ist eine Bearbeitung der Datei schema.ini erforderlich.

Zum Ändern der ODBC-Einstellungen - z.B. den Speicherort - benutzen Sie Start → Systemsteuerung → Datenquellen (ODBC), wählen die Datenquelle aus und klicken auf Konfigurieren.

3.3. Datei ''schema.ini'' bearbeiten

Informationen zu dieser Datei finden Sie bei Microsoft unter der Überschrift "Schema.ini File (Text File Driver)" in der englischen MSDN-Library. http://msdn2.microsoft.com/en-us/library/ms709353.aspx.

Die Angaben in der Datei schema.ini überlagern die entsprechenden Einträge in der Registry.

Die Datei schema.ini ist eine reine Textdatei, die Sie auch mit dem NotePad bearbeiten können.

3.3.1. kommentierte Beispieleinträge

Dem Beispiel liegt eine Datei "dbwert.csv" mit folgendem Inhalt zu Grunde.

"ID;"Wer";"Wert";"Anzahl";"Wann"
1;"Gerd";-12,50€;5;12.06.2007
2;"Jutta";48,00€;8;05.12.2006

[dbwert.csv]

Jede Datentabellen-Datei hat einen eigenen Abschnitt. Er beginnt mit dem Dateinamen in eckigen Klammern.

ColNameHeader=True

Die erste Zeile der Datei enthält noch keinen Datensatz, sondern die Bezeichnungen der Datenfelder.

CharacterSet=ANSI

mögliche Werte: ANSI, OEM, UNICODE

Der Wert OEM bedeutet Daten im DOS-Zeichensatz. (Welche Codepage, habe ich nicht ausprobiert.)

Der Wert UNICODE bedeutet Daten in UTF-16, einem 2-Byte Zeichensatz.

Wenn ihre Daten in UTF-8 kodiert sind, stellen Sie ANSI ein und benutzen dann die Anzeige-Einstellungen in der odb-Datei. Probleme gibt es dann nur bei Monatsnamen im Datum.

Format=Delimited(;)

Hier tragen Sie das Trennzeichen ein, das tatsächlich benutzt wird. Eine eigene Anweisungen besitzen nur
Format=TabDelimited für Tabulator als Trennzeichen
Format=CSVDelimited für Komma als Trennzeichen
Format=FixedLength für Spalten mit fester Breite. Die Breite selbst wird bei den Spalten angegeben (s.u.).

MaxScanRows=25

Legt fest, wie viele Zeilen benutzt werden, um aus dem Inhalt der Datenfelder automatisch einen passenden Typ zu ermitteln. Der Wert 0 bedeutet "alle Datensätze benutzen", die Voreinstellung in der Registry ist 25.

DecimalSymbol=,

Dezimal-Trennzeichen. Dies beschreibt nur, wie Dezimalzahlen in der Datei dargestellt sind, nicht, wie sie später in der Datenquelle in OOo angezeigt werden.

CurrencyDigits=2
CurrencyDecimalSymbol=,
CurrencySymbol=€
CurrencyPosFormat=1
CurrencyNegFormat=5

Auch diese Einstellungen beschreiben nur die Darstellung in der Datei, damit das Einlesen richtig erfolgt. Währungsangaben in der Datei sind im Beispiel mit Komma als Dezimaltrenner, zwei Dezimalzahlen und direkt darauf folgendem €-Zeichen und ggf. vorangestelltem Minuszeichen dargestellt (wie -12,50€).

Für CurrencyPosFormat sind die Werte 0,1,2,3 möglich. Bedeutung der Reihe nach: €Zahl, Zahl€, € Zahl, Zahl €.

Für CurrencyNegFormat sind die Werte 0 bis 15 möglich.Bedeutung der Reihe nach: (€Zahl), –€Zahl, €–Zahl, €Zahl–, (Zahl€), –Zahl€, Zahl–€, Zahl€–, –Zahl €, –€ Zahl, Zahl €–, € Zahl–, € –Zahl, Zahl– €, (€ Zahl), (Zahl €)

DateTimeFormat=dd-mm-yy

oder

DateTimeFormat=dd-mm-yy hh:nn:ss

Mögliche Werte: dd-mm-yy, dd-mmm-yy, mm-dd-yy, mmm-dd-yy sowie yyyy-mm-dd und yyyy-mmm-dd. Die Form mm benutzt eine Zahl für den Monat, mmm die drei ersten Buchstaben des deutschen Monatsnamens, also für März die Abkürzung Mär, nicht Mrz. Schreibweisen mit AM und PM sind nicht möglich. Für fehlende Zeitangaben bei einem Datensatz wird 00:00:00 gesetzt.

Es werden jeweils sowohl zwei- als auch vierstellige Jahreszahlen erkannt und statt yy ist immer yyyy möglich und umgekehrt. Benutzen Sie vierstellige Jahreszahlen, damit der Wert eindeutig ist.

Als Trennzeichen kann sowohl in der Formatbeschreibung als auch in der Datei -, . oder / benutzt werden.

Wenn ihre Daten in UTF-8 codiert sind, wird der Monatsname Mär nicht erkannt.

Col1=ID Integer
Col2=WER Char
Col3=WERT Currency
Col4=ANZAHL Integer
Col5=WANN Date

Dies sind die Beschreibungen der einzelnen Spalten. Der Aufbau ist immer
Spaltennummer=Datenfeldbezeichner Datentyp.
Wenn Sie für den Feldbezeichner keine Blockbuchstaben benutzen, setzen Sie den Namen in Anführungszeichen, z.B. Col5="Wann".

Als Datentyp sind möglich BIT, BYTE, CHAR, CURRENCY, DATE, FLOAT, INTEGER, LONGCHAR, SHORT und SINGLE

Bei einer Datei mit fester Spaltenbreite muss jeweils zusätzlich der Parameter Width gefolgt von der tatsächlichen Zeichenzahl benutzt werden, z.B Col2=WER Char Width 20.

3.4. Eigenschaften in der Verwaltungsdatei einstellen

3.4.1. Zeichensatz festlegen

Bearbeiten → Datenbank → Eigenschaften → Zusätzliche Einstellungen

Probieren Sie zunächst die Einstellung System aus; sie passt in den meisten Fällen (auch für Unicode). Kontrollieren Sie das Ergebnis, indem Sie eine Tabelle öffnen.

Der Zeichensatz kann nicht pro Tabelle eingestellt werden sondern nur generell.

3.4.2. Anzeigeformat festlegen

Öffnen Sie die Tabelle und benutzen Sie den Eintrag Spaltenformat aus dem Kontextmenü des Spaltenkopfs. Meist müssen Währungsformat und Datum eingestellt werden. Speichern, ggf. mit Speichern als!

3.4.3. Alias in SELECT-Anweisungen

Der Tabellenname enthält die Dateiendung. Eine solche Schreibweise ist in Abfragen nur direkt beim Teil FROM zulässig. Wenn Sie den Tabellennamen zum eindeutigen Identifizieren eines Feldes benötigen, müssen Sie daher in den Abfragen für den Tabellennamen einen Alias festlegen. Dazu wechseln Sie in die Entwurfsansicht und tragen einen geeigneten Namen ein (wie unten im Beispiel gezeigt). Dieser wird dann auch in der Designansicht als Tabellenname angezeigt.

Eine Abfrage könnte zum Beispiel so aussehen:

SELECT  `dbwert`.`Wer` FROM `dbwert.csv` AS `dbwert` WHERE `dbwert`.`Wert`<0

4. Siehe auch


KategorieBase


LizenzBedingungen | AnbieterKennzeichnung | DatenschutzErklärung | Stand: 2013-04-28