2016-03-25 55 views
1

Veritabanında bir erişim veritabanı tablosunda bulunan nexusdb tablosuna veri eklemek istiyorum. Bunun için iki sorgu kullanıyorum. erişim veritabanından belirli bir veri için ve diğeri nexusdb'ye eklemek için bir tane. Bunu bir döngü kullanarak eklemek istemiyorum. Seçilen tüm veri kümelerini doğrudan eklemek için herhangi bir yol var mı?Veri kümesinden delphi içinde veri kümesi ekleme

+0

Delphi sürümünüzü belirtmelisiniz. –

+0

@mjn Hayır, bunu döngü olmadan istiyorum. – Ishanka

+0

@UweRaabe Delphi 10 Seattle – Ishanka

cevap

1

Seçilen tüm veri kümelerini doğrudan eklemek için herhangi bir yol var mı? İki veritabanları üzerinde olsaydı

, diyelim ki, MS SQL Sunucuları veya MySQL gibi diğer bazı arka uç SQL sunuculara, bunu ancak MS Access ve NexusDB, benim bildiğim hiçbiri arasında olabilir. Ortak olarak göründükleri tek db erişim bağlayıcıları ODBC ve farklı sürücüler arasında heterojen sorguları desteklemeyen afaik'tir (bu yüzden source.database'den destinationerver.database.table select * eklentisini ekleyemezsiniz) .table ")

Sanırım bir döngüde kaldınız. Tek gerçek soru, döngüyü kendiniz mi yoksa kütüphane kodunda saklı olup olmadığıdır.

Aşağıdaki kod, tablolar arasında veri taşımak için FireDAC'ın TFDDataMove bileşenini kullanır. Tabii ki kullanmak için, hedef sunucunun FireDAC veya ODBC'yi desteklemesi gerekir. Uwe Raabe'nin dediği gibi, şimdiki haliyle (Delphi şu anki Seattle versiyonu) FireDAC, NexusDB'yi desteklemiyor ya da tam tersi. Ancak, kendi web sitesine göre, NexusDB için kullanılabilir bir ODBC sürücüsü var. NexusDB yüklü olmamasına rağmen, aşağıdakiler başka bir ODBC sürücüsü ile düzgün çalışıyor, dolayısıyla NexusDB'lerle çalışmalıdır.

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

Seattle'dan FireDAC, NexusDB'yi desteklemiyor. Bu DataMove bileşeninin kaynağı gerçekten basit bir TDataSet olabileceğinden, Nexus tablosundan verileri FD uyumlu veri kümesine taşımak istiyorsanız, ancak burada istenen şekilde başka bir yoldan ilerlemek istemiyorsanız, bu yaklaşım işe yarar. –

+0

Belki de 'TFDBatchMove' daha iyi bir yaklaşımdır: http://docwiki.embarcadero.com/Libraries/Seattle/en/FireDAC.Comp.BatchMove.TFDBatchMove –

+0

@UweRaabe: Teşekkürler. Nexus’un FireDAC’ı desteklemesi için biraz kampanya yapılmış gibi görünüyor, ama ne olduğunu bilmiyorum. – MartynA

İlgili konular