Seite 1 von 3
csv in datenbank schreiben per sql befehl
Verfasst: Do, 31.01.2008 15:38
von Gabriel123
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!!
Re: csv in datenbank schreiben per sql befehl
Verfasst: Do, 31.01.2008 15:41
von komma4
heute morgen im zweiten englischen Forum gepostet
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
Das hilft?
Re: csv in datenbank schreiben per sql befehl
Verfasst: Do, 07.02.2008 14:54
von Gabriel123
Das hilft schon mal weiter! aber leider "unexcepted token: LOAD in Statement[LOAD]" Was läuft denn da nicht rund in Zeile
Re: csv in datenbank schreiben per sql befehl
Verfasst: Do, 07.02.2008 16:53
von komma4
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?)
Re: csv in datenbank schreiben per sql befehl
Verfasst: Fr, 08.02.2008 13:17
von Gabriel123
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.
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
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...
Re: csv in datenbank schreiben per sql befehl
Verfasst: Fr, 08.02.2008 14:07
von komma4
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):
Code: Alles auswählen
LOAD DATA INFILE 'c:\tmp\01.csv' INTO TABLE Adressenleer FIELDS TERMINATED BY ';'
Evtl. den Tabellennamen in (hier) in doppelte Anführungszeichen setzen.
Klappt das?
Re: csv in datenbank schreiben per sql befehl
Verfasst: Fr, 08.02.2008 14:18
von Gabriel123
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].
Re: csv in datenbank schreiben per sql befehl
Verfasst: Fr, 08.02.2008 14:39
von komma4
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:
Code: Alles auswählen
sCSVlokal = "d:/tsi/kunden.csv"
[...]
sMyInsert = " LOAD DATA INFILE '" & sCSVlokal & "' INTO TABLE wro1.kunden FIELDS TERMINATED BY ','"
Re: csv in datenbank schreiben per sql befehl
Verfasst: Fr, 08.02.2008 15:35
von Gabriel123
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=)
Re: csv in datenbank schreiben per sql befehl
Verfasst: Fr, 08.02.2008 15:51
von komma4
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....
Re: csv in datenbank schreiben per sql befehl
Verfasst: Di, 12.02.2008 07:46
von mike6
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
Re: csv in datenbank schreiben per sql befehl
Verfasst: Di, 12.02.2008 08:43
von komma4
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:
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
Re: csv in datenbank schreiben per sql befehl
Verfasst: Di, 12.02.2008 09:04
von mike6
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
Re: csv in datenbank schreiben per sql befehl
Verfasst: Di, 12.02.2008 09:15
von komma4
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
Re: csv in datenbank schreiben per sql befehl
Verfasst: Mi, 13.02.2008 15:35
von Gabriel123
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=(