von ejomi » Mi, 06.09.2006 16:47
Immer wieder traurig zu lesen, wie manche "Experten" diese Foren nur mit BlaBla füllen aber auf die gestellten Fragen in Wahrheit keine echte Antwort wissen!
Ich empfehle z.B. die "Einführung Datenbankanwendungen" von Jan.Christian Wienandt (
http://www.wienandt.de - diese Homepage ist zwar etwas ungepflegt aber man kann interessantes darauf finden!) und natürlich die unzähligen (englischen) Artikel und Beispiel-Makros von Andrew Pitonyak (am besten "googeln") - auf seinen Dokumentationen finden sich ebenfalls unzählige, interessante Links.
Nun zu Deinem Problem:
Voraussetzung ist, daß Du die Daten aus der Original-Quelle als orgendliche CSV-Datei (Feldinhalte in Anführungsstriche, getrennt durch Semikola) zur Verfügung stellen kannst. Dann mußt Du noch klären, ob in der ersten Zeile Spalten-Überschriften oder die Liste direkt mit Daten anfängt.
Von einem der o.a. Autoren habe ich den Trick, wie man csv-Daten per "Direkt-SQL" in eine odb-Datei einkopiert. Das geht nur manuell im Haupt-Menü unter "Extras/SQL/SQL-Statement ausführen"! Man muß in diesem Eingabefenster eine SQL-Komandokette eingeben. Da solche Kommando-Ketten recht lang sind, empfiehlt sich das Zusammenbasteln mittels Notpad und anschließendem Einkopieren in die Eingabe-Maske.
Das unten beispielhaft gezeigte SQL-Kommando gliedert sich in 4 Schritte, muß aber als kompletter Befehlsstring eingesetzt werden.
1. Es wird zunächst eine temporäre Text-Tabelle "tmp_csvimport" mit den notwendigen Feldern (Feldnamen und -Typen müssen dabei grob dem ursprünglichen Formaten entsprechen!)
2. Dann wird als Quelle (hier beispielhaft) die Liste "ExportDaten.csv" definiert und ausserdem durch den Befehl "ignore_first=TRUE" festgelegt, dass die erste Zeile dieser Liste Spalten-Überschriften enthält (bitte prüfen!!). Der Befehl "fs=\semi" teilt dem System mit, daß als Feldtrennzeichen dieser Liste Semikola erwartet werden.
3. Dann wird die eigentliche Ziel-Tabelle "MeineNeueTabelle" mit den endgülitigen Feld-Definitionen neu erzeugt. Diese Tabelle muß mindestens die gleiche Anzahl und in jedem Fall die jeweils gleichen Feld-Typen besitzen, wie bereits in der temporären Import-Tabelle vorgegeben! Außerdem wird mit PRIMARY KEY ("ID") festgelegt, dass das Feld "ID" zukünftig den Primärschlüssel erthält.
4. Jetzt passiert der eigentliche Kopier-Vorgang in "MeineNeueTabelle". Und auch hier wieder: alle Felder müssen zueinander passen! Natürlich kann "MeineNeueTabelle" völlig andere Feld-Namen enthalten: falls z.B. mein ehemaliger "branche" zukünftig "BranchenCode" heißen soll, so müsste die SQL-Anweisung so lauten:
CREATE TABLE "MeineNeueTabelle"
...
"BranchenCode" INTEGER
...
INSERT INTO "MeineNeueTabelle"
...
"BranchenCode" INTEGER
...
FROM
...
"branche" INTEGER
...
"tmp_csvimport"
5. Als letztes wird mit COMMIT; alle SQL-Befehle zur Ausführung gebracht und mit DROP TABLE "tmp_csvimport" die temporäre Tabelle wieder gelöscht.
Hier folgt die komplette SQL-Befehlskette:
CREATE TEXT TABLE "tmp_csvimport" (
"ID" INTEGER,
"name1" VARCHAR (100),
"strasse" VARCHAR (100),
"plz" VARCHAR (10),
"ort" VARCHAR (50),
"email" VARCHAR (100),
"branche" INTEGER,
"telvorwahl" VARCHAR (100),
"telnummer" VARCHAR (100))
SET TABLE "tmp_csvimport"
SOURCE "ExportDaten.csv; ignore_first=TRUE; fs=\semi";
CREATE TABLE "MeineNeueTabelle" (
"ID" INTEGER NOT NULL,
"name1" VARCHAR (100),
"strasse" VARCHAR (100),
"plz" VARCHAR (10),
"ort" VARCHAR (50),
"email" VARCHAR (100),
"branche" INTEGER,
"telvorwahl" VARCHAR (100),
"telnummer" VARCHAR (100),
PRIMARY KEY ("ID"))
INSERT INTO "MeineNeueTabelle" (
"ID",
"name1",
"strasse",
"plz",
"ort",
"email",
"branche",
"telvorwahl",
"telnummer")
SELECT
"ID",
"name1",
"strasse",
"plz",
"ort",
"email",
"branche",
"telvorwahl",
"telnummer"
FROM
"tmp_csvimport";
COMMIT;
DROP TABLE "tmp_csvimport"
Immer wieder traurig zu lesen, wie manche "Experten" diese Foren nur mit BlaBla füllen aber auf die gestellten Fragen in Wahrheit keine echte Antwort wissen!
Ich empfehle z.B. die "Einführung Datenbankanwendungen" von Jan.Christian Wienandt (http://www.wienandt.de - diese Homepage ist zwar etwas ungepflegt aber man kann interessantes darauf finden!) und natürlich die unzähligen (englischen) Artikel und Beispiel-Makros von Andrew Pitonyak (am besten "googeln") - auf seinen Dokumentationen finden sich ebenfalls unzählige, interessante Links.
Nun zu Deinem Problem:
Voraussetzung ist, daß Du die Daten aus der Original-Quelle als orgendliche CSV-Datei (Feldinhalte in Anführungsstriche, getrennt durch Semikola) zur Verfügung stellen kannst. Dann mußt Du noch klären, ob in der ersten Zeile Spalten-Überschriften oder die Liste direkt mit Daten anfängt.
Von einem der o.a. Autoren habe ich den Trick, wie man csv-Daten per "Direkt-SQL" in eine odb-Datei einkopiert. Das geht nur manuell im Haupt-Menü unter "Extras/SQL/SQL-Statement ausführen"! Man muß in diesem Eingabefenster eine SQL-Komandokette eingeben. Da solche Kommando-Ketten recht lang sind, empfiehlt sich das Zusammenbasteln mittels Notpad und anschließendem Einkopieren in die Eingabe-Maske.
Das unten beispielhaft gezeigte SQL-Kommando gliedert sich in 4 Schritte, muß aber als kompletter Befehlsstring eingesetzt werden.
1. Es wird zunächst eine temporäre Text-Tabelle "tmp_csvimport" mit den notwendigen Feldern (Feldnamen und -Typen müssen dabei grob dem ursprünglichen Formaten entsprechen!)
2. Dann wird als Quelle (hier beispielhaft) die Liste "ExportDaten.csv" definiert und ausserdem durch den Befehl "ignore_first=TRUE" festgelegt, dass die erste Zeile dieser Liste Spalten-Überschriften enthält (bitte prüfen!!). Der Befehl "fs=\semi" teilt dem System mit, daß als Feldtrennzeichen dieser Liste Semikola erwartet werden.
3. Dann wird die eigentliche Ziel-Tabelle "MeineNeueTabelle" mit den endgülitigen Feld-Definitionen neu erzeugt. Diese Tabelle muß mindestens die gleiche Anzahl und in jedem Fall die jeweils gleichen Feld-Typen besitzen, wie bereits in der temporären Import-Tabelle vorgegeben! Außerdem wird mit PRIMARY KEY ("ID") festgelegt, dass das Feld "ID" zukünftig den Primärschlüssel erthält.
4. Jetzt passiert der eigentliche Kopier-Vorgang in "MeineNeueTabelle". Und auch hier wieder: alle Felder müssen zueinander passen! Natürlich kann "MeineNeueTabelle" völlig andere Feld-Namen enthalten: falls z.B. mein ehemaliger "branche" zukünftig "BranchenCode" heißen soll, so müsste die SQL-Anweisung so lauten:
CREATE TABLE "MeineNeueTabelle"
...
"BranchenCode" INTEGER
...
INSERT INTO "MeineNeueTabelle"
...
"BranchenCode" INTEGER
...
FROM
...
"branche" INTEGER
...
"tmp_csvimport"
5. Als letztes wird mit COMMIT; alle SQL-Befehle zur Ausführung gebracht und mit DROP TABLE "tmp_csvimport" die temporäre Tabelle wieder gelöscht.
Hier folgt die komplette SQL-Befehlskette:
CREATE TEXT TABLE "tmp_csvimport" (
"ID" INTEGER,
"name1" VARCHAR (100),
"strasse" VARCHAR (100),
"plz" VARCHAR (10),
"ort" VARCHAR (50),
"email" VARCHAR (100),
"branche" INTEGER,
"telvorwahl" VARCHAR (100),
"telnummer" VARCHAR (100))
SET TABLE "tmp_csvimport"
SOURCE "ExportDaten.csv; ignore_first=TRUE; fs=\semi";
CREATE TABLE "MeineNeueTabelle" (
"ID" INTEGER NOT NULL,
"name1" VARCHAR (100),
"strasse" VARCHAR (100),
"plz" VARCHAR (10),
"ort" VARCHAR (50),
"email" VARCHAR (100),
"branche" INTEGER,
"telvorwahl" VARCHAR (100),
"telnummer" VARCHAR (100),
PRIMARY KEY ("ID"))
INSERT INTO "MeineNeueTabelle" (
"ID",
"name1",
"strasse",
"plz",
"ort",
"email",
"branche",
"telvorwahl",
"telnummer")
SELECT
"ID",
"name1",
"strasse",
"plz",
"ort",
"email",
"branche",
"telvorwahl",
"telnummer"
FROM
"tmp_csvimport";
COMMIT;
DROP TABLE "tmp_csvimport"