Befehlsübergabe an MySQL (load data infile)
-
Hallo.
Ich hab folgendes Problem:
Ich will eine Textdatei in eine MySQL Datenbank über einen C++ Befehl einlesen. Der funktionierende SQL-Befehl lautet "load data infile ´PFAD´into table TABELLENNAMEIch kann verschiedene SQL-Befehle über Borland Builder6 absetzen (SELECT, DELETE,.....) und sie funktionieren auch
Nur der obere Befehl funktioniert komischerweise nicht
es erscheint immer eine Fehlermeldung beim Starten dieses Befehls.Quelltext:
DataModule2->Query1->Close();
DataModule2->Query1->SQL->Clear();
DataModule2->Query1->SQL->Add("load data infile ´"c:\text.txt"%´ into table dat");
DataModule2->Query1->Open();Fehlermeldung:
Im Projekt Project.exe ist eine Exception der Klasse EDBEngineError aufgetreten. Meldung: Állgemeiner SQL-Fehler.......Kennt sich da jemand aus und kann mir helfen.........
Danke.
-
Hallo
mir ist die Syntaxt für load data nicht ganz klar. Aber wenn du denn Dateinamen direkt so übergibst, vergiß nicht die doppelten Backslashes.
DataModule2->Query1->SQL->Add("load data infile ´"c:\\text.txt"%´ into table dat");
bis bald
akari
-
Danke für die schnelle Antwort.
hab ich versucht.....leider auch kein Erfolg.
-
Hallo
ich hab mal mein SQL-Manual durchgeschaut und folgendes gefunden :
LOAD DATA INFILE "C:\\tmp\\skr.txt" INTO TABLE skr;
oder Unix-Style
C:/tmp/skr.txt
Da muß du die überflüssigen Sonderzeichen raushauen.
bis bald
akari
-
Hallo
das beste ist du schaust dir das im Handbuch fuer mySQl mal genau an
(da gibt es einige Fallstricke)
ich habe vor einiger Zeit schonmal versuchtaber nie so richtig zum Laufen gebracht
Problem war aber bei mir das die Datei nicht auf dem Server lag sondern lokalMfF
Klaus
-
Werd mal nochmal den Befehl durchschauen bzw. die Sonderzeichen
aber der Befehl funktioniert eigentlich, d. h. wenn man in MySQL in die SQL Eingabeaufforderung geht und den Befehl so eingibt macht er alles ohne Probleme, nur über C macht er Probleme.
Danke an alle
-
Statt "Query->Open()" "Query->ExecSQL()" nehmen, da die LOAD-Anweisung keine Rückgabemenge besitzt.
Eine CSV-Datei in eine Tabelle laden:
Vorraussetzung ist eine bestehende Tabelle mit den entsprechenden vordefinierten Spalten!
Im Beispiel wird der File "C:/Dateien/import.csv" in die Tabelle "daten" der Datenbank "testdb" geladen. Alle Felder werden durch ";" getrennt und in die Spalten "id, name" usw. geladen
LOAD DATA INFILE 'C:/Dateien/import.csv' INTO TABLE testdb.daten FIELDS TERMINATED BY ';' (id, name, wert, datum)
-
Hab es jetzt folgendermassen abgeändert, funktioniert aber leider immer noch nicht
{
DataModule2->Query1->Close();
DataModule2->Query1->SQL->Clear();
DataModule2->Query1->SQL->Add("delete from dat");
DataModule2->Query1->SQL->Add("load data infile 'c:/mysql/Tabellen/tar.txt' into table dap.dat fields terminated by ';' lines terminated by ','");
DataModule2->Query1->ExecSQL();
}Hab ich was übersehn????????????
HilfeDank euch
-
Kannst du mal ansatzweise Deine tar.txt zeigen? Warum machst Du das mit lines terminated by ',' ?
-
Dies ist der tar.txt bzw. ein Auszug davon:
0258006566 ; 001 ; 312132 ; 2004-11-10 ; 14:34:10 ; 230 ; 0 ; 21 ,
0258006566 ; 001 ; 312132 ; 2004-11-10 ; 14:32:09 ; 230 ; 0 ; 21 ,Diese Datei wird von einem anderen System erzeugt, deswegen habe ich nur diese Möglichkeit.
-
Also in der Zeit, die dieser Thread schon läuft, hättest Du längst eine Importroutine schreiben können...
-
Hallo
ist diese Datei auf dem Rechner wo auch der mySQL-Server drauf ist oder
auf dem ClientMfG
Klaus
-
Du solltest das in 2 Queries machen:
[cpp]
{
// Tabelle kicken
DataModule2->Query1->Close();
DataModule2->Query1->SQL->Clear();
DataModule2->Query1->SQL->Add("delete from dat");
DataModule2->Query1->ExecSQL();// neue Daten einspielen
DataModule2->Query1->Close();
DataModule2->Query1->SQL->Clear();
DataModule2->Query1->SQL->Add("load data infile 'c:/mysql/Tabellen/tar.txt' into table dap.dat fields terminated by ';' lines terminated by ',' (spalte1, spalte2, ...)");
DataModule2->Query1->ExecSQL();
}
[/cpp]
-
Es hat geklappt
Vielen Dank an alle besonders an F98