Bir Veritabanından Diğerine Veri Aktarma

25/07/2018, 18:44

mehmetb84

MErhaba arkadaşlar,
Yıllar önce Ozan bey'in yardımıyla iki veritabanı arasında, yinelenen verileri dışarıda bırakacak biçimde veri transferi yapmayı sağlayan bir kod sistemi yaratmıştık.

Fakat sonradan fark ettim ki, yinelenen veriler konusunda bir aksaklık var.
Normalde, aktarılacak olan kayıtların fatura numaraları, metrajları ve fiyatları aynı olduğu takdirde bunu mükerrer veri olarak kabul edip aktarmaması gerekiyor.
Fakat fark ettiğim üzere, fatura numaraları ve metrajları aynı olan fakat fiyatları farklı olan kayıtlar da, mükerrer kayıt olarak kabul ediliyor ve aktarılmıyor. Esasında fiyatları farklı olan kayıtlar ayrı birer fatura olarak kabul edilmeli fakat bu gerçekleşmiyor. Bunu düzeltmek için kodun içerisine price bölümünü ekledim ama fayda etmedi.

Ekteki örneklerde göreceğiniz üzere;

ana veritabanında (sistemtakip)

Fatura no(Ficheno) :11111 metrajı:1000 fiyatı: 1 
Fatura no(Ficheno) :11111 metrajı:1000 fiyatı: 2 
Fatura no(Ficheno) :11111 metrajı:1000 fiyatı: 3  

aktarma yapmak istediğim veri tabanında (VT2)

Fatura no(Ficheno) :11111 metrajı:1000 fiyatı: 1 
Fatura no(Ficheno) :11111 metrajı:1000 fiyatı: 2 
Fatura no(Ficheno) :11111 metrajı:1000 fiyatı: 3
Fatura no(Ficheno) :11111 metrajı:1000 fiyatı: 4   olan kayıtlar mevcut.

aktarma yaptığımda olması gerektiği şekliyle sadece 4 nolu kayıt aktarılıyor. Burada sorun yok.

Fakat; anlamadığım bir şekilde aynı işlem son fatura için gerçekleşmiyor.
Bu sorunlu olan işlemde;


ana veritabanında (sistemtakip)

Fatura no(Ficheno) :VKT2018000004806 metrajı:2000 fiyatı: 0,05

aktarma yapmak istediğim veri tabanında (VT2)

Fatura no(Ficheno) :VKT2018000004806 metrajı:2000 fiyatı: 0,02
Fatura no(Ficheno) :VKT2018000004806 metrajı:2000 fiyatı: 0,04
Fatura no(Ficheno) :VKT2018000004806 metrajı:2000 fiyatı: 0,05

Kayıtlar bulunmakta. Normalde aktar dediğimde bu kayıtlardan 2. ve 3. sünü aktarması lazım fakat nedense bu gerçekleşmiyor.

Bu aksaklığın önüne geçebilmem için yardımcı olabilir misiniz?
ilgilniz için şimdiden teşekkürler.
26/07/2018, 09:57

ozanakkaya

Merhaba, koddaki ilgili yeri aşağıdaki ile değiştirerek deneyiniz

strSql = "SELECT t_faturalar.fat_no, [fat_no] & ""-"" & [fat_adetmt] & ""-"" & replace([fat_fiyat],"","",""-"") AS kriter, * FROM t_faturalar WHERE ((([fat_no] & ""-"" & clng([fat_adetmt]) & ""-"" & replace([fat_fiyat],"","",""-""))= '" & Kayit_AlinacakTablo.Fields("FicheNo") & "-" & CLng(Kayit_AlinacakTablo.Fields("Amount")) & "-" & Replace(Kayit_AlinacakTablo.Fields("Price"), ",", "-") & "'));"
26/07/2018, 13:19

mehmetb84

Geçersiz boş kullanımı uyarısıyla Runtime error verdi.
26/07/2018, 13:38

mehmetb84

Sanırım sorunun kaynağını buldum. Fiyat alanındaki hassasiyetten kaynaklanıyor. Örneğin tam sayının altında olan fiyatların ( 0,1 TL , 0,2TL, 0,3TL gibi) arasındaki farkı algılamıyor hepsini aynı görüyor. Sanırım sizin gönderdiğiniz kod da bu sorunu çözmeyi amaçlıyor.
26/07/2018, 19:53

ozanakkaya

Örneğinizi hata verdiği haliyle tekrar ekleyiniz.
27/07/2018, 13:23

mehmetb84

Hata uyarısı gerçek verilerin olduğu veritabanımdaki boş alanlardan kaynaklanıyormuş. Onları düzeltince çözüldü. Çok teşekkür ederim.