Datenbank-Update von einer Tabelle mit einer zweiten



  • Hi,

    ich arbeite mit CodeGear 2009, einer TADOConnection und einem TADOQuery. Ich habe zwei Tabellen in einer Access-Datenbank mit den folgenden Spalten:

    Tab1:  Index, Col1, Col2, Col3
    Tab2:  Index, Col1, Col2, Col3
    

    Ich möchte nun eine Zeile mit einem bestimmten Index in Tab1 durch eine Zeile mit einem bestimmten Index aus Tab2 ersetzen. Mein Ansatz war:

    UPDATE Tab1,Tab2 SET Tab1.Col1=Tab2.Col1, Tab1.Col2=Tab2.Col2,... WHERE Tab1.Index=2 AND Tab2.Index=4
    

    Das erzeugt aber zwei Exceptions:
    "Current provider does not support returning multiple recordsets from a single execution"
    "ADOQuery2: CommandText gibt keine Ergebnismenge zurück"
    In der Anwendung deaktiviere ich den ADOQuery, trage das Kommando ein und aktiviere ihn wieder. Interessanter Weise ist die Datenbank nach einem Neustart meines Tools tatsächlich geändert.
    Was ist da los? Gibt es vielleicht eine andere Methode, die gewünschte Operation durchzuführen? Eine, bei der ich nicht jeden Spaltennamen eintragen muss?

    Gruß, Heimelchen



  • Um die Exceptions loszuwerden: verwende TADOConnection::Execute oder ein TADOCommand - TADOQuery erscheint mir hier nicht richtig.

    Was das mit den Feldnamen angeht: ich kenne keine direkte Möglichkeit.
    Du könntest den SQL String dynamisch zusammenbasteln, allerdings müsstest du dazu die Spaltennamen irgendwie enumerieren können. Wie das mit Access geht, bzw. ob überhaupt, weiss ich nicht.



  • Jetzt bekomme ich interessanter Weise eine Exception mit einem Fehler in meiner SQL Syntax...




Anmelden zum Antworten