2016-03-25 30 views
1

我想插入數據到一個訪問數據庫表中的nexusdb表。我爲此使用了兩個查詢。一個用於從訪問數據庫中選擇數據,另一個用於插入到nexusdb。我不想用循環插入。有什麼方法可以直接插入所有選定的數據集?從數據集中插入數據到delphi

+0

你應該指定你的Delphi版本。 –

+0

@mjn不,我希望沒有循環。 – Ishanka

+0

@UweRaabe德爾福10西雅圖 – Ishanka

回答

1

有什麼辦法直接插入所有選定的數據集?

如果兩個數據庫分別爲,比如說,MS SQL Server或其他一些後端SQL服務器,如MySQL,你可以這樣做,但MS Access和NexusDB,沒有我所知道的之間。他們似乎有共同的唯一的數據庫訪問連接器是ODBC和afaik,不支持不同驅動程序之間的異類查詢(所以你不能做一個「插入到sourceserver.database.table select * from source.database .table「)

所以我認爲你被困在一個循環中。唯一真正的問題是你是否必須自己編寫循環或是否隱藏在庫代碼中。

下面的代碼使用FireDAC的TFDDataMove組件在表格間移動數據。當然,使用它需要目標服務器支持FireDAC或ODBC。正如Uwe Raabe所說,截至目前(德爾福當前版本爲西雅圖),FireDAC不支持NexusDB,反之亦然。但是,根據他們的網站,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:謝謝。似乎有一個運動來讓Nexus支持FireDAC,但我不知道它是什麼。 – MartynA