2016-03-25 36 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