2 FDB

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Vital
Üye
Mesajlar: 280
Kayıt: 01 Oca 2008 08:50

2 FDB

Mesaj gönderen Vital »

Merhaba arkadaslar ;

d7 fb 2.1
soyle bi sorunum 2 tane fdb var 2 si aynı fdb fakat eski olan fdb deki sabit tablosunu yeni olan fdb ye tasımak istiyorum tabi yeni fdb de de sabit tablosu var yani eskideki sabitleri yeni fdb deki sabitler tablosu ile degistirmek istiyorum.ibpumb vs isimi gorurmu veya tavsiyeleriniz nedir?

kısacası 2 fdb yi harmanlamak istiyorum kucuk bir modul yazmayi dusundum ama 2 fdb ye nasil baglanti kuracam.ibx bilesenleri kullaniyorum.
tskler.
Garibanus
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: 2 FDB

Mesaj gönderen aslangeri »

s.a.
eğer sürekli yapılacak bir işlem ise program yazılabilir. forma ikitane ibdatabase bileşeni koyarak bağlantılarını ayarlayabilirsin.
eğer sürekli yapılmayacak ise ibexpert ile tablonun scriptini (insert/update) çıkartıp diğer database deki tabloya uygularsınız.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Vital
Üye
Mesajlar: 280
Kayıt: 01 Oca 2008 08:50

Re: 2 FDB

Mesaj gönderen Vital »

yok hocam 1 defalık bir islem anlattugınız gibi yapmaya calistim ama galiba beceremedim
soyle yaptim;
1-eski db nin ibexpertten(export data into script) yaptim (sadece insert komutu vardi update yoktu scriptte) script kodlarını kopyaladım sonra yeni fdb yi ibexpertte actim ve tools menusunden script execute yi acarak oraya yapistirip calistirdim ama eskideki kayitlar yeniye gelmedi?????



ve konu acilmisken iki ibdatabase ile 2 ayri fdb ye baglandik diyelim bunlar arasindaki islemler nasil olacak yani 1. fdb ile 2.fdb iliskilendirilebilirmi?

tskler.
Garibanus
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: 2 FDB

Mesaj gönderen aslangeri »

1.scripti çalıştırdığınız zaman 2.fdb de zaten var olan kayıtlar yüzünde hata vermiş ve commit işlemini gerçekleştirmemiş olabilir.
manuel commiti deneyin. vede scriptin başına

Kod: Tümünü seç

 delete from tabloadi
yazıp deneyin.
2.ilişkiyi fdb düzeyinde değilde ibtable/ibdataset düzeyinde yapabilirsiniz.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: 2 FDB

Mesaj gönderen unicorn64 »

aslangeri yazdı:

Kod: Tümünü seç

 delete from tabloadi
@aslangeri hocam arkadaş harmanlamak demiş yani benim anladığım kadarıyla sql serverdaki replication şeklinde,
iki tablonun birleşimini oluşturmak istemiş. yeni fdb deki kayıtlar silinmeden eski fdb dekiler eklencek yani...
ama nasıl olcak onu bilmiom işte :?
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
mehmetcan
Üye
Mesajlar: 63
Kayıt: 14 Tem 2008 05:19

Re: 2 FDB

Mesaj gönderen mehmetcan »

Aşagıdaki procedure işini görür.
Bir forma gerekli componentları yerleştirip, aşagıdaki procedure çalıştırabilirsin.

totable,todata,totrans : üzerine yazılacak tablo kısmı
formtable,fromdata,fromtrans: kopyası yapılacak tablo

Kod: Tümünü seç

.................
    todata: TIBDatabase;
    fromdata: TIBDatabase;
    toTable: TIBTable;
    fromtable: TIBTable;
    toTrans: TIBTransaction;
    fromtrans: TIBTransaction;

    fld : TField;
    s1 : string;
    i  : integer;
........
  ToData.Connected:=false;
   FromData.Connected:=false;
   // s1 tablonun isimi  
    ToTable.TableName:=s1;
    FromTable.TableName:=s1;

    FromData.Connected:=True;
    ToData.Connected:=True;
    ToTable.Active:=True;
    FromTable.Active:=True;

    FromTable.First; 
    while not FromTable.EOF do
    begin
      ToTable.Insert;
      for i := 0 to FromTable.Fields.Count - 1 do
      begin
        fld:=ToTable.FindField(FromTable.Fields[i].FieldName);
        if assigned(fld) then
           Fld.Assign(fromtable.Fields[i]);
      end;
      ToTable.Post;
      FromTable.Next;
    end;

    ToData.ApplyUpdates([totable]);
    ToData.Connected:=False;
    FromData.Connected:=false;
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: 2 FDB

Mesaj gönderen aslangeri »

soruyu soran arkadaş yazdı:...eskideki sabitleri yeni fdb deki sabitler tablosu ile degistirmek istiyorum....
@unicorn64; yukardaki sebepten delete in sorun olacağını zannetmiyorum.
kaldıki delete son çözüm. ondan önce manuel commit seçeneği var. varolan kayıtları update etmesi içinde scripti oluşturuken update olarak seçip var olan kayıtlarıda bu şekilde güncelleyebilir.
@mehmetcan; senin kod ilede todata dataki eski kayıtların önce silinmesi lazım. veya kayıt varmı yokmu varsa update yoksa insert yapılması lazım. ancak arkadaşın kafasındaki iki fdb sorusu için güzel bir örnek.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Vital
Üye
Mesajlar: 280
Kayıt: 01 Oca 2008 08:50

Re: 2 FDB

Mesaj gönderen Vital »

ustalar ilginiz icin tskler.sorunu soylediginiz sekilde soyle cozdum.
aslinda eski.fdb ile yeni.fdb nin içerigi aynı
fakat yeni fdb de bir kayit silinmis ve bu kaydin iliskili oldugu tablolar vardi dolayisiyla o alanlarda bu bilgiler gozukmuyordu(bu satir birden fazla ve karmasik kayitlarla iliskili oldugu icin o satiri yeniden olusturmak fayda etmedi zaten ona verilen id(autoinc) bir daha alamayacagi icin..).

eski dbnin(insert ve updatesini )aldim yeni db ye uyguladim.eksik olan satir yerine geldi.umarim bir yanlis yoktur.

ve aslangeri hocam
2 fdb arasindaki iliski ;"2.ilişkiyi fdb düzeyinde değilde ibtable/ibdataset düzeyinde yapabilirsiniz."bunu yapabilirmiyiz 1.fdb deki bir kaydi 2.fdb ye atmayi ?

tskler.
Garibanus
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: 2 FDB

Mesaj gönderen aslangeri »

s.a.
bir fdb deki kaydı diğer fdb ye atmak demek o iki fdb arasında bir ilişki kurmak demek değildir.sadece bir tablodaki kaydın başka bir tabloya insert edilmesi. (belki buda bir nevi ilişki sayılır ama benim bahsettiğim ilişki bu ilişki değil.)

benim bahsettiğim ilişki master detail tarzında bir ilişki. bir ibdatasetin master sourcesini başka bir fdb ye bakan datasource seçebilirsiniz demek istoyrdum.

sanırım biraz karışık bir konu oldu.
@mehmetcan ın örneğini bir incele. orda zaten bir fdb deki kaydı başka bir fdb ye alıyor.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
mehmetcan
Üye
Mesajlar: 63
Kayıt: 14 Tem 2008 05:19

Re: 2 FDB

Mesaj gönderen mehmetcan »

Benim örnek boş bir tabloya diger veritabanındaki dolu tabloyu aktarmak için yapılmıştı.

Eger istedigin varolan kayıtları bozmamaksa, örnegi şu şekilde degiştirebilirsin.

Kod: Tümünü seç


 while not FromTable.EOF do
    begin
      ToTable.Insert;
      for i := 0 to FromTable.Fields.Count - 1 do
      begin
Kısmını şu şekilde yaz

Kod: Tümünü seç

while not FromTable.EOF do
begin
   if ToTable.Locate(FromTable.Fields[0].FieldName,FromTable.Fields[0].Asstring,[]) then
        ToTable.Edit
   else 
        ToTable.Insert;
   for i := 0 to FromTable.Fields.Count - 1 do
    begin
Cevapla