firebird de primary key ve trigger beraber çalışmıyor...
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
firebird de primary key ve trigger beraber çalışmıyor...
merhbalar;
şöyle bir sorunum var
firebird maestro programında veri tabanı tasarımı yapıyorum ,
primary key olarak bir alanı tanımlıyorum ..
ve alana bir triggir yazdım (artan sayı için)...
her şey normal buraya kadar....
ama bilgi girmeye çalıştığımda (delphiden ya da maestrop programından)
bu alan boş geçilemez diye hata veriyor..
(triggerları defalarca denedim kontrol ettim doğru)..
eğer alanı primary key yapmazsam otomatik sayı düzgün çalışıyor..
sizce sorun ne olabilir..
ilgilenenlere tşkler...
şöyle bir sorunum var
firebird maestro programında veri tabanı tasarımı yapıyorum ,
primary key olarak bir alanı tanımlıyorum ..
ve alana bir triggir yazdım (artan sayı için)...
her şey normal buraya kadar....
ama bilgi girmeye çalıştığımda (delphiden ya da maestrop programından)
bu alan boş geçilemez diye hata veriyor..
(triggerları defalarca denedim kontrol ettim doğru)..
eğer alanı primary key yapmazsam otomatik sayı düzgün çalışıyor..
sizce sorun ne olabilir..
ilgilenenlere tşkler...
...ROKA...
sql metni aşağıdadır....
CREATE TABLE TABLE01 (
ALAN1 INTEGER NOT NULL,
ALANMETIN VARCHAR(20) CHARACTER SET WIN1254,
/* Keys */
CONSTRAINT PK_TABLE01
PRIMARY KEY (ALAN1)
);
SET TERM ^ ;
CREATE TRIGGER TRIGGER01 FOR TABLE01
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
if (NEW.ALAN1 is null) then
BEGIN
NEW.ALAN1 = GEN_ID(ALAN1,1);
END
END^
SET TERM ; ^
GRANT DELETE
ON TABLE TABLE01
TO TRIGGER TRIGGER01;
GRANT DELETE
ON TABLE TABLE01
TO PUBLIC;
CREATE TABLE TABLE01 (
ALAN1 INTEGER NOT NULL,
ALANMETIN VARCHAR(20) CHARACTER SET WIN1254,
/* Keys */
CONSTRAINT PK_TABLE01
PRIMARY KEY (ALAN1)
);
SET TERM ^ ;
CREATE TRIGGER TRIGGER01 FOR TABLE01
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
if (NEW.ALAN1 is null) then
BEGIN
NEW.ALAN1 = GEN_ID(ALAN1,1);
END
END^
SET TERM ; ^
GRANT DELETE
ON TABLE TABLE01
TO TRIGGER TRIGGER01;
GRANT DELETE
ON TABLE TABLE01
TO PUBLIC;
...ROKA...
merhabalar öncelikle şunu söyleyeyim, bu konuyu forumda çok araştırdım
ve konuyla yakından ilgilileri dahi okudum,
buna rağmen çözüm bulamamıştım,
bende ibexpert (hala ücretsiz olanını bulamadım)
ile veri tabanı yaptım.
ve veri tabanına ibquery ile bağlanıp kayıt yaptım..
şuan otomatik sayı çalışıyor..
ama ibtable ile çalışmıyor....
firebird 2.01 kullanıyorum...
ve konuyla yakından ilgilileri dahi okudum,
buna rağmen çözüm bulamamıştım,
bende ibexpert (hala ücretsiz olanını bulamadım)
ile veri tabanı yaptım.
ve veri tabanına ibquery ile bağlanıp kayıt yaptım..
şuan otomatik sayı çalışıyor..
ama ibtable ile çalışmıyor....
firebird 2.01 kullanıyorum...
...ROKA...
ib table da trigerlar otomatik çalışmaz
trigerların çalışması için insert ve update olaylarını sql kodu kullanarak ibquery ile yapman lazım.
eğer o trigeri kullamak şistiyorrsan
triger'a yazdığı o kodu stored procedure yapman lazım.
bunu nasıl kullanacağın hakkında bilgi forumda (:ara stored procedure )mevcut. kolay gelsin
trigerların çalışması için insert ve update olaylarını sql kodu kullanarak ibquery ile yapman lazım.
eğer o trigeri kullamak şistiyorrsan
triger'a yazdığı o kodu stored procedure yapman lazım.
bunu nasıl kullanacağın hakkında bilgi forumda (:ara stored procedure )mevcut. kolay gelsin
fibplus dan çnce ib kullanıyordum.aslangeri yazdı:eminmisin?Lost Soul yazdı:ib table da trigerlar otomatik çalışmaz
ibtable kullanmıyorum ama trigerların bileşene göre davranacağını hiç zannetmiyorum.
ibtable trigerları tetiklemiyor. onun yerine stored procedure ye kaydedip IBStoredProc ile çağırman gerekiyor.
ama FIBPlus kullanıyorsan. doğrudan sql kodları ile çalıştığı için database eventlarındaki trigerlar ototmatikmen teitkleniyor.
Merhaba.
Aynı sorunla karşılaşmıştım.
İlk denediğim şey, ID alanlarının "not null" özelliğini kaldırmak oldu. VT oluşturulurken kabul etmese de, sonradan edit edilebiliyordu. Fakat sonra bir sıkıntı çıktı, InnoSetup ile kurulum hazırlanırken kafası karışıyor ve şu hatayı veriyordu: "ID hem primary key, hem not null değil : s" Yani setup programında VT dosyasını kopyalayacaksanız, SQL ile oluşturmayacaksanız bu yöntemi deneyebilirsiniz.
Tam çözüm ise şu: TIBDataSet kullanın ve Object Inspector'de GeneratorField'ı şu şekilde ayarlayın:
Generator: Generator Adı
Field: PrimaryKey Adı
Increament By: 1
ApplyEvent: OnPost
Yanılıyorsam düzeltin, ama sanırım not null alanlar trigger tetiklenmeden kontrol ediliyor ve bu nedenle hata veriyor.
IBExpert'i indirmek için önce kaydolmanız gerekiyor ve ücretsiz olarak Tool'lardan IBExpert ve IBExpert Live'ı kullanabiliyorsunuz.
Kayıt linki
(Apply Event seçenekleri:
-OnNewRecord: Append/Insert komutu verdiğiniz anda ID oluşturulur, yani sonradan Cancel deseniz de Generator artar
-OnPost: Post komutu verdiğinizde ID oluşturulur ki bu yüzden seçiyoruz
-OnServer: Bunu hatırlamıyorum ya da hiç bilmedim : ))
Aynı sorunla karşılaşmıştım.
İlk denediğim şey, ID alanlarının "not null" özelliğini kaldırmak oldu. VT oluşturulurken kabul etmese de, sonradan edit edilebiliyordu. Fakat sonra bir sıkıntı çıktı, InnoSetup ile kurulum hazırlanırken kafası karışıyor ve şu hatayı veriyordu: "ID hem primary key, hem not null değil : s" Yani setup programında VT dosyasını kopyalayacaksanız, SQL ile oluşturmayacaksanız bu yöntemi deneyebilirsiniz.
Tam çözüm ise şu: TIBDataSet kullanın ve Object Inspector'de GeneratorField'ı şu şekilde ayarlayın:
Generator: Generator Adı
Field: PrimaryKey Adı
Increament By: 1
ApplyEvent: OnPost
Yanılıyorsam düzeltin, ama sanırım not null alanlar trigger tetiklenmeden kontrol ediliyor ve bu nedenle hata veriyor.
IBExpert'i indirmek için önce kaydolmanız gerekiyor ve ücretsiz olarak Tool'lardan IBExpert ve IBExpert Live'ı kullanabiliyorsunuz.
Kayıt linki
(Apply Event seçenekleri:
-OnNewRecord: Append/Insert komutu verdiğiniz anda ID oluşturulur, yani sonradan Cancel deseniz de Generator artar
-OnPost: Post komutu verdiğinizde ID oluşturulur ki bu yüzden seçiyoruz
-OnServer: Bunu hatırlamıyorum ya da hiç bilmedim : ))
arkadaşım yanlışın varLost Soul yazdı:ibtable trigerları tetiklemiyor
şimdi bir gdb oluşturup denedim. ibtable bileşeni ile autoinc alana trigerdan değer attım triger çalıştı. tabloyu refresh yaptığım zaman trigger autoinc alana değer atmış.
Sanırım başka bir sorundan dolayı trigerların çalışmadığı hükmüne varıyorsunuz. ama trigerların bileşen seçmesini ihtimali

ibtable sa çalışmam queryse çalışırım

Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
http://www.dalgayazilim.com download sayfasına girerseniz orda ibexpertin ücretsiz sürümünü bulabilirsiniz.kadioglu yazdı:....
bende ibexpert (hala ücretsiz olanını bulamadım)...

Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
arkadaşlar cevaplarını< için çok teşekkür ederim..
1. firebird maestro programını bıraktım (kendi içinde dahi olması gerekn işlemleri yapamadı)
2. ibexpert e geçtim kesnilşikle çok güzel bir araç
3. ibdataset kullandım.. hem sql rahatlığı hemde table kolaylıklarını barındırıyor..
4. otomatik sayıyı da
Tam çözüm ise şu: TIBDataSet kullanın ve Object Inspector'de GeneratorField'ı şu şekilde ayarlayın:
Generator: Generator Adı
Field: PrimaryKey Adı
Increament By: 1
on new record
ile hallettim....
iyi çalışmalar
1. firebird maestro programını bıraktım (kendi içinde dahi olması gerekn işlemleri yapamadı)
2. ibexpert e geçtim kesnilşikle çok güzel bir araç
3. ibdataset kullandım.. hem sql rahatlığı hemde table kolaylıklarını barındırıyor..
4. otomatik sayıyı da
Tam çözüm ise şu: TIBDataSet kullanın ve Object Inspector'de GeneratorField'ı şu şekilde ayarlayın:
Generator: Generator Adı
Field: PrimaryKey Adı
Increament By: 1
on new record
ile hallettim....
iyi çalışmalar
...ROKA...
ibdataset olmasın oaslangeri yazdı:arkadaşım yanlışın varLost Soul yazdı:ibtable trigerları tetiklemiyor
şimdi bir gdb oluşturup denedim. ibtable bileşeni ile autoinc alana

kullandığım dil delphi7 enterprise bileşenler delphi ile gelen interbase bileşenleri.
ibtable trigerları tetiklemiyor. defalarca problem yaşadım çünkü triger konusunda ibtable da.
bu sebeple ibtable kullandığım yererde stroed procedure oluşturup ibstoreproc bileşeni ile ibtable.beforepost olayından çağırıyordum counterları.
fibplus kullanıyorum şimdi. commitler de dahil olmak üzere bir çok işi kendisi hallediyor.

@kadioglu probleminin çözülmesine sevindim. iyi çalışmalar.

kullandığım bileşen ibtable.
delphi6 kullandım. ib bileşenleri ve fb 1.5.
defalarca yaşadığınız problem eğer autoinc alanlarla ilgili ise emin olun trigerlar çalışıyor. ancak ibtable in autoinc alana verdiği değeri görmeniz için tabloyu kapatıp açmanız lazım. çünkü id alanına değer triger ile veriyorsunuz. ibtable ın bunu görmesi için datayı yeniden çekmesi lazım.
şöyle düşünün siz tabloda bir alana manuel 'ahmet' yazdınız. sonra before insert trigerinda 'ahmet' i 'mehmet' yaptınız. hangi bileşeni kullanırsanız kullanın o alan tabloyu refresh yapmadığınız müddetçe ekranda ahmet olarak görüncektir. şimdi triger çalışmıyor diyebilirmiyiz. tabloyu refresh yaptığımız zaman kayıtlar mehmet olarak görüncektir. e hani triger çalışmıyordu?
tekrar söylüyorum trigerin bileşen seçmesi mümkünmü?
ibtable sa çalışmam ibdataset se çalışırım demesi mümkünmü?
evet ibtable kullanarak autoinc alana verilen değeri görememiş olabilirsiniz ama ibtable larda triger tetiklenmiyor dediğiniz zaman olmaz.
ibdataset kullandığınız zaman generator fieldi ayarlamadan aotuinc alana değer alabiliyormusunuz? autoinc alana değeri almak için ekstra işlemler yapıyorsun ibdataset kullandığın zaman autoinc alana değeri triger mi veriyor yokda genartor field dan yaptığın ayarlamalar ile ibdataset kendisi mi alıyor. o zaman ibdatasettede triger çalışmıyor?
......................
neyse biraz uzun oldu sanırım ama umarım anlatabilmişimdir.
iyi günler.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
@aslangeri ye aynen katılıyorum. Veri bütünlüğü ve tutarlılık (Referential Integrity) adına trigger/autoinc yöntemi kullanılmak istense de master/detay uygulamalarda delphi tarafın bundan haberi olması için farklı yöntemler (mesela afterinsert te başka bir transection ile triggerin artırdığı primary key e atanan generator okutulabilir) kullanmak gerekir 

Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!