IBTransaction Niye Commit Yapmaz....

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
stnonstop
Üye
Mesajlar: 149
Kayıt: 22 Haz 2005 04:34

IBTransaction Niye Commit Yapmaz....

Mesaj gönderen stnonstop »

Benim şöyle bir sorunum var. Aşağıdaki kod yardımıyla insert update gibi sql komutlarını (DB ye yazan) çalıştırıyorum. Programım içinde sorun yok değişiklikleri bir güzel görüntüleye biliyorum. Ama sanırsam sadece Tmp de değişiklikleri yapıp fiziksel olarak veri tabanına yazmıyor. Tabiki bunun sonucu olarak farklı bir programla yada aynı program başka pcden çalıştırıldığında veri değişikliklerini göremiyor.

Kod: Tümünü seç

void __fastcall TDM::QueryExecSetup(TIBQuery *Query, TIBTransaction *Transaction, AnsiString SQL)
{
  Query->Close();
  Query->SQL->Clear();
  Query->SQL->Add(SQL);
  Query->ExecSQL();
 // IBTransaction->CommitRetaining();
  IBTransaction->Commit();
  IBTransaction->Active = true;
}

IBTransaction->CommitRetaining() ve Commit() kodlarını denememe rağmen hatta DefaultAction= TACommit;

Bir türlü işin içinden çıkamadım bir yardım :(

Compenenti değiştirip Zeos a geçmeyi düşünüyorum ama kararsızım. Bu kadar kodu tekrar değiştirmem gerekecek diye korkuyorum...
St. NonStop
Aziz DURMAZ
Elektronik ve Haberleşme Mühendisi
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

IBTransaction i AutoStart tanımlamamışsan IBTransaction->Active = true; i Query->ExecSQL(); den önce de başlatman lazım. Ayrıca IBTransaction->Commit(); yerine IBTransaction->CommitRetaining(); i kullanmalısın :wink: Son durum şöyle olmalı;

Kod: Tümünü seç

void __fastcall TDM::QueryExecSetup(TIBQuery *Query, TIBTransaction *Transaction, AnsiString SQL)
{
  Query->Close();
  Query->SQL->Clear();
  Query->SQL->Add(SQL);
  IBTransaction->Active = true;
  Query->ExecSQL();
  IBTransaction->CommitRetaining();
  IBTransaction->Active = False;
  IBTransaction->Active = true;
}
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
stnonstop
Üye
Mesajlar: 149
Kayıt: 22 Haz 2005 04:34

Mesaj gönderen stnonstop »

Hocam elleriniz beyniniz hiç bir vucut organınız dert görmesin :) Allah Razı olsun...
St. NonStop
Aziz DURMAZ
Elektronik ve Haberleşme Mühendisi
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Cümlemizin, işin görüldüyse ne mutlu :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

Mesaj gönderen serkan »

kolay gelsin arkadaşlar...benimde bu konuya benzer bir problemim var yeni topic açmıyım dedim bu konu zaten çok dağılmış formda..

aşağıdaki kodlarla müşteri tablomu kayıt ediyorum..
(dataFRM.musteriler) =ibdataset

dataFRM.IBTransaction1.Active:=true;
dataFRM.musteriler.ApplyUpdates;
dataFRM.IBTransaction1.CommitRetaining;
dataFRM.musteriler.Close;
dataFRM.musteriler.Open;
dataFRM.musteriler.Append;

programın çalıştığı bilgisayarda problem yok listeleniyor yeni kayıt hatta ibexertle baktım ondada gözüküyorr.ama başka pc de programı açıp kapamadan kayıt görülmüyor..cached update kapalı..bide önemlimi bilmiyorum ama kayıtı datafrm.musteri ile yapıyorum..listelemeyi datafrm.musterilist ile...sizce nedirr bu durumm arkadaşlar..şimdiden teşekkür ederim..
Kullanıcı avatarı
mnt
Üye
Mesajlar: 57
Kayıt: 30 Eki 2005 12:58
Konum: Kocaeli

Mesaj gönderen mnt »

TIB_Events te eventi aldığında, datafrm.musterilist.RefreshAll;
Event nesnesini kullanmıyorsan manuel yaptırman lazım.
Mustafa
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

Mesaj gönderen serkan »

manuel derken nasıl oluyor hocam..Ibevent hiç kullanmadımm vakitte pek yok aslında...o yüzden sordum
Kullanıcı avatarı
mnt
Üye
Mesajlar: 57
Kayıt: 30 Eki 2005 12:58
Konum: Kocaeli

Mesaj gönderen mnt »

Database Serverı yapılan değişiklikleri kendisine bağlı olan terminallere eventler göndererek haber verebiliyor. Serverdan gelen event'ı alan bileşenin (TIB_Event vb.) OnAlertEvent event'i tetikleniyor. Eventin içeriğine bakarak ne yaptırmak istiyorsan yaptırıyorsun programına.(Refresh vb.) Çok temel bir konu olduğu için sanıyorum forum içinde bununla ilgili açıklamalar vardır.
Manual'dan kastım bir yenile(refresh) butonu kullanman. Veya belirli zaman aralıklarıyla table veya query i refresh ettirmen. Bu yöntemler bence iyi yöntemler değil.
Mustafa
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

Mesaj gönderen serkan »

sağolasın hocam,daha denemedim ama sen öyle diyosan öyledir..problem olursa yazarım tekrar..herkese kolay gelsin.
Cevapla