Mehre CSV Dateien in eine OOo Base Abfrage einfügen
Moderator: Moderatoren
-
- Beiträge: 5
- Registriert: Do, 24.01.2013 10:03
Mehre CSV Dateien in eine OOo Base Abfrage einfügen
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 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) 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
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 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) 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
Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen
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:
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:
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"
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:
- Abfrage nach dem Unterverzeichnis mit den csv-Dateien
- Ggf. Abfrage der Dateien in einem Dialog mit Listenfeld und Mehrfachselektion
- Öffnen einer jeden einzelnen Datei
- Übernahme der darin enthaltenen Daten, soweit vorgesehen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
-
- Beiträge: 5
- Registriert: Do, 24.01.2013 10:03
Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen
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?
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"
Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen
Hallo MarcodaMaster,
das Ganze funktioniert meines Wissens mit Base so nicht:
Der eigentliche Befehl, um mit Abfragen mehrere Tabellen zu verbinden, lautet
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
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 ........
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
-
- ********
- 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
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
Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen
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
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
Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen
@Robert
Dachte ich mir doch, dass es mit Basic geht. Sicherheitshalber möchte ich auf unklare Aussagen des TE hinweisen:
Dachte ich mir doch, dass es mit Basic geht. Sicherheitshalber möchte ich auf unklare Aussagen des TE hinweisen:
Wohlgemerkt: Hier schreibt er "Abfrage oder Tabelle". Später heißt es dagegen:MarcodaMaster hat geschrieben:Diese Tabellen würde ich jetzt gerne mit ausgewählten Spalten in eine Abfrage oder Tabelle bekommen.
Gruß JürgenIn dieser Datenbank kann ich keine neue Tabelle erstellen.
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen
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
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
Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen
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
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
-
- Beiträge: 5
- Registriert: Do, 24.01.2013 10:03
Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen
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? Dann kommt folgende Fehlermeldung: Ich habe im Anhang noch mal eine Musterdatei hochgeladen, die rot markierten Felder werden benötigt. (Kann es leider nur als ods-Datei hochladen) Vielen Dank
Marco
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? Dann kommt folgende Fehlermeldung: Ich habe im Anhang noch mal eine Musterdatei hochgeladen, die rot markierten Felder werden benötigt. (Kann es leider nur als ods-Datei hochladen) Vielen Dank
Marco
Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen
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
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
-
- Beiträge: 5
- Registriert: Do, 24.01.2013 10:03
Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen
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 2. Öffnen des Formulars Habe den Dateinamen durch "*.csv" ersetzt
Nun habe ich auf "Importieren" geklickt
3. Basic öffnet sich mit der Fehlermeldung Wenn ich mit der Maus über "stSql" bewege erscheint nur ein blauer Streifen Nun habe ich in der Datenbank in den Bereich "Tabellen" gewchselt. Leider ist keine Tabelle zu sehen. Mache ich jetzt noch etwas falsch oder habe ich was vergessen?
Vielen Dank
Marco
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 2. Öffnen des Formulars Habe den Dateinamen durch "*.csv" ersetzt
Nun habe ich auf "Importieren" geklickt
3. Basic öffnet sich mit der Fehlermeldung Wenn ich mit der Maus über "stSql" bewege erscheint nur ein blauer Streifen Nun habe ich in der Datenbank in den Bereich "Tabellen" gewchselt. Leider ist keine Tabelle zu sehen. Mache ich jetzt noch etwas falsch oder habe ich was vergessen?
Vielen Dank
Marco
Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen
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
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
-
- Beiträge: 5
- Registriert: Do, 24.01.2013 10:03
Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen
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
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
Re: Mehre CSV Dateien in eine OOo Base Abfrage einfügen
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