firebird neden commit yapmaz ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Okyanus
Üye
Mesajlar: 18
Kayıt: 04 Mar 2005 04:36
Konum: Almanya

firebird neden commit yapmaz ?

Mesaj gönderen Okyanus »

Selam,
D7 + Firebird 1.5 + IBX

Programda bir Firebird DB var, ve birden cok transaktion var,
Musteri karti icin bir IBDataSetMusteri ve TransactionMusteri kullaniyorum, burda kayit islemi yaptiriyorum, kayittta hersey normal ve eklenen musteri hemen musteri listesinde gozukuyor gridin icinde.

Bir baska query ve baska transactionla da sikayet girisi bolumunde musteri listesi olusturdum.Musteri tanitimi yaptigim yerde bir musteri kayit edince cikiyorum sikayet girisinde musteri sec diyorum ama o son eklenen musteri listeye gelmiyor ? Programi kapatip tekrar acinca yeni ekledigim musteri sikayet musteri secimine geliyor ?

Acaba musteri kayit yaparken Firebird hemen commit yapamiyor mu yada ben yanlis mi kodluyorum ?

Commit asagidaki gibi.

Kod: Tümünü seç


     DMMain.IBDSetKunden.Post;
  // bunlari ekledim kaldirdim yine olmadi  
  //   DMMain.IBDSetKunden.ApplyUpdates;
 //   DMMain.IBTransKunden.CommitRetaining;
    DMMain.IBTransKunden.Commit;
    if not DMMain.IBTransKunden.Active then                   

       DMMain.IBTransKunden.StartTransaction;
    if not DMMain.IBDSetKunden.Active
       then DMMain.IBDSetKunden.Active := True;


 

Kolay gelsin.
Okyanus
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

merhaba;

Kod: Tümünü seç

  DMMain.IBDSetKunden.Post;
  // bunlari ekledim kaldirdim yine olmadi 
  //   DMMain.IBDSetKunden.ApplyUpdates;
 //   DMMain.IBTransKunden.CommitRetaining;
    DMMain.IBTransKunden.Commit;
    if not DMMain.IBTransKunden.Active then                   

       DMMain.IBTransKunden.StartTransaction;
    if not DMMain.IBDSetKunden.Active
       then DMMain.IBDSetKunden.Active := True;
yukarıdaki yapı yerine;

Kod: Tümünü seç

  DMMain.IBDSetKunden.Post;
  DMMain.IBTransKunden.CommitRetaining;
  
kullanabilirsin.


Normalde commit yapıyorsun.Senin asıl sorunun gridteki bilgileri tazelemen.
Onu da ilgili Datasetin hangisi ise;

Kod: Tümünü seç

 Dataset.close;
 Dataset.open;
yapman gerekir.

iyi günler...
Kullanıcı avatarı
Okyanus
Üye
Mesajlar: 18
Kayıt: 04 Mar 2005 04:36
Konum: Almanya

Mesaj gönderen Okyanus »

Maalesef Dataset.Close, Dataset.Open yaptim yine olmadi, Refresh de denedim faydasiz.

yine ikinci Queryi son girilen kaydi görmüyor, Musteri Secim Listesi Querysi baska bir transactiona bagli oldugu icin sorun oluyor sanirim.

Tesekkurler.
Okyanus
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

merhaba;

Grid'e hangi dataset bağlıysa onu Close;Open yapsan yeterli...
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

Uğur1982 yazdı:merhaba;

Grid'e hangi dataset bağlıysa onu Close;Open yapsan yeterli...
bu işlem yeterli olmazsa ikinci transactionu da capatıp açman gerekebilir.

farklı transaction kullandığın için oluyor.
eğer iki queryde aynı transaction a bağlarsan sorunun çözülecektir. ancak analizini iyi yapman lazım.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
Okyanus
Üye
Mesajlar: 18
Kayıt: 04 Mar 2005 04:36
Konum: Almanya

Mesaj gönderen Okyanus »

Tesekkur ederim, ikinci transactionu kapatip acinca oldu.
Fakat ben her table ve form icin farkli transaction kullaniyorum. Degisklikleri Rollback yapabilmek icin. Eger tek transaction kullanirsam nasil Rollback yapabilirim birkac table da islem yapinca ?

Ya da bir transaction daki degisiklikleri tum hepsine uygulayacak refresh yapabilecegim bir yol var mi ?

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

Mesaj gönderen aslangeri »

Okyanus yazdı: Ya da bir transaction daki degisiklikleri tum hepsine uygulayacak refresh yapabilecegim bir yol var mi ?
iyi calismalar.
ibevents ile yapılabilir.

sitede ibevents ve post_event diye aratırsan bulabilirsin.

kolay gelsin.

////EDİT///
veya
farklı bir program çalıştırmayacağına göre global bir değişkeni set edersin daha sonra formarlın activinde yada showunda o değişkene göre transactinları close open yaprasın. yanlız transaction ların actif olup olmadıklarını kontrol etmen lazım.
tekrar kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla