2016-03-25 9 views
1

Ich möchte Daten in eine Nexusdb-Tabelle einfügen, die in einer Zugriffsdatenbanktabelle sind. Ich verwende dafür zwei Abfragen. eine für ausgewählte Daten aus der Access-Datenbank und eine andere für das Einfügen in nexusdb. Ich möchte das nicht mit einer Schleife einfügen. Gibt es eine Möglichkeit, den gesamten ausgewählten Datensatz direkt einzufügen?Einfügen von Daten aus einem Dataset in Delphi

+0

Sie sollten Ihre Delphi-Version angeben. –

+0

@mjn Nein, ich möchte das ohne eine Schleife. – Ishanka

+0

@UweRaabe Delphi 10 Seattle – Ishanka

Antwort

1

Gibt es eine Möglichkeit, alle ausgewählten Datensätze direkt einzufügen?

Wenn die beiden Datenbanken waren, sagen wir, MS SQL-Server oder eine andere Back-End-SQL-Server wie MySQL, könnten Sie dies tun, aber zwischen MS Access und NexusDB, keine, die ich kenne. Die einzigen Db-Zugriffskonnektoren, die sie gemeinsam zu haben scheinen, sind ODBC und afaik, die heterogene Abfragen über verschiedene Treiber hinweg nicht unterstützen (so dass Sie nicht in die Datei destinationserver.database.table einfügen können, wählen Sie * aus source.database .table ")

Also ich denke, Sie sind mit einer Schleife fest. Die einzige wirkliche Frage ist, ob Sie die Schleife selbst schreiben müssen oder ob sie im Bibliothekscode versteckt ist.

Der folgende Code verwendet die TFDDataMove-Komponente von FireDAC, um Daten zwischen Tabellen zu verschieben. Um es zu verwenden, muss der Zielserver natürlich entweder FireDAC oder ODBC unterstützen. Wie Uwe Raabe jetzt sagt (Delphi aktuelle Version ist Seattle), unterstützt FireDAC keine NexusDB oder umgekehrt. Es ist jedoch ein ODBC-Treiber für NexusDB verfügbar, laut ihrer Website. Obwohl ich NexusDB nicht installiert habe, funktioniert das folgende mit einem anderen ODBC-Treiber gut, so sollte mit NexusDB funktionieren.

procedure TForm1.TestDataMove; 
var 
    Item : TFdMappingItem; 
begin 
    Item := FDDataMove1.Mappings.Add; 
    Item.SourceFieldName := 'ID'; 
    Item.DestinationFieldName := 'ID'; 

    Item := FDDataMove1.Mappings.Add; 
    Item.SourceFieldName := 'Name'; 
    Item.DestinationFieldName := 'Name'; 

    FDDataMove1.Source := FDTable1; 
    FDDataMove1.Destination := FDTable2; 
    FDDataMove1.Options := FDDataMove1.Options - [poOptimiseSrc]; 
    FDDataMove1.Execute; 

    FDConnection2.Connected := False; 
    FDTable2.Open; 
end; 
+0

FireDAC unterstützt ab Seattle keine NexusDB. Da die Quelle dieser DataMove-Komponente eigentlich ein einfaches TDataSet sein kann, würde diese Methode funktionieren, wenn Sie die Daten aus der Nexus-Tabelle in ein FD-kompatibles Dataset verschieben möchten, aber nicht andersherum, wie hier gefordert. –

+0

Vielleicht 'TFDBatchMove' ist der bessere Ansatz: http://docwiki.embarcadero.com/Libraries/Seattle/en/FireDAC.Comp.BatchMove.TFBatchMove –

+0

@UweRaabe: Danke. Es scheint ein bisschen eine Kampagne gegeben zu haben, um Nexus dazu zu bringen, FireDAC zu unterstützen, aber ich weiß nicht, was daraus geworden ist. – MartynA