Daten aus Datei in DB konvertieren



  • Moin moin!

    Ich muss Werte aus einer Datei auslesen und in eine lokale Datenbank schreiben. Eine Zeile stellt dabei einen Datensatz dar und wird per while(Line != "") in die einzelnen Tokens zerlegt. Soweit funktioniert das ganz gut. Ich packe die Werte z. Zt. testhalber in ein StringGrid, das funktioniert problemos.

    Was mir jetzt allerdings etwas Kummer bereitet ist, wie ich den Kram am effektivsten in meine Datenbank reinbekomme. Im Moment bastel ich einen AnsiString mit einem SQL INSERT Statement drin, das ich dann per TQuery ausführen lasse. Das funktioniert aber noch nicht so recht.

    Drum meine Frage: Gibt es entweder einen anderen/besseren Weg, wie ich die Werte in meine Datenbank bekomme, oder bietet der C++ Builder (Ich verwende Version 6 Enterprise Suite) evt. eine Möglichkeit SQL Statements vorab schon mal auf der DB zu testen, per DB Oberfläche oder so. (Momentan wirft das Programm einfach eine BDE Exception "Ungültiger Parameter" damit komme ich leider nicht wirklich weiter.)

    Viele Grüße
    Alpha



  • Das liegt wahrscheinlich daran, dass Du um einen Wert die Anführungszeichen vergessen hast, oder zuviele Anführungszeichen, oder, oder, oder...

    Das einfachste ist, ein TQuery zu nehmen und einfach nur ein SELECT * FROM Tabellenname reinzusetzen. Dann ein TUpdateSQL damit verknüpfen und die SQL-Anweisung von diesem generieren zu lassen.



  • Joe_M. schrieb:

    Das liegt wahrscheinlich daran, dass Du um einen Wert die Anführungszeichen vergessen hast, oder zuviele Anführungszeichen, oder, oder, oder...

    Na denn fröhliches Debuggen 😉

    Joe_M. schrieb:

    Das einfachste ist, ein TQuery zu nehmen und einfach nur ein SELECT * FROM Tabellenname reinzusetzen. Dann ein TUpdateSQL damit verknüpfen und die SQL-Anweisung von diesem generieren zu lassen.

    Ich hab das hier mal versucht:

    Query1->Close();
    Query1->SQL->Clear();
    Query1->SQL->Add(Query);
    Query1->SQL->Add("SELECT * FROM 'test.db'");
    Query1->ExecSQL();
    

    Bekomme da allerdings die Fehlermeldung "Zu viele offene Tabellen".
    Was will mir der Künstler damit sagen? Muss ich das Ergebnis der Anfrage irgendwie zuweisen oder sowas?

    Update: Problem gelöst, bei SELECT nicht ExecSQL() sondern Open() verwenden. 🙂
    Trotzdem nochmal die Frage, kann ich über die DB Oberfläche auch SQL Anfragen erstmal direkt auf meinen DBs testen, ohne jedesmal meinen Code ändern zu müssen? Das ist auf Dauer doch bisschen umständlich ...

    Ciao
    Alpha



  • Hallo

    Query1->SQL->Add(Query); // was ist denn Query?
    Query1->SQL->Add("SELECT * FROM 'test.db'"); // Wenn Query ein AnsiString mit einer Anwesiung ist, darfst du da kein weiteres Kommando dranhängen. 
    // Jedes Kommando muß einzeln ausgeführt werden
    Query1->ExecSQL(); // Für SELECT must du Open() verwenden, ExecSQL für alle anderen
    

    bis bald
    akari



  • Leg dir ein TQuery und ein TUpdateSQL (TDataSource brauchst Du natürlich auch...) auf das Formular oder Datenmodul, trag den SELECT unter SQL des Query ein (bereits zur Entwurfszeit!). Mach einen Doppelklick auf die TQuery. Im Feldmanager, der dabei aufgeht, rechte Maustaste -> alle Felder hinzufügen.
    Trag in der TQuery unter UpdateObject das TUpdateSQL-Objekt ein. Doppelklick auf TUpdateSQL und schau, was da alles feines geboten wird...

    Grüße Joe_M.


Anmelden zum Antworten