2016-03-25 9 views
1

アクセスデータベーステーブルにあるnexusdbテーブルにデータを挿入します。私はこれに対して2つのクエリを使用しています。 1つはアクセスデータベースの選択データ用、もう1つはinsert to nexusdb用です。私はループを使用してこれを挿入したくありません。選択したすべてのデータセットを直接挿入する方法はありますか?デルファイのデータセットからデータを挿入

+0

デルファイのバージョンを指定する必要があります。 –

+0

@mjnいいえ、私はループなしでこれが欲しいです。 – Ishanka

+0

@UweRaabe Delphi 10 Seattle – Ishanka

答えて

1

選択したすべてのデータセットを直接挿入する方法はありますか?

2つのデータベースはMS SQLサーバやMySQLのようないくつかの他のバックエンドのSQLサーバ、たとえば、上にあった場合は、あなたがこれを行うことができますが、MS AccessとNexusDB、私の知っているどれもの間。彼らが共通に持っている唯一のDBアクセスコネクタは、ODBCと、異なるドライバ間で異種クエリをサポートしていないafaikです(つまり、 "destinationserver.database.table select * from source.databaseから挿入できません" .table ")

だから私はあなたがループで立ち往生していると思います。唯一の本当の疑問は、あなた自身でループを書く必要があるのか​​、それともライブラリコードに隠れているのかということです。

以下のコードは、FireDACのTFDDataMoveコンポーネントを使用してテーブル間でデータを移動します。もちろん、それを使用するには、宛先サーバがFireDACまたはODBCをサポートする必要があります。 Uwe Raabe氏によれば、FireDACはNexusDBをサポートしていません(現在はDelphiの最新バージョン(シアトル))。逆も同様です。しかし、彼らのウェブサイトによると、NexusDB用のODBCドライバがあります。私はNexusDBをインストールしていませんが、次は別のODBCドライバでうまく動作しますので、NexusDBで作業する必要があります。

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はNexusDBをサポートしていません。 DataMoveコンポーネントのソースは実際には単純なTDataSetになる可能性があるため、NexusテーブルからFD互換のデータセットにデータを移動する場合は、この方法が有効です。 –

+0

恐らく 'TFDBatchMove'がより良いアプローチです:http://docwiki.embarcadero.com/Libraries/Seattle/en/FireDAC.Comp.BatchMove.TFDBatchMove –

+0

@UweRaabe:ありがとうございます。 FireDACをサポートするためのNexusのキャンペーンは少しありましたが、何が原因かわかりません。 – MartynA

関連する問題