Mehre CSV Dateien in eine OOo Base Abfrage einfügen

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

MarcodaMaster
Beiträge: 5
Registriert: Do, 24.01.2013 10:03

Mehre CSV Dateien in eine OOo Base Abfrage einfügen

Beitrag von MarcodaMaster »

Hallo zusammen,

ich bin leider relativ neu und unerfahren im Bereich Open Office Base.
Ich habe in der Firma ein Problem, das mir nicht mehr aus dem Kopf geht.
Wir benutzen KDE Desktop (Linux) + OpenOffice Vers. 3.2.1

Nun schildere ich mal mein Problem:
Ich bekomme von meinem Kunden immer eine Mail mit einzelnen .CSV Dateien (Eine Datei gleich eine Bestellung)
Die Tabellen sind alle gleich aufgebaut.
In diesen Tabellen sind leider auch viele Infos drin, die ich nicht benötige.
Hier ein Bild der einzelnen CSV-Dateien in einem Ordner
Hier ein Bild der einzelnen CSV-Dateien in einem Ordner
Hier ein Bild der einzelnen CSV-Dateien in einem Ordner
Ordner.jpeg (101.31 KiB) 9570 mal betrachtet
Nun habe ich eine Datenbank erstellt und diese mit dem angezeigten Ordner verknüpft und den Datenbanktyp "Text" ausgewählt.
Jetzt werden die CSV-Dateien als einzelne Tabellen in der Base angezeigt (siehe Screenshot)
OO Base
OO Base
OO Base.jpeg (96.93 KiB) 9570 mal betrachtet
Diese Tabellen würde ich jetzt gerne mit ausgewählten Spalten in eine Abfrage oder Tabelle bekommen.
Da scheitere ich dran...

Ist der Ansatz schon falsch oder funktioniert das überhaupt.

Wenn es noch Fragen gibt, bitte einfach stellen.

Würde mich über Lösnungen freuen.

Vielen Dank im voraus
Marco
juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen

Beitrag von juetho »

Hallo Marco, willkommen im Forum.

Grundsätzlich: Das sieht nicht nach einem Spezialproblem deines Betriebssystems aus, sondern um ein Problem mit Base. Also gehört es zunächst in das Unterforum zu Base.
Dorthin verschoben—lorbass, Mod

Zur Lösung brauchst du zuerst eine Tabelle mit den Spalten, die du verwenden willst. Achte vor allem auf einen korrekten Primärschlüssel und geeignete Indizes.

Eine erste Lösung liegt im manuellen Kopieren der ausgewählten Inhalte nach dem folgenden Schema:

Code: Alles auswählen

INSERT INTO "MainTable" 
  VALUES ("Feld1", "Feld2", "Feld3" /* usw. */ )
SELECT "Ursprung3", "Ursprung4", "Ursprung7" /* usw. */ )
  FROM "Bestellung30272000"
Dieser Befehl wird eingegeben unter Extras > SQL.

Sinnvollerweise ist natürlich eine automatisierte Übernehme mit einem Makro. Dann gehört die (nächste) Frage in das Unterforum zu Basic. Das geht etwa nach folgendem Muster:
  1. Abfrage nach dem Unterverzeichnis mit den csv-Dateien
  2. Ggf. Abfrage der Dateien in einem Dialog mit Listenfeld und Mehrfachselektion
  3. Öffnen einer jeden einzelnen Datei
  4. Übernahme der darin enthaltenen Daten, soweit vorgesehen
Wie der Punkt 3 möglich ist, weiß ich nicht; damit habe ich mich noch nicht befasst. Davon hängt auch das genaue Verfahren zum Punkt 4 ab. Aber grundsätzlich sollte es in dieser Weise gehen. Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
MarcodaMaster
Beiträge: 5
Registriert: Do, 24.01.2013 10:03

Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen

Beitrag von MarcodaMaster »

Hallo,

vielen Dank für die schnelle Antwort.
Die neue Tabelle soll ich in die gleich Datenbank einfügen, wo auch die einzelnen CSV Dateien "Bestellung..." drin sind?
In dieser Datenbank kann ich keine neue Tabelle erstellen.

Mich interessieren in den einzelnen CSV-Dateien folgende Spalten:
Bestellnr.
BestDatum
KstNr
Kostenstelle
BestNr
Artikelnr
ArtikelBez
Menge
Einheit
Stückpreis
Gesamtpreis

In der Tabelle muss ich dann diese Spalten erstellen oder?

Danke
Marco
Wie würde der SQL Code dann ungefähr aussehen?
juetho hat geschrieben: Zur Lösung brauchst du zuerst eine Tabelle mit den Spalten, die du verwenden willst. Achte vor allem auf einen korrekten Primärschlüssel und geeignete Indizes.

Eine erste Lösung liegt im manuellen Kopieren der ausgewählten Inhalte nach dem folgenden Schema:

Code: Alles auswählen

INSERT INTO "MainTable" 
  VALUES ("Feld1", "Feld2", "Feld3" /* usw. */ )
SELECT "Ursprung3", "Ursprung4", "Ursprung7" /* usw. */ )
  FROM "Bestellung30272000"
RobertG
********
Beiträge: 2067
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen

Beitrag von RobertG »

Hallo MarcodaMaster,

das Ganze funktioniert meines Wissens mit Base so nicht:
Der eigentliche Befehl, um mit Abfragen mehrere Tabellen zu verbinden, lautet

Code: Alles auswählen

SELECT ... FROM Tabelle1 UNION SELECT ... FROM Tabelle2 UNION ........
Das Blöde ist, dass die grafische Benutzeroberfläche das nicht als Befehl entgegen nimmt und umsetzt. Sie behauptet stur, dass es sich dabei nicht um eine Abfrage handelt. Bleibt also bloß der direkte SQL-Modus. Da wird die Abfrage akzeptiert, bleibt aber bei *.csv-Tabellen ohne Ergebnis - weil der Code so auch nicht im speziellen Treiber vorgesehen ist.
Der weitere Haken, da es eben mit Abfragen nicht geht, ist, dass die gesamte *.csv-Datenbank ja nur eine reine "Lese-Datenbank" ist. Es kann dort nicht etwas über einen SQL-Befehl in eine andere Tabelle eingefügt werden.
Du müsstest also letztlich die gesamten Tabellen in der Form, in der Du die Informationen benötigst, in eine neue Datenbank importieren. Das geht prinzipiell mit Makros. Ich hatte einmal so ein Makro für den Import einer CSV-Datei geschrieben. Das könnte gegebenenfalls erweitert werden, so dass die Daten aus mehreren Dateien aufgenommen werden. Nur bin ich nicht ganz so firm im Makor-Schreiben, dass ich das so aus dem Ärmel schütteln könnte.

Gruß

Robert
pmoegenb
********
Beiträge: 4330
Registriert: Di, 22.06.2004 12:02
Wohnort: 71134 Aidlingen
Kontaktdaten:

Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen

Beitrag von pmoegenb »

Hier ist eine Möglichkeit beschrieben, wie .csv-Dateien in eine HSQLDB importiert werden können.
Gruß

Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
RobertG
********
Beiträge: 2067
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen

Beitrag von RobertG »

Hallo Peter,

ich nehme an, dass das Verfahren bei den doch reichlich vorhandenen *.csv-Datein recht umständlicch ist.

Ich bin allerdings dran geblieben, da ich den Import per Makro schon einmal erstellt habe. Jetzt noch die Schleife drum und damit ein komplettes Verzeichnis auslesen und alle Daten könnten mit einem Rutsch importiert werden.

Dauert aber noch etwas.

Gruß

Robert
juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen

Beitrag von juetho »

@Robert
Dachte ich mir doch, dass es mit Basic geht. Sicherheitshalber möchte ich auf unklare Aussagen des TE hinweisen:
MarcodaMaster hat geschrieben:Diese Tabellen würde ich jetzt gerne mit ausgewählten Spalten in eine Abfrage oder Tabelle bekommen.
Wohlgemerkt: Hier schreibt er "Abfrage oder Tabelle". Später heißt es dagegen:
In dieser Datenbank kann ich keine neue Tabelle erstellen.
Gruß Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
RobertG
********
Beiträge: 2067
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen

Beitrag von RobertG »

So, ich habe die Datei jetzt fertig. Die Base-Datei besteht aus einem Makromodul und einem Formular. Die Datei darf nicht in dem gleichen Verzeichnis liegen wie die *.csv-Dateien - gibt sonst eine Fehlermeldung aus.

Was im Test geht:
In dem Formular wird das Verzeichnis mit den *.csv-Dateien aufgerufen. Alle in dem Verzeichnis vorhandenen *.csv-Dateien sollten die gleiche Struktur haben. Sind Dateien mit anderer Endung vorhanden, so werden die einfach nicht eingelesen.
Wird im Formular vorgewählt, dass die erste Zeile Feldbezeichnungen enthält, so wird sie nicht eingelesen (da muss ich noch etwas nachbessern, damit die Feldnamen übernommen werden).
Die Feldtypen werden entweder anhand der besonderen Feldbezeichnung der ersten Zeile festgestellt (dazu muss das Makro allerdings einmal angesehen werden) oder automatisch aus dem ersten Datensatz bestimmt. Aus allen *.csv-Dateien wird eine zusammenhängende Tabelle in der Base-Datei gebildet. Diese Tabelle wird wieder gelöscht, wenn sie beim nächsten Einlesen mit dem Namen noch existieren sollte.

Das Ganze dürfte dann den Zugriff auf die Daten im Zusammenhang einfacher machen.

Gruß

Robert
Dateianhänge
CSV_Import_Verzeichnis.odb
(14.77 KiB) 350-mal heruntergeladen
RobertG
********
Beiträge: 2067
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen

Beitrag von RobertG »

Ich lege einmal nach:
In der vorhergehenden Version konnten CSV-Dateien noch nicht korrekt ausgelesen werden, wenn die erste Zeile bereits die Spaltenbezeichnungen für die Tabellen enthielt. Da habe ich jetzt (hoffentlich einwandfrei) nachbessern können. Wenn also in der ersten Zeile jetzt Spaltenbezeichnungen vorhanden sind, dann werden diese übernommen und die zweite Zeile der zuerst eingelesenen Tabelle nach den möglichen Feldtypen untersucht. Nicht erkannte Feldtypen werden übrigens alle mit dem Feldtyp "Text (VARCHAR(100))" versehen.

Gruß

Robert
Dateianhänge
CSV_Import_Verzeichnis.odb
Kleine Verbesserung bezüglich Datumseinlesen - ist jetzt vielleicht von der Überprüfung her sicherer.
(15.26 KiB) 308-mal heruntergeladen
MarcodaMaster
Beiträge: 5
Registriert: Do, 24.01.2013 10:03

Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen

Beitrag von MarcodaMaster »

Hallo,

vielen Dank schon mal Robert.
Leider erscheint bei mir noch eine Fehlermeldung. Mache ich etwas falsch?
Hier mal die Screenshots wie ich vorgehe:
Hier wähle ich den Pfad aus, oder muss ich direkt eine Datei auswählen?
CSV_Import.jpeg
CSV_Import.jpeg (41.64 KiB) 9208 mal betrachtet
Dann kommt folgende Fehlermeldung:
Fehlermeldung.jpeg
Fehlermeldung.jpeg (140.76 KiB) 9208 mal betrachtet
Ich habe im Anhang noch mal eine Musterdatei hochgeladen, die rot markierten Felder werden benötigt. (Kann es leider nur als ods-Datei hochladen)
Bestellung_30382000.ods
Musterdatei
(8.79 KiB) 254-mal heruntergeladen
Vielen Dank
Marco
RobertG
********
Beiträge: 2067
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen

Beitrag von RobertG »

Hallo Marco,

schöner wäre natürlich ein mögliches Verzeichnisauswahlmenü. Da habe ich mir dann einfach gesagt: Nimmst Du das Dateiauswahlmenü und lässt einfach den Dateinamen abschneiden. Du kannst also jede beliebige Datei in dem Verzeichnis auswählen. Der Dateiname wird abgeschnitten und durch "*.csv" ersetzt.
Die Fehlermeldungen allein helfen aus der Ferne nicht viel. Wenn Du bei so einer Meldung mit der Maustaste auf "stSql" in der besagten Zeile gehst, dann müsste da etwas angezeigt werden. Vermutlich ist es aber das fehlende Abfangen von der Meldung, dass keine Datei entsprechender Art gefunden wurde und der Import trotzdem starten möchte.

Probiere erst einmal den Import, wenn Du eine beliebige Datei aus dem Verzeichnis auswählst - dann probiere ich hier weiter, falls etwas nicht klappt.

Gruß

Robert
MarcodaMaster
Beiträge: 5
Registriert: Do, 24.01.2013 10:03

Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen

Beitrag von MarcodaMaster »

Guten Morgen Robert,

ob jetzt eine Verzeichnisauswahl oder Dateiauswahl verbaut ist stört mich nicht :-)
Leider erscheint bei mir immer noch die Fehlermeldung und erstellt danach keine Tabelle.

Ich habe die einzelnen Schritte hier noch mal bebildert:
1. Öffnen der Datenbank
Schritt1.jpeg
Schritt1.jpeg (59.28 KiB) 9110 mal betrachtet
2. Öffnen des Formulars
Schritt1.jpeg
Schritt1.jpeg (59.28 KiB) 9110 mal betrachtet
Schritt2.jpeg
Schritt2.jpeg (40.35 KiB) 9110 mal betrachtet
Habe den Dateinamen durch "*.csv" ersetzt
Nun habe ich auf "Importieren" geklickt

3. Basic öffnet sich mit der Fehlermeldung
Schritt4.jpeg
Schritt4.jpeg (109.95 KiB) 9110 mal betrachtet
Wenn ich mit der Maus über "stSql" bewege erscheint nur ein blauer Streifen
Schritt5.jpg
Schritt5.jpg (185.76 KiB) 9110 mal betrachtet
Nun habe ich in der Datenbank in den Bereich "Tabellen" gewchselt. Leider ist keine Tabelle zu sehen.
Schritt6.jpeg
Schritt6.jpeg (51.59 KiB) 9110 mal betrachtet
Mache ich jetzt noch etwas falsch oder habe ich was vergessen?

Vielen Dank
Marco
RobertG
********
Beiträge: 2067
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen

Beitrag von RobertG »

Hallo Marco,

habe gerade sehr wenig Zeit. Deswegen nur zwei Tipps:
1. Du brauchst wirklich nur eine Datei aus dem Verzeichnis auszuwählen. Der Rest sollte selbst geschehen.
2. Bei mir funktionierte das komischerweise mit der Datei, die ich im Netz stehen hatte, zuerst auch nicht. Nachdem ich sie erneut geöffnet hatte klappte alles. Irgendwie scheint der Zugriff auf die gerade gegründete Tabelle bei Base nicht anzukommen. Base scheint Probleme mit der komplett leeren Datenbank zu haben. Vielleicht klappt das ja auch mit einer Dummytabelle, die erst einmal angelegt wird?

Meine Tests mache ich hier mit LO 3.3.4 und OpenSuSE 11.4

Gruß

Robert
MarcodaMaster
Beiträge: 5
Registriert: Do, 24.01.2013 10:03

Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen

Beitrag von MarcodaMaster »

Hallo Robert,

ich habe es jetzt mit einer Dummytabelle probiert, wie du es gesagt hast. Leider ohne Erfolg...
Wenn ich auf "Importieren" klicke, macht er jedes Mail OO Basic mit der Fehlermeldung auf und hat folgende Zeile markiert:
stSql = stSql + """" + aFeldnamen(inZaehler) + """ VARCHAR(100),"

Ich benutze KDE Desktop mit OpenOffice 3.2.1

Eventuell hast du je noch mal eine Idee, wenn du ein bisschen mehr Zeit hast.

Aber schon mal DANKE.

Gruß
Marco
juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen

Beitrag von juetho »

Angesichts der Fehlermeldung bietet es sich an, das Makro im Debug-Modus laufen zu lassen. Setze einen Haltepunkt auf die Zeile davor und untersuche den Inhalt der Variablen inZaehler (aktueller Wert) und aFeldnamen (Dimension des Arrays und aktuelle Werte). Es sieht so aus, dass inZahler kleiner als Null oder größer als uBound(aFeldnamen) ist. Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Antworten