IBdataset.transaction commit mi? transaction.commit mi?

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

Re: IBdataset.transaction commit mi? transaction.commit mi?

Mesaj gönderen musti »

Sorun şu iki farklı görüş var ve ben HBV nin haklı çıkmasını isterim sebebi ise malum lock olayı canı sıkıcı bir olay eğer bu sorun kesin çözümse FIBPlus alınır. baktım sitesine 390 $ civarında imiş aslında biraz pahalı ama ne yapalım lock da can sıkıcı oluyor bazen.
Ama geliştirilmeyecek bir fıblus ise o zaman daha büyük bir sorun olur.
Sizden ricam bunu kesinleştirelim ortak akıl ve tecrubelerinizle netleştirelim bu konuyu.

teşekkür ederim.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: IBdataset.transaction commit mi? transaction.commit mi?

Mesaj gönderen freeman35 »

öncelikle netleşmesi gereken konu şu "haklı çıkma" sakın ha biz burda ben daha çok şey biliyorum sen bilmiyorsun haklı haksız konusu değil.Biz burda bilgi paylaşıyoruz, bu forumu kurma amacımız biz ilk başladığımızda bir kelime dahi öğrenmek için neler çektik,sizler çekmeyin en kısa sürede herkez bildiklerini birbiriyle paylaşsınki bir güç olalım.
Ben herşeyi bilemem, belki sizden bildiklerimin adedi fazla olabilir, 25 senedir program yazmamdan kaynaklıdır buda.eh bırakın bunca yıldada biraz tercübe kazanmış olayım.ama bu demek değildir herşeyi biliyorum,aklıma ilk gelen webden hiç anlamam, bugün ms acess a adoyla bağlanayım dedim sinir etti vs vs
deadlock tasarım hatasıdır. yaptım oldu mantığıyla yazılım yapmak günü kurtarmaktan öteye geçmez,çalışmazmı çalışır.sadece sonuca bakarım diyorsanız doğrudur.
Bu mantıkta yani sadece autocommit için para vermeyin elin gavuruna, IBX kullanın fazladan sadece bir component eklersiniz(UpdateSQL) fib+ da bu component a dahil gelir,Editör ile görsel ve kolaylık sağlanır.Autocommit içinde query yada table ne kullanacaksanız afterpost eventine commit yazın aynı işi görür.
Muhtemelen bilmiyorsunuzdur "pFIBPropEd.inc" içinde {$DEFINE USE_SYN_EDIT} directive ini açarsanız SYN_EDIT in özelliklerinide kullanabilirsiniz.Ama bunun için syn_Edit i de kurmanız gerek, ve eğer fib+ 6.9.9 u kullanmıyorsanız, ve component ı build etmeyip bpl leri kurduysanız sorun yaşamayabilirsiniz ama build ederseniz Property editörün bir bug ı var, field ve procdure isimlerinde uzun olanları kesiyordu.
hiç sorun yaşamamak istiyorsan 3.party kullanma, devex de batabilir fib+ da yada kullandığın diğerleri.Hatta codegear da batabilir. yada Delphi bitti diyebilirler,kylix gibi.

Ezbere iş yapmayın dememdeki gaye laf çarpmak vs değil,hayatım boyunca karşılaşma ihtimalim bile olmayan birinle neden inatlaşayım ki? Ben tecrübemi yazıyorum, isteyen dikkate alır kullanır ismeyen kulak ardı eder geçer.Yeni başlayanlara herzaman söylüyorum söylemeyede devam edeceğim,oturun component ları kurcalayın,neresinde ne oluyor componentları elle kurun tek tek çalışmadığında foruma bakın internete bakın translate.google.com saçma sapanda olsa tercüme edebiliyorsunuz.Öğrenme eğiliminiz olduğu sürece fib+ mış bilmem neymiş sorunları aşarsınız.
Basit örnek Delphi 2010 unicode kullandığından compiler bazı standartlar değişti

Kod: Tümünü seç

{$IFDEF VER210}
  WinExec(PAnsiChar(UpgraderFileName + ' ' + EXEName + ' +' + ParamStr), SW_SHOWNORMAL);
{$ELSE}
  WinExec(PChar(UpgraderFileName + ' ' + EXEName + ' +' + ParamStr), SW_SHOWNORMAL);
{$ENDIF}
programınız Delphi 2010 da artık çalışabilir. Nasılmı yaptım?açtım bir component ın içini kodları inceledim VER210 2010 için tanımlanmış bir direktif, PChar ve PAnsiChar arasındaki farkı helpten ve internetten okudum ve sorunumu hallettim, Delphi 2011 çıkarsa eğerki gene köklü bir değişiklik olursa öncelikle 2011 e hemen geçmem, Parasını ödediğim şirketler zaten destekleyeceklerdir, kendi yazdıklarım ve opensource olanlarıda yukarıda yazdığım şekilde hallederim.
Umarım konuyu artık kişiselleştirmek yerine anlamaya çalışırsınız, Amaç sadece öğretmek ve öğrenmek
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Kullanıcı avatarı
HBV
Üye
Mesajlar: 114
Kayıt: 30 Haz 2005 09:28

Re: IBdataset.transaction commit mi? transaction.commit mi?

Mesaj gönderen HBV »

Autocommit içinde query yada table ne kullanacaksanız afterpost eventine commit yazın aynı işi görür.
Verdiğiniz bilgiler için teşekkürler sayın admin..bende başka bir alıntı ekleyeyim net'de var,ve hatta bunun gibi çok örnekler var;
IBDataset1:Benim asıl datasetim.Kayıtları falan onunla yapıyorum.
QueryLock:Edit edilen kaydı kilitlemek için kullanacağım datasetin adı.
IBDataset1.Edit;//Kaydı edit ediyoruz.
{Burada mutlaka her tablonuzda bir primarykeyiniz vardır.İşte bu alanın değerine göre o kaydı kilitleme kodumuz geliyor
Benim burada primary key alanım MUSTERIKODU adlı field}
QueryLock.SelectSQL.Clear;
QueryLock.SelectSQL.Add('select * from MUSTERI where MUSTERIKODU=:PARAM with lock');
QueryLock.ParamByName('PARAM').Value := IBDataset1MUSTERIKODU.Value;
try
QueryLock.Open; {Edit Edilen Kaydı Kilitle.Dikkat.Bu kilitin delphiyle alakası yok.Direk veritabanındaki bu kaydı kitliyor.}
except
on E: Exception do
begin
if Pos('deadlock', e.Message) <> 0 then {Yani oluşan hata kilitli kayda ulaşamama hatası ise}
begin
Application.MessageBox('Bu Kayıt Şu Anda Ağdaki Başka Bir Kullanıcı Tarafından Kullanılmakta.Bir Süre Sonra Tekrar Deneyiniz.', 'Hata', MB_ICONWARNING);
IBDataset1.Cancel;
IBTransaction1.RollbackRetaining;{Bu Transaction IBDatasetin bağlı olduğu transaction}
end; //if sonu
end;
end; //try sonu
...gibi... gördüğünüz gibi hep aynı hata mesajları ile yine klasik değişik bir yöntemli Çift DataSet örneği....ama sonuç.??????.. yorum sizin...ayrıca ben deneme çalışmalarıma FıbPlus ile devam ediyorum,yukardaki gibi değişik yöntemlerle artık uğraşmıyorum ve 2 aydır artık son aşamayada geldim vaktimde çok az, daha öncede dediğim gibi 40 kullanıclı bir programın gidişatı gerçekten mükemmel . ilginiz için tekrar tekrar teşekkürler.
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

Re: IBdataset.transaction commit mi? transaction.commit mi?

Mesaj gönderen musti »

hocam biz sizlerden çok şey öğrendik.
burda haklı cıkması konusu sorunumuzun çözümü ile alakalı idi.
Şöyle netleştireyim iki arkadaşınız var biri rengin kaçmış hasta görünüyorsun diyor diğeri görünmüyorsun diyor. bende elimde ayna yok eminde olamıyorum ve diyorumki umarım iyi görünüyorsun diyen arkadaşım haklıdır.
yoksa asla sen iyi bilir o kötü bilir gibi bir yaklaşımım asla olmaz alamazda.

teşekkür ederim.
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: IBdataset.transaction commit mi? transaction.commit mi?

Mesaj gönderen emin_as »

Dead lock durumu sadece iki transaction ın bir tablodaki aynı kayıdı değiştirirken meydana gelir. Deadlock ı engellemenin basit yolları vardır. Transactionların kısa tutulması önemlidir ve en önemlisi transaction daki özelliklerde wait değil no wait kullanılmalıdır. No wait kullanılınca transaction böylesi bir durumla karşılaşınca, hemen hata mesajı döndürecektir, wait durumunda ise beklemeye başlayacak ve transactionlar birbirini kitleyecektir.

Çift transaction ise genelde tavsiye edilmektedir. Sadece fibplusda değil, ibdac ( http://www.devart.com/ibdac/ ) da çift transaction ı kullanmaktadır. Transactionlardan biri readcomitted / readonly olarak kullanılırken, diğeri readcomitted olarak ayarlanmaktadır. Böylelikle firebird sunucusu fazlaca meşgul edilmemekte ve performansı artırmaktadır. Çift transaction deadlockdan çok performans artıcı bir yöntemdir.
Kullanıcı avatarı
HBV
Üye
Mesajlar: 114
Kayıt: 30 Haz 2005 09:28

Re: IBdataset.transaction commit mi? transaction.commit mi?

Mesaj gönderen HBV »

Çift transaction ise genelde tavsiye edilmektedir. Sadece fibplusda değil, ibdac ( http://www.devart.com/ibdac/ ) da çift transaction ı kullanmaktadır. Transactionlardan biri readcomitted / readonly olarak kullanılırken, diğeri readcomitted olarak ayarlanmaktadır. Böylelikle firebird sunucusu fazlaca meşgul edilmemekte ve performansı artırmaktadır. Çift transaction deadlockdan çok performans artıcı bir yöntemdir.
Arkadaşımızında dediği gibi bu performansı ben yaşıyorum,IBObject,FIBplus ve arkadaşımızın dediği gibi IBDac Bileşenleri denemeye değer FIBPlus(IBObject'ide denedim onda çift transaction kullanmadan AutoCommit oluyor.) bileşenleri için ekstradan hiç bir şey yapmıyorsunuz bağlantıları yapıb yeni bir field ekleseniz bile sadece Dataset'in "Fieldeditör"'ünden fieldleri listeleyip çalışmaya devam ediyorsunuz ;
write // "deadlock"'a darbe burada vuruluyor.
isc_tpb_nowait
rec_version
read_committed
..bu prosedürü FIBTransaction otomatik oluşturuyor..
"autoCommit" olayıda arka planda tıkır tıkır işliyor ve yok wait'di Yok nowait'di "Lock" "deadlock" vs.. yi unutuyorsunuz,programcıya kalan artık kod yazma maharetiyle diğer işlemler için hünerlerini göstermek,,, kolay gelsin.
En son HBV tarafından 24 Şub 2010 10:01 tarihinde düzenlendi, toplamda 3 kere düzenlendi.
Kullanıcı avatarı
HBV
Üye
Mesajlar: 114
Kayıt: 30 Haz 2005 09:28

Re: IBdataset.transaction commit mi? transaction.commit mi?

Mesaj gönderen HBV »

...ayrıca arkadaşımın dediği gibi haklı çıkma gibi bir sorunum yok sayın adminden bir şeylerde öğrenmiş olduk herkesin fikrine saygım var ama ben denemelerimle ilgili bu konuya sadece ekleme yaptım "Deadlock'a" son noktayı koydum o kadar,amaç arkadaşlarımızı fikir sahibi yapmak.
Cevapla