ADODataSet - Ergebnismenge direkt in Tabelle speichern



  • Hallo,

    wie kann man eine TADODataSet-Datenmenge direkt in eine Tabelle Speichern, ohne in einer Schleife jeden Datensatz einzeln mit INSERT... zu schreiben?

    Danke sehr



  • Hallo

    Da stellt sich doc hdie Frage wie du die Datenmenge mit Datensätzen gefüllt hast? Wenn das neue DS (benötigen das INSERT) sind must du doch eh für jeden ->New() aufrufen, dann macht es doch auch keine Umstände noch ->Post() aufzurufen?

    bis bald
    akari



  • akari schrieb:

    Da stellt sich doc hdie Frage wie du die Datenmenge mit Datensätzen gefüllt hast?

    Danke erst einmal für die schnelle Antrwort

    DataSet habe ich mittels einer SQL-Abfrage (SELECT ...) mit Daten gefüllt.

    ADODataSet1->CommandType = cmdText;
    ADODataSet1->CommandText = "SELECT feld1, feld2 FROM tabelle1 ";
    ADODataSet1->Open();
    

    Jetzt möchte ich diese Ergebnismenge in eine Tabelle direkt speichern.
    Wie kann ich zu diesem Zweck (z.B.) TADOTable nutzen?

    Danke



  • Hallo

    Dazu taugen die TDataSet-Komponenten nichts.
    Du kannst das aber mit einem einzigen SQL-Kommando machen

    // Erstellt direkt eine neue Tabelle namens Test aus der Ergebnismenge
    ADODataSet1->CommandText = "CREATE TABLE Test SELECT feld1, feld2 FROM tabelle1 ";
    // Abfrage wird ausgeführt. Gibt aber nichts zurück
    ADODataSet1->Execute();
    

    Die Syntax ist aber von Datenbank abhängig. Das gezeigte läuft auf MySQL.

    bis bald
    akari



  • Bitte auf gar keinen Fall TADOTable verwenden. Diese Komponente dient ausschließlich um bestehende BDE-Anwendung auf ADO umzustellen. Sie ist recht buggy und kaum mehr als ein Marketinggag...

    Was Du da versuchst ist mir nicht ganz klar?!? Eigentlich brauchst Du doch nur 2 SQL-Statements, einen mit CREATE TABLE um die neue Tabelle zu erstellen und einen mit INSERT INTO ... mit einem SELECT auf die einzufügenden Daten.
    Aber dennoch ist mir nicht klar, warum Du Daten, die sich bereits in einer Tabelle befinden, in eine andere Tabelle kopieren willst. Normalerweise versucht man redundante Daten zu vermeiden...



  • Hallo

    Joe_M. schrieb:

    Aber dennoch ist mir nicht klar, warum Du Daten, die sich bereits in einer Tabelle befinden, in eine andere Tabelle kopieren willst. Normalerweise versucht man redundante Daten zu vermeiden...

    Das kann schon Sinn machen wenn man eine aufwendige Abfrage zwischenspeichern will um weitere DB-Berechnungen damit zu machen. Ob das hier wirklich angebracht ist natürlich eine Frage.

    bis bald
    akari



  • Vielen Dank für die Tipps.

    Folgendes: Die Hauptdatenbank liegt auf einem Server. Ich möchte alle Daten, die ich brauche, holen und bearbeiten und dann in einer lokalen Datenbank speichern. Deshlab dieser Weg.
    Und da sich hier um zwei verschiedene Datenbanken (Server-DB und lokale DB) handelt, kann ich folgendes nicht verwenden:

    "CREATE TABLE Test SELECT feld1, feld2 FROM tabelle1 "...
    //oder 
    "SELECT INTO ..."
    

    Deshalb dachte ich, ich hole erst mal aus der Server-DB die Daten, die ich brauche (ADOQuery bzw. ADODataSet). Danach speichere ich diese Datenmenge (Query-Ergebnis) in meiner lokalen DB, am besten auf einen Schlag.

    Oder findet Ihr diesen Weg nicht in Ordnung?

    Danke!



  • Hallo

    In dem Fall kommst du um eine Schleife über das DataSet mitsamt manuellem Insert nicht umhin.

    bis bald
    akari


Anmelden zum Antworten