S.a arkadaşlar
Fb dekı kayıtları oracle a aktarıyorum.takıldıgım yer ıse Fb dekı kayıt oracle a yok ıse kaydı o zaman gırecek. kayıt zaten oracle da var ıse gırmeyecek. karsılastırma olarak asagıdakı gıbı bı yapı kurdum ancak kayıt sayısı fazla olan tablolar cok uzun suruyor.
Query1.First;
while not Query1.Eof do// Fb dekı kayır ıcın
begin
ZQuery1.First;
while not ZQuery1.Eof do // oracle dakı kayıtlar ıcın
begin
Application.ProcessMessages;
if trim(Query1.FieldByName('ID').AsString)=trim(ZQuery1.fieldbyname('ID').AsString) then
begin
.
.
.
Forumda kayıt karsılastırma- arama (Locate) olarak arama yaptım ancak ıstedıgım sonucu alamadım.. baska nasıl halledebılırım?
Bilmemek ayıp değil öğrenmek isteyene öğretmemek ayıp:)
Eğer ID alanı tekrarsız bir alan ise ki öyledir işte sana kolay yöntem....
-İlk önce oracle daki en büyük ID değerini bul select Max(ID) From Tablo
-Sonra MaxID gibi bir değişkene bu değeri ata...
-Sonra firbird deki tablonda şu sorguyu çalışıtır.Select * From Tablo where ID>MaxID
-Böylece firebird tablosunda oracle da olmayanlar gelir...Artık tek bir While döngüsü ile kayıtları insert edersin....Hız farkında farkedilir hani
Query1.First;
while not Query1.Eof do // Fb dekı kayır ıcın
begin
ZQuery1.First;
while not ZQuery1.Eof do // oracle dakı kayır ıcın
begin
if trim(Query1.FieldByName('ID').AsString)=trim(ZQuery1.fieldbyname('ID').AsString) then
begin
FieldCTRL:=1;
break;// aynı kayıt varsa break
end
else
begin
FieldCTRL:=0;//kayıt yoksa 0
end;
Application.ProcessMessages;
ZQuery1.Next;
end;//while not ZQuery1.Eof do
if FieldCTRL=0 then // kayıt yoksa
begin
.
. //kayıt ekleme ıslemlerı
.
Kayıt sayısı fazla olan tablolarda ılk baslarda arama ıslemı cok hızlı gıdıyor ancak Fb dekı yaklasık 10.000 kayıtı gectıkten sonra baya bı yavaslama oluyor
Bilmemek ayıp değil öğrenmek isteyene öğretmemek ayıp:)
ID alanı tekrarlı olmasının sebebi nedir acep...Database yapısını sen kurduysan bi hata var bu işte. Her tabloda bir tane Unique alan olmalıdır.ID unique değilse unique olan kayıt varsa ona göre yap işlemi yoksa Tablo yapını değiştir....
Diğer bir çözüm de FireBird tablosundaki her kaydı Oracle tablosuna "try except end" bloğu içinde atmaya çalışmak ve hata olursa zaten kayıt vardır diye hata mesajı verdirmeden devam etmek.
Battosai yazdı:ID alanı tekrarlı olmasının sebebi nedir acep...Database yapısını sen kurduysan bi hata var bu işte. Her tabloda bir tane Unique alan olmalıdır.ID unique değilse unique olan kayıt varsa ona göre yap işlemi yoksa Tablo yapını değiştir....
Hocam Tablo cok eskıden olusturulmus bı tablo ıcınde bı suru kayıt var.benım yapmak ıstedıgım ıse Fb dekı aynı tablonun ıcındekı kayıtları oracle dakı tabloya kontrol ederek (kayıt varmı yokmu) atmak. bıraz karısık bı durum
Bilmemek ayıp değil öğrenmek isteyene öğretmemek ayıp:)
Query1.First;
while not Query1.Eof do // Fb dekı kayır ıcın
begin
ZQuery1.Sql.Text:='Select ID from ....... where ID='+Trim(Query1.Fieldbyname('ID').Asstring);
ZQuery1.Open;
if ZQuery1.RecordCount=0 then// kayıt yok ıse
begin
//Fb dekı kayıtın Oracle a ıslenmesı..
end;// if ZQuery1.RecordCount=0 then
Query1.Next;
end://while not Query1.Eof do
Bilmemek ayıp değil öğrenmek isteyene öğretmemek ayıp:)