csv in datenbank schreiben per sql befehl

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: csv in datenbank schreiben per sql befehl

Re: csv in datenbank schreiben per sql befehl

von Gabriel123 » Mi, 27.02.2008 16:46

oh ha, da hätte ich mal vorab in meine datei schauen müssen. da steht überall \t. habe also als Separator \t angegeben. Das scheint aber nicht zu gehen denn in der Tabelle landet dann Text\tText und die nächste zelle ist leer.

Re: csv in datenbank schreiben per sql befehl

von komma4 » Mi, 27.02.2008 15:57

Das machen, was im Handbuch dazu steht:
Special indicators for Hsqldb Text Table separators

\semi

semicolon

Re: csv in datenbank schreiben per sql befehl

von Gabriel123 » Mi, 27.02.2008 15:44

Ich habe nochmal eine Frage:

Code: Alles auswählen

sql= SET TABLE ""TableCSV"" SOURCE ""import1.csv;fs=,;encoding=ISO-8859-1"" INSERT INTO
Das fs=,; gibt an, dass Komma mein Trennzeichen ist. Es ist aber ein ;
Wenn ich nun aber fs=;; eingebe gibts eine fehlertmeldung, ebenfalls bei fs=";" oder fs=';'

Was kann man da wohl machen ?

Re: csv in datenbank schreiben per sql befehl

von Gabriel123 » Fr, 15.02.2008 08:56

Das heißt manuell eine datei auszuwählen fällt aus. Sie muss im gleichen Verzeichnis liegen...
Deshalb auch die Doppelung: c:/tmp/c:/tmp wenn ich eine url angebe. Aber es muss doch eine Möglichkeit geben einen Pfad unabhängig vom odb Verzeichnis anzugeben...

Hier habe ich grade was gefunden, man kann die database properties datei(was immer das ist) wohl ändern
"textdb.allow_full_path"
http://www.hsqldb.org/doc/guide/guide.html#N1104D

Vielleicht gibt es aber auch eine Möglichkeit die url aus dem filecontrol in eine relative url umzuwandeln. Also nicht convertToUrl sondern ConvertToRelativeUrl oder sowas...

Re: csv in datenbank schreiben per sql befehl

von komma4 » Fr, 15.02.2008 00:36

Das ConvertToURL wird von der MySQL Syntax in Basic verkraftet!

Ich habe mit dem Beispiel oben einen Import mittels Extras>SQL... innerhalb der base_HSQL.odb hinbekommen, allerdings:

* die EIngabedatei wird im Pfad der ODB erwartet, [eine relative Angabe, oder die URL-Notation wurde mit "not found" quittiert]
* die Umlaute werden (ohne Codierungsangabe!) nicht korrekt importiert,
* ich erhalte eine Fehlermeldung, dass die Spalte "ID" nicht zu finden sei


Da ich die interne Datenbank nicht nutze... kann ich damit leben.


Der erste Punkt dürfte für Dich von Interesse sein?!

Re: csv in datenbank schreiben per sql befehl

von Gabriel123 » Do, 14.02.2008 21:28

komma4 hat geschrieben:Du vewendest die URL-Schreibweise im SQL ??! Geht das?!
hm ich denke doch, Für den SQL Befehl LOAD DATA INFILE hattest Du es doch innerhalb des Makros auch genutzt?!

Re: csv in datenbank schreiben per sql befehl

von komma4 » Do, 14.02.2008 16:38

Du vewendest die URL-Schreibweise im SQL ??! Geht das?!

Re: csv in datenbank schreiben per sql befehl

von Gabriel123 » Do, 14.02.2008 16:23

also das Problem ist die Variable und der Pfad. gebe ich den Pfad per msgbox aus steht da c:\tmp\import1.csv dann kommt aber beim import eine fehlermeldung dass auf c:\tmp\c:\tmp\import1.csv nicht zugegriffen werden kann...

Re: csv in datenbank schreiben per sql befehl

von komma4 » Do, 14.02.2008 16:01

Du solltest beide Befehle trennen: erst mal die Spalten-ID zurück setzen, dann in einer nächsten Anweisung der Import.

Re: csv in datenbank schreiben per sql befehl

von Gabriel123 » Do, 14.02.2008 15:47

Falls Du das mal selbst ausprobierst, vielleicht kannst Du ja mal versuchen 01.csv durch eine Variable zu ersetzen aus einem FileControl Element. das versuche ich grad und es haut nicht hin.

Code: Alles auswählen

DialogLibraries.LoadLibrary("DBImportF4Bib")
Dialog3 = CreateUnoDialog(DialogLibraries.DBImportF4Bib.Dialog3)

Select Case Dialog3.Execute()

Case 1
dlgDateiName=Dialog3.getControl("FileControl1")
Dateiname=dlgDateiName.GetText()
msgbox Dateiname

GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
sCSVdatei = ConvertToURL( Dateiname )
sMyInsert = "ALTER TABLE ""adressenimport"" ALTER COLUMN ""ID"" RESTART WITH 1 CREATE TEXT TABLE ""TableCSV"" (""Kundennr.""VARCHAR(255),""Vorwahl""VARCHAR(255)) SET TABLE ""TableCSV"" SOURCE ""'"& sCSVdatei &"';fs=,;encoding=ISO-8859-1"" INSERT INTO ""adressenimport"" (""Kundennr."",""Vorwahl"") SELECT ""Kundennr."",""Vorwahl"" FROM ""TableCSV"" commit drop table ""TableCSV"""
msgbox sMyInsert

Ich glaube alles was " " ist muss noch "" "" =)

Re: csv in datenbank schreiben per sql befehl

von komma4 » Do, 14.02.2008 11:57

Zum Zurücksetzen der AUTO_INCREMENT Spalte einer Tabelle der internen Datenbank HSQLDB:

Code: Alles auswählen

ALTER TABLE <TABLE_NAME> ALTER COLUMN <COLUMN_NAME> RESTART WITH <NEW_VALUE>

Re: csv in datenbank schreiben per sql befehl

von Gabriel123 » Do, 14.02.2008 11:41

Danke für den Hinweis, Tabelle1 hat nur Lesezugriff, wenn der Button bearbeiten geklickt wird, wird der aktuelle datesatz in Tabelle2 verschoben und mit allen Änderungen dort gespeichert. Tabelle1 wird nach getaner Arbeit gelöscht und per import mit neuen Daten gefüttert. Tabelle2 wird dann exportiert und ebenfalls gelöscht, dann gehts von vorn los.

im Moment suche ich aber noch einen Weg die ID per Makro zurückzusetzen, denn wenn ich in Tabelle1 nun neue daten importiere läuft die ID weiter...

Re: csv in datenbank schreiben per sql befehl

von komma4 » Do, 14.02.2008 11:27

Prächtig (muss ich heute abend auch mal probieren).


Deine BASE-Datei kannst Du natürlich weitergeben. Aber denke daran: die interene HSQLDB wird als Einzelplatzsystem genutzt.

Gabriel123> wird im Call Center abgearbeitet. Wenn fertig soll der Inhalt der Tabelle gelöscht bzw.

Sollte die Aktion des CallCenters nicht auch dokumentiert werden (verschieben des bearbeiteten Datensatzes in eine neue Tabelle, hinzufügen Zeitstempel der Bearbeitung und BearbeiterName)?
Und Du solltest doch in der Lage sein im "laufenden Betrieb" weiterem neue Daten einzukippen, oder? "Sitzt" ihr am gleichen Standort?

Re: csv in datenbank schreiben per sql befehl

von Gabriel123 » Do, 14.02.2008 11:02

Ich habe grade im französischen Forum eine gute Anleitung gefunden. Per SQL Befehl kann ich so die daten importieren:

Code: Alles auswählen

CREATE TEXT TABLE "TableCSV" ("ID" INTEGER PRIMARY KEY, "nom" VARCHAR(50),
"prenom" VARCHAR(50))
SET TABLE "TableCSV" SOURCE "01.csv;fs=,"
INSERT INTO "adressenleer" ("ID", "nom", "prenom") SELECT "ID", "nom", "prenom" FROM
"TableCSV"
commit
drop table "TableCSV"
Das habe ich dann ins Makro geschrieben.
Funktioniert soweit ersteinmal.

Re: csv in datenbank schreiben per sql befehl

von Gabriel123 » Do, 14.02.2008 08:38

Wow, also erst einmal herzlichen Dank für deine Geduld und Ausführlichkeit. Welchen DB Engine ich nutze ist eine gute Frage,
ich habe mit Base einfach eine DB angelegt und unter .odb gespeichert. Also denke ich HSQL. Meine Datenmenge ist <5.000 Datensätze. Ich habe von den datenbanken leider noch nicht so den Plan, jetzt auf MYSQL umzusteigen würde mir vermutlich alle bisher programmierten Abfragen unbrauchbar machen.

Mein Szenario sieht so aus: In meiner DB ist eine Tabelle mit Daten+Telefonnummer von Kunden. Die Tabelle wird im Call Center abgearbeitet. Wenn fertig soll der Inhalt der Tabelle gelöscht bzw. exportiert werden (daten wurden verändert) und eine neue liste in die gleiche Tabelle importiert werden. Und das alles über makros. Den Export kann ich zur Not auch manuell über Calc(F4) machen, den Import leider nicht. Wichtig noch: Die DB soll weitergegeben werden können.

Nach oben