transaction ve commit
transaction ve commit
sevgli arkadaşlar forumdaki bütün commit, commitreatening ve transaction hakkındaki yazıları okudum..
şimdi sonuçta şunu anladım doğrumudur yoksa benim kafammı karıştı..
kayıt işleme, silme veya düzenleme işlemleri yaptıktan sonra, transactionu commitreatening veya commit ( ki bu zaten datayı kapatıyor) ne yaparsak yapalım; güncel verileri diğer makinelerin veya benim görebilmem için sonuçta mutlaka database yi kapatıp açmamız gerekiyor..
doğrumudur..
şimdi sonuçta şunu anladım doğrumudur yoksa benim kafammı karıştı..
kayıt işleme, silme veya düzenleme işlemleri yaptıktan sonra, transactionu commitreatening veya commit ( ki bu zaten datayı kapatıyor) ne yaparsak yapalım; güncel verileri diğer makinelerin veya benim görebilmem için sonuçta mutlaka database yi kapatıp açmamız gerekiyor..
doğrumudur..
- kadirkurtoglu
- Üye
- Mesajlar: 748
- Kayıt: 22 May 2005 01:20
- Konum: Uzakta Görünen Tepeden...
merhabalar
Transaction bileşeni bir nevi geçici hafıza görevi görür ve sen Dataset e her post komutu gönderdiğinde işlenen kayıt Transaction da tutulur taki sen Commit veya CommtiRetaining diyene kadar. bu komutları verdiğin anda Transactionda tutulan bilgiler Database aracılığı ile ilgili Tabloya yazılır veya yazılırlar. Commit dersen Transaction bileşeni ile olan bağlantı disconnect olur. StartTransaction komutu tekrar connect olunur. CommitRetaining ile de bağlantı devemlılığını korur.
diğer kullanıcıların senin yaptığın değişikliği görmesi için Commit veya CommitRetaining comutunu göndermen gerekiyor. bu işlemde senin ne zaman commit gönderdiğini ise vt tarafında bir trigger oluşturup post_event tanımlayarak halledersin. ilgili trigger e hangi tabloda hangi olay olduğunda tetiklenmesi gerektiğini yazarsınız..
Örnek Post Event
örnek kod da MUSTERI_YENIKAYIT isimli trigger tanımladık.
bir trigger tablonun 3 değişik halininde tetiklenir
1 - Insert = Yeni Kayıt
2 - Update = Kayıt Güncellendiğinde
3 - Delete = kayıt Silindiğinde
ve bu 3 değişik halin 2 farklı zamanı vardır
1 - Before = İşlemin Öncesi
2 - After = İşlem Sonrası
Transaction bileşeni bir nevi geçici hafıza görevi görür ve sen Dataset e her post komutu gönderdiğinde işlenen kayıt Transaction da tutulur taki sen Commit veya CommtiRetaining diyene kadar. bu komutları verdiğin anda Transactionda tutulan bilgiler Database aracılığı ile ilgili Tabloya yazılır veya yazılırlar. Commit dersen Transaction bileşeni ile olan bağlantı disconnect olur. StartTransaction komutu tekrar connect olunur. CommitRetaining ile de bağlantı devemlılığını korur.
diğer kullanıcıların senin yaptığın değişikliği görmesi için Commit veya CommitRetaining comutunu göndermen gerekiyor. bu işlemde senin ne zaman commit gönderdiğini ise vt tarafında bir trigger oluşturup post_event tanımlayarak halledersin. ilgili trigger e hangi tabloda hangi olay olduğunda tetiklenmesi gerektiğini yazarsınız..
Örnek Post Event
Kod: Tümünü seç
CREATE TRIGGER MUSTERI_YENIKAYIT FOR MUSTERI
ACTIVE AFTER INSERT POSITION 0
AS
begin
post_event'Musteri_Yeni_Kayit';
end
bir trigger tablonun 3 değişik halininde tetiklenir
1 - Insert = Yeni Kayıt
2 - Update = Kayıt Güncellendiğinde
3 - Delete = kayıt Silindiğinde
ve bu 3 değişik halin 2 farklı zamanı vardır
1 - Before = İşlemin Öncesi
2 - After = İşlem Sonrası
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.
Mevlana
OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
ışığında hiç bir şey kaybetmez.
Mevlana
OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
sevgili kadir açıklamaların için teşekkürler..
söylemek istediğim özetle şu..
commitretaining yaptığımda verileri data üzerinde göremiyorum.. değişiklikleri görebilmem için commitretaining den sonradatabaseyi açıp kapatmam gerekiyor..
yani kısacası; ya commit yapıcam ki database otomatik kapanacak;
yada ben commitretaininin yaptıktan sonra database yi kapatıp sonra açıcam..
benin anladığım bu.. doğrumudur ..
söylemek istediğim özetle şu..
commitretaining yaptığımda verileri data üzerinde göremiyorum.. değişiklikleri görebilmem için commitretaining den sonradatabaseyi açıp kapatmam gerekiyor..
yani kısacası; ya commit yapıcam ki database otomatik kapanacak;
yada ben commitretaininin yaptıktan sonra database yi kapatıp sonra açıcam..
benin anladığım bu.. doğrumudur ..
- kadirkurtoglu
- Üye
- Mesajlar: 748
- Kayıt: 22 May 2005 01:20
- Konum: Uzakta Görünen Tepeden...
işlemi yapan kullanıcı değişikliği görür ancak aynı tabloya farklı Database bilşeniyle bağlanıldığında diğer Database yapılan değişiklikleri göremez. ben kısa yoldan commit yapıp datayı yorma bir tigger tanımla ilgili işlem sonucu EventAlert bileşeni ile yakala ve kullanıcılara bildir. yapılan değişikliği görmek yada görmemek kullanıcılara bırakılsın demek istiyorum..
Saygılar...
Saygılar...
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.
Mevlana
OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
ışığında hiç bir şey kaybetmez.
Mevlana
OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
bak şöyle bir örnekle açıklamaya çalışayım..
diğer makinelerdeki kullanıcıları bir kenara bırakalım..
bir stok kartları tablosu var diyelim... burda kayıtlı skotlar var...
daha sonra yeni bir kart tanımladım, ekledim ve sonra transactionu commitretaining olarak yaptım...
şimdi tanımlama formunu kapattıktan sonra stok kartları arasında bu yeni tanımladığım stok kodunu aradığımda yok görünüyor.. ama database yi açıp kapattıktan sonra görünüyor..
bilmem anlatabildimmi.. yani bu yeni tanımladığım ve commitretaining yaptığım yeni kaydı databaseyi açıp kapamadan göremezmiyim..
diğer makinelerdeki kullanıcıları bir kenara bırakalım..
bir stok kartları tablosu var diyelim... burda kayıtlı skotlar var...
daha sonra yeni bir kart tanımladım, ekledim ve sonra transactionu commitretaining olarak yaptım...
şimdi tanımlama formunu kapattıktan sonra stok kartları arasında bu yeni tanımladığım stok kodunu aradığımda yok görünüyor.. ama database yi açıp kapattıktan sonra görünüyor..
bilmem anlatabildimmi.. yani bu yeni tanımladığım ve commitretaining yaptığım yeni kaydı databaseyi açıp kapamadan göremezmiyim..
- kadirkurtoglu
- Üye
- Mesajlar: 748
- Kayıt: 22 May 2005 01:20
- Konum: Uzakta Görünen Tepeden...
merhabalar bende aynı işlemi yapıyorum ve stok kartındaki değişikliği Dataseti close open yapmadan görüyorum. nasıl mı?
1 - Tablo Stok
2 - Tablo StokArama
bu iki tabloyu da aynı Database bileşenine bağlıyorum. 2.Dataset StokArama zaten üzerinde işlem yapılan bir Dataset değil sadece kayıt arama işleminde kullandığım için aynı Database bilşenine bağladığın zaman her hangi bir problem olmaz...
1 - Tablo Stok
2 - Tablo StokArama
bu iki tabloyu da aynı Database bileşenine bağlıyorum. 2.Dataset StokArama zaten üzerinde işlem yapılan bir Dataset değil sadece kayıt arama işleminde kullandığım için aynı Database bilşenine bağladığın zaman her hangi bir problem olmaz...
Bir mum, yanındaki mumları tutuşturmakla,
ışığında hiç bir şey kaybetmez.
Mevlana
OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
ışığında hiç bir şey kaybetmez.
Mevlana
OS win.10, IDE Delphi 10.3, RDBMS Firebird and MSSQL, BROWSER Chrome
bende sorun oluyor.. yani görünmüyor..
şöyle örnek üzerinde açıklayım
bir adet skartlar tablom var...
şimdi bu kartlardaki bilgileri görmek için..
select * from skartlar order by stokno ile örnek aşağıdaki sonucu aldım diyelim..
stokno adı fiyatı
-------- ---- -------
10 adı1 150
20 adi2 160
gibi...
daha sonra
insert into skartlar (stokno, adi, fiyati) values ( '15','adi3',185) diye bir kapıt ekledim ve commitretaining yaptım...
her iki query de aynı database ye bağlı..
bu kaydı ekledikten sonra; tekrar
select * from skartlar order by stokno
dediğimde son eklediğim kaydı göstermiyor.. ama database yi açıp kapattıktan sonra son eklediğim kaydıda gösteriyor..
şöyle örnek üzerinde açıklayım
bir adet skartlar tablom var...
şimdi bu kartlardaki bilgileri görmek için..
select * from skartlar order by stokno ile örnek aşağıdaki sonucu aldım diyelim..
stokno adı fiyatı
-------- ---- -------
10 adı1 150
20 adi2 160
gibi...
daha sonra
insert into skartlar (stokno, adi, fiyati) values ( '15','adi3',185) diye bir kapıt ekledim ve commitretaining yaptım...
her iki query de aynı database ye bağlı..
bu kaydı ekledikten sonra; tekrar
select * from skartlar order by stokno
dediğimde son eklediğim kaydı göstermiyor.. ama database yi açıp kapattıktan sonra son eklediğim kaydıda gösteriyor..
http://www.konat.net/event.rar bu örnekte ben exeyi 2 kere çalıştırıyorum.
exelerin birinden bir kayıt girdiğim zaman diğerinde de hemen görünsün istiyorum.
ama commitretaining ile yapınca olmuyor.
illa ki vommit demek lazım.
aramalarım sonucu bu topici buldum. sorun aynı ama bende farklı query falan yok.
exelerin birinden bir kayıt girdiğim zaman diğerinde de hemen görünsün istiyorum.
ama commitretaining ile yapınca olmuyor.
illa ki vommit demek lazım.
aramalarım sonucu bu topici buldum. sorun aynı ama bende farklı query falan yok.
S.A
Senin programı açıp denedim button1 e basınca ikinci exe de güncelleme yapıyor.
Tabi ilk kayıt girdikten sonra bastığımda çalışmadı. çalışmama sebebide table append moddayken yani indicator yıldız(*) iken commitretaining çalışmıyor. ikinci basmamda çalıştı.
Ama kaydı girip bir üst kayde geçtikten sonra buttona basınca çalışıyor.
İnşallah Heybeni çakıl taşları ile doldurabiliyorsundur.
Senin programı açıp denedim button1 e basınca ikinci exe de güncelleme yapıyor.
Tabi ilk kayıt girdikten sonra bastığımda çalışmadı. çalışmama sebebide table append moddayken yani indicator yıldız(*) iken commitretaining çalışmıyor. ikinci basmamda çalıştı.
Ama kaydı girip bir üst kayde geçtikten sonra buttona basınca çalışıyor.
İnşallah Heybeni çakıl taşları ile doldurabiliyorsundur.

Allah allah, çok enteresan bi durum. Bende hiç öyle olmuyor.
Sizden bir ricam var. Aşağıdaki linkteki videoyu izlerseniz ızdırabımı anlarsınız.
http://www.konat.net/neden.rar
Sizden bir ricam var. Aşağıdaki linkteki videoyu izlerseniz ızdırabımı anlarsınız.
http://www.konat.net/neden.rar
- kadirkurtoglu
- Üye
- Mesajlar: 748
- Kayıt: 22 May 2005 01:20
- Konum: Uzakta Görünen Tepeden...
arkadaşım yanlış anlaşılma var. video yu izledim. event olayı kısaca
tabloya yapılan
Yeni kayıt Insert
Kayıt Güncelle Update
Kayıt sil Delete
durumlarından birini yakalamak maksatlıdır.
senin video daki kodlarda
şeklinde bir kod vardı.
burdaki kod bloğu
şeklinde olmalıdır.
peki bunu eventalerter olayında yakalamk için ise
1- EventAlerter.Registered := True;
2- İlgili Tablo Commit veya CommitRetaining yapılmalıdır.
tabloya yapılan
Yeni kayıt Insert
Kayıt Güncelle Update
Kayıt sil Delete
durumlarından birini yakalamak maksatlıdır.
senin video daki kodlarda
Kod: Tümünü seç
if eventname = 'yeni_kayıt' then
transaction.commitretaining;
burdaki kod bloğu
Kod: Tümünü seç
if eventname = 'Yeni_Kayıt' then
showmessage('A Tablosuna Yeni Bir Kayıt Girildi');
peki bunu eventalerter olayında yakalamk için ise
1- EventAlerter.Registered := True;
2- İlgili Tablo Commit veya CommitRetaining yapılmalıdır.