Procedur ile eklenen kaydın çalışma anında görlülememesi

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
zalimsevki
Üye
Mesajlar: 38
Kayıt: 02 Ara 2005 07:36
Konum: Denizli

Procedur ile eklenen kaydın çalışma anında görlülememesi

Mesaj gönderen zalimsevki »

insert into TABLO_ADI (ALAN1, ALAN2)
values
(:DEGISKEN1, :DEGISKEN2);

şeklinde bi procedür ile SP ile TABLO_ADI tablosuna yeni kayıt yaptırıyorum .. Tabloyu açıp kapamama rağmen yeni eklenen kayıtları göremiyorum ..yeni kayıtları ancak database açılıp kapandıktan sonra görebiliyorum .. Database açıp kapamadan kayıtları görebilmenin bi yolu olması lazım .. yardımcı olursanız sevinirim ..
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

slm..
Sp çalıştırdığın nesne(ibstoredproc,ibquery vs..) ile close-open yaptığın dataset aynı transactiona bağlı olması lazım..
Değilse transactionları kapatıp açman gerekir...
Kullanıcı avatarı
Terminator
Üye
Mesajlar: 313
Kayıt: 13 Ara 2005 01:45
Konum: İzmir, ama Aydın Efesi!

Mesaj gönderen Terminator »

farklı transactionlar tarafından yapılmış ya da değiştirilmiş kayıtlar sadece commit[retaining] yapıldığında diğerleri tarafından görülebilir.
hatta görülmeyebilir de, eğer snopshot transaction açtıysan.
Firebird Foundation Member #208
http://www.firebirdsql.org
meron06
Üye
Mesajlar: 393
Kayıt: 15 Eki 2005 04:23

Mesaj gönderen meron06 »

forumda daha önce trigger larla ilgili bi makale vardı .burda tabloya yeni bi kayıt eklendiği ,editlendiği yada silindiği zaman bunları bi triggerla kullanıcılara yollayabilirsin ve bu olay gerçekleştiğinde queryi refresh yapınca görebilirsin.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

VT üzerinde yapılan kayıt işlemlerinden diğer kullanıcıların haberdar olabilmesi için yapılacak işlem ilgili tablo için oluşturacağın bir TRIGGER ile

Kod: Tümünü seç

CREATE TRIGGER TRI_TABLO1 FOR TABLO1
ACTIVE AFTER INSERT OR UPDATE OR DELETE POSITION 0
AS
BEGIN
  POST_EVENT 'TABLO1_DEGISTI';
END
ile VT tarafından tetikleyip, Delphi tarafından da bu yayınlanan event / olay ı IBEventAlert ile yakalamak ve yakalayınca yapmak istediklerini yapmak..

viewtopic.php?t=12515&highlight=postevent

Daha fazla bilgi için POST_EVENT anahtar kelimeleri ile :ara
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
Terminator
Üye
Mesajlar: 313
Kayıt: 13 Ara 2005 01:45
Konum: İzmir, ama Aydın Efesi!

Re: Procedur ile eklenen kaydın çalışma anında görlülememesi

Mesaj gönderen Terminator »

zalimsevki yazdı:insert into TABLO_ADI (ALAN1, ALAN2)
values
(:DEGISKEN1, :DEGISKEN2);

şeklinde bi procedür ile SP ile TABLO_ADI tablosuna yeni kayıt yaptırıyorum .. Tabloyu açıp kapamama rağmen yeni eklenen kayıtları göremiyorum ..yeni kayıtları ancak database açılıp kapandıktan sonra görebiliyorum .. Database açıp kapamadan kayıtları görebilmenin bi yolu olması lazım .. yardımcı olursanız sevinirim ..
Arkadaşlar,
zalimin sorunu yeni yapılan kayıt ihbarını almak değil.
dikkat ederseniz, diğer transactiondan dataseti kapatıp açtığı halde
yeni kayıtları göremiyor.
1. yapılan kayıt henüz commit edilmemiş olabilir.
2. kapatılıp açılan ve tazelenmesi beklenen datasetin transactionın izolasyon seviyesi snapshottur ve transaction kapatılıp açılmadan, kendisinden sonra yapılan hiçbir işlemi kesinlikle göremez. bu bir yalıtım modudur ve bazı operasyonlar için çok kritik gereklidir.
3.Eğer, kayıt yapan procedure ile tazelenen dataset aynı connection-transaction içinde ise, yeniliklerin gelmemesi imkansızdır.
4.Event kullanarak tazeleme uyarısı yapmak en doğrusudur. fakat
dikkat edilmesi gereken, event mesajının anında gönderilmediğidir.
sadece commitlenince gönderilir. ama user exceptionlar anında gider çünkü bir kesilme emridir. Ve ayrıca kaydı işleyenle mesajı bekleyenin
aynı transactionda olması çok gereksizdir. aynı transaction bir bütündür ve yapılan herşey son ana kadar ortaktır. sadece bufferlanmış eski- bayat datasetlere dikkat etmek gerekir, onlar kendi kendine başka bir noktadan yapılan değişikliği algılayamaz hiçbir sistemde.
vs vs...
Firebird Foundation Member #208
http://www.firebirdsql.org
Cevapla