Befehlsübergabe an MySQL (load data infile)



  • 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


  • Mod

    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 lokal

    MfF
    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???????????? 😕
    Hilfe

    Dank 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... 😃


  • Mod

    Hallo

    ist diese Datei auf dem Rechner wo auch der mySQL-Server drauf ist oder
    auf dem Client

    MfG
    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


Anmelden zum Antworten