csv in datenbank schreiben per sql befehl
Moderator: Moderatoren
-
- ***
- Beiträge: 65
- Registriert: Mo, 14.01.2008 19:31
csv in datenbank schreiben per sql befehl
Hallo,
Meine textdatei, kommagetrennt, sprengt inzwischen excel und ich suche ein Makro oder SQL Befehl mit dem ich die csv datei in die Datenbank übertragen kann. Bin im Forum nicht fündig geworden. Wer kann mir einen entsprechenden link schicken?
Danke!!
Meine textdatei, kommagetrennt, sprengt inzwischen excel und ich suche ein Makro oder SQL Befehl mit dem ich die csv datei in die Datenbank übertragen kann. Bin im Forum nicht fündig geworden. Wer kann mir einen entsprechenden link schicken?
Danke!!
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: csv in datenbank schreiben per sql befehl
heute morgen im zweiten englischen Forum gepostet
Das hilft?

Code: Alles auswählen
Sub base_insertCSVdatafile
' 2008-01-30
sCSVlokal = "d:/tsi/re_position.csv"
GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
sCSVdatei = ConvertToURL( sCSVlokal )
sMyInsert = " LOAD DATA INFILE '" & sCSVlokal & "' INTO TABLE wro1.re_position FIELDS TERMINATED BY ','"
msgbox sMyInsert
' Kontext holen
Dim oDBKontext
oDBKontext = CreateUnoService ( "com.sun.star.sdb.DatabaseContext" )
If IsNull( oDBKontext ) Then
msgbox "kein DB Kontext"
exit sub
End If
' Datenquelle auswählen
' name of OOo registered data source
oDatenquelle = oDBKontext.getByName( "MySQL" )
' Verbindung zur DB herstellen
If Not oDatenquelle.IsPasswordRequired Then
oVerbindung = oDatenquelle.getConnection( , )
Else
oInteractionHandler = createUnoService( "com.sun.star.sdb.InteractionHandler" )
oVerbindung = oDatenquelle.connectWithCompletion( oInteractionHandler )
End If
' Statement erzeugen
oStatement = oVerbindung.createStatement
' Abfrage absetzen
oResultSet = oStatement.executeUpdate( sMyInsert )
End Sub
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
-
- ***
- Beiträge: 65
- Registriert: Mo, 14.01.2008 19:31
Re: csv in datenbank schreiben per sql befehl
Das hilft schon mal weiter! aber leider "unexcepted token: LOAD in Statement[LOAD]" Was läuft denn da nicht rund in Zeile
Code: Alles auswählen
oResultSet = oStatement.executeUpdate( sMyInsert )
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: csv in datenbank schreiben per sql befehl
Das bedeutet "nur", dass der SQL-Befehl nicht ausgeführt wurde.
Den Fehler hast Du wahrscheinlich in der Codierung des SQLs selbst: lasse ihn Dir anzeigen - und zeige ihn uns, wenn Du den Fehler nicht siehst.
(Tippfehler beim Dateinamen, Tippfehler bei der Tabellenreferenzierung?)
Den Fehler hast Du wahrscheinlich in der Codierung des SQLs selbst: lasse ihn Dir anzeigen - und zeige ihn uns, wenn Du den Fehler nicht siehst.
(Tippfehler beim Dateinamen, Tippfehler bei der Tabellenreferenzierung?)
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
-
- ***
- Beiträge: 65
- Registriert: Mo, 14.01.2008 19:31
Re: csv in datenbank schreiben per sql befehl
Sehr eigenartig...Meine Tabelle hat die Struktur ID(auto),1,2,3,4 und die csv datei 1,2,3,4
Alle Namen im Code sind richtig, der fehler ist immer, keine weiteren Infos zum Fehler.
Wie müsste ich denn den SQL Befehl umstricken um ihn per extras/sql manuell ohne Makro reinzuschießen? Vielleicht gibt das mehr hinweise auf den Fehler...
Alle Namen im Code sind richtig, der fehler ist immer
Code: Alles auswählen
oResultSet = oStatement.executeUpdate( sMyInsert )
Code: Alles auswählen
Sub base_insertCSVdatafile
sCSVlokal = "c:\tmp\01.csv"
GlobalScope.BasicLibraries.LoadLibrary( "Tools" )
sCSVdatei = ConvertToURL( sCSVlokal )
sMyInsert = "LOAD DATA INFILE '" & sCSVlokal & "' INTO TABLE Adressenleer FIELDS TERMINATED BY ';'"
msgbox sMyInsert
' Kontext holen
Dim oDBKontext
oDBKontext = CreateUnoService ( "com.sun.star.sdb.DatabaseContext" )
If IsNull( oDBKontext ) Then
msgbox "kein DB Kontext"
exit sub
End If
' Datenquelle auswählen
' name of OOo registered data source
oDatenquelle = oDBKontext.getByName( "DBImportF4" )
' Verbindung zur DB herstellen
oVerbindung = oDatenquelle.getConnection("" ,"")
' Statement erzeugen
oStatement = oVerbindung.createStatement
' Abfrage absetzen
oResultSet = oStatement.executeUpdate( sMyInsert )
End Sub
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: csv in datenbank schreiben per sql befehl
der Befehl sollte so (allerdings ohne die Basic-Variable) auch im Extras>SQL-Fenster einzugeben sein (ist nur blöde, dass dieses Fenster nur den RC darstellt, aber keine resultset tabellen):
Evtl. den Tabellennamen in (hier) in doppelte Anführungszeichen setzen.
Klappt das?
Code: Alles auswählen
LOAD DATA INFILE 'c:\tmp\01.csv' INTO TABLE Adressenleer FIELDS TERMINATED BY ';'
Klappt das?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
-
- ***
- Beiträge: 65
- Registriert: Mo, 14.01.2008 19:31
Re: csv in datenbank schreiben per sql befehl
Leider kein Erfolg per sql befehl, immerwieder unexepted token. Vielleicht kann nicht in die tabelle geschrieben werden?
hier ist aber glaube ich auch ein fehler da muss doch als Variable sCSVdatei hin oder? Aber auch das hilft mir nicht weiter. Dummerweise finde im netz nirgendwo was zur Arbeit mit dateien...oder ein anderes snipplet.
der fehler ist:
Basic Laufzeitfehler
Type com.sun.star.sdbc.SQLExeption
unexpected token: LOAD in statement [LOAD].
hier ist aber glaube ich auch ein fehler
Code: Alles auswählen
sMyInsert = "LOAD DATA INFILE '" & sCSVlokal & "'
der fehler ist:
Basic Laufzeitfehler
Type com.sun.star.sdbc.SQLExeption
unexpected token: LOAD in statement [LOAD].
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: csv in datenbank schreiben per sql befehl
Das war ein guter Tipp!
Also: erste Erkenntnis aus den Tests: es wird KEINE url-Notation erwartet.
Zweite: die Dateinamen dürfen NICHT das Windows-backspace haben, sondern einen Vorwärts-slash!!!
so jedenfalls klappt das hier mit einem WinXP-Testrechner:
Also: erste Erkenntnis aus den Tests: es wird KEINE url-Notation erwartet.
Zweite: die Dateinamen dürfen NICHT das Windows-backspace haben, sondern einen Vorwärts-slash!!!
so jedenfalls klappt das hier mit einem WinXP-Testrechner:
Code: Alles auswählen
sCSVlokal = "d:/tsi/kunden.csv"
[...]
sMyInsert = " LOAD DATA INFILE '" & sCSVlokal & "' INTO TABLE wro1.kunden FIELDS TERMINATED BY ','"
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
-
- ***
- Beiträge: 65
- Registriert: Mo, 14.01.2008 19:31
Re: csv in datenbank schreiben per sql befehl
gleicher Fehler, egal was ich mache. Kann es an der Datei 01.csv oder an der tabelle liegen? Oder bezieht sich der fehler nur auf den SQL Befehl. Vielleicht schickst Du mir mal deine komplette sub noch mal die du grad getestet hast=)
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: csv in datenbank schreiben per sql befehl
siehe Posting vom 31.
Der Code importiert auf OOo 2.3.1/WinXP in eine registrierte HSQLDB(interne)-Datenquelle.
Bin inzwischen nicht mehr am anderen Standort - hier habe ich kein Windows....
Der Code importiert auf OOo 2.3.1/WinXP in eine registrierte HSQLDB(interne)-Datenquelle.
Bin inzwischen nicht mehr am anderen Standort - hier habe ich kein Windows....
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: csv in datenbank schreiben per sql befehl
Hallo,
ich klinke mich mal hier ein.
Da ich Datenbank-Anfänger bin , habe ich mal eine Frage.
Wie und wo genau, binde ich das hier vorgestellte Makro ein
damit ich eine csv Datei einlesen kann.
Habt Ihr eine Musterdatei?
mfg
mike
ich klinke mich mal hier ein.
Da ich Datenbank-Anfänger bin , habe ich mal eine Frage.
Wie und wo genau, binde ich das hier vorgestellte Makro ein
damit ich eine csv Datei einlesen kann.
Habt Ihr eine Musterdatei?
mfg
mike
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: csv in datenbank schreiben per sql befehl
mike,
das Makro kann "irgendwo" (in einem Modul Deiner OOo Installation, bspw. "Meine Makros>Standard") stehen.
Die CSV-Datei, die eingelesen wird, muss die gleiche Struktur haben wie die Datenbanktabelle, deren Datenbereich es zu füllen gilt.
Da Du nicht die gleiche Zieltabelle hast - nützt Dir auch meine Testdaten.csv nichts.
ich stelle meinen Testdatensatz trotzdem mal hier hin:
das Makro kann "irgendwo" (in einem Modul Deiner OOo Installation, bspw. "Meine Makros>Standard") stehen.
Die CSV-Datei, die eingelesen wird, muss die gleiche Struktur haben wie die Datenbanktabelle, deren Datenbereich es zu füllen gilt.
Da Du nicht die gleiche Zieltabelle hast - nützt Dir auch meine Testdaten.csv nichts.
ich stelle meinen Testdatensatz trotzdem mal hier hin:
Code: Alles auswählen
1,Harry Hübsch,Am Höfchen 1,55116 Mainz,2008-01-31 12:34:56,2008-01-31
2,Wilma Wandern,Weintorstr. 2,55118 Mainz,2008-01-31 12:34:56,2008-01-31
3,Fred D. Feuerstein,Frauenlobstrasse 6,55116 Mainz,2008-01-31 12:34:56,2008-01-31
4,J. Gutenberg-Universität_1,Fachbereich 04 Medizin,55099 Mainz,2008-01-31 12:34:56,2008-01-31
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: csv in datenbank schreiben per sql befehl
Hallo Winfried,
erst einmal vielen Dank für die Hilfe.
Das Makro bleibt bei:
hängen.
Meine Datenbank lautet test_datenbank.odb und ist unter
/net/nfs.xyz/space/export/home/mustermann/
angemeldet.
mfg
mike
erst einmal vielen Dank für die Hilfe.
Das Makro bleibt bei:
Code: Alles auswählen
oDatenquelle = oDBKontext.getByName( "MySQL" )
Meine Datenbank lautet test_datenbank.odb und ist unter
/net/nfs.xyz/space/export/home/mustermann/
angemeldet.
mfg
mike
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: csv in datenbank schreiben per sql befehl
die Stelle ist der Name der registrierten Datenquelle (nicht der Name der Base-Datei!), also was als Name im Datasourcebrowser erscheint, wenn Du F4 drückst
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
-
- ***
- Beiträge: 65
- Registriert: Mo, 14.01.2008 19:31
Re: csv in datenbank schreiben per sql befehl
Ich habe nun alles noch einmal versucht aber immer wieder mit der gleichen Fehlermeldung. Gibt es nicht einen weg über insert into oder ähnliches? Irgendwie finde ich dazu keine Literatur online=(