Trigerdeki bilgiyi master detail dosyasında anlık alma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Trigerdeki bilgiyi master detail dosyasında anlık alma
Düşündümde bu ayrı bir başlık konusu olabilir.
fahrettin hocamın dediği gibi ben bugun cok sey ogrendim allah razi olsun.
ACTIVE BEFORE INSERT POSITION 0
icine giren bir id adı ile kayıtlı field mızı ki bu master table miz oluyor
form üzerinndeli master detail tablele formuzda nasıl kullanırız.
master dosyamız post olup acilip kapanmadan yeni id yi almiyor, tabi
boyle oluncada detail dosyamız masterdaki id deki degeri almiyor. sizce bu nasil olmalı . Master detail kaldırdım Query ile yapayım dedim yi
ne olmadı. once post edeyim sonra onu okuyayum en sonraki id yi alayim detail tablemdeki yeni id ye eşitleyim dedim buda mantık lı gelmedi cunku ayni anda 3 , 4 pc den fis girisi yapiliyor. Zaten sorun olmasın diye bu id triger la yapalım dedik ki sagolsun hocam yardımcı oldu.
sonuc olarak yapamadim
fahrettin hocamın dediği gibi ben bugun cok sey ogrendim allah razi olsun.
ACTIVE BEFORE INSERT POSITION 0
icine giren bir id adı ile kayıtlı field mızı ki bu master table miz oluyor
form üzerinndeli master detail tablele formuzda nasıl kullanırız.
master dosyamız post olup acilip kapanmadan yeni id yi almiyor, tabi
boyle oluncada detail dosyamız masterdaki id deki degeri almiyor. sizce bu nasil olmalı . Master detail kaldırdım Query ile yapayım dedim yi
ne olmadı. once post edeyim sonra onu okuyayum en sonraki id yi alayim detail tablemdeki yeni id ye eşitleyim dedim buda mantık lı gelmedi cunku ayni anda 3 , 4 pc den fis girisi yapiliyor. Zaten sorun olmasın diye bu id triger la yapalım dedik ki sagolsun hocam yardımcı oldu.
sonuc olarak yapamadim
Delphi içinden yapmak istiyorsan Detail tablonun BeforeInsert inde Master tablonun State inin insert modunda olup olmadığını kontrol edebilir, insert te ise önce master tabloyu post edebilirsin..
Bundan sonra da Detail in OnNewRecord veya AfterInsert inde Masterdaki ilişkili alanı Detailin alanına taşırsın.
Ayrıca arama yaparsan konu ile ilgili bir çok konuşma geçmişti
viewtopic.php?t=9830&highlight=master+detail+ibdataset
Kod: Tümünü seç
if Master.State in [dsInsert] then
Master.Post;
Kod: Tümünü seç
Detail.FieldByName('ID').AsInteger := Master.FieldByName('ID').AsInteger;

viewtopic.php?t=9830&highlight=master+detail+ibdataset
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
hocam id trigerla olustugu icin post oluncada anında
master table gelmiyor.
IBTable ile zaten master detail ilişkisi DataSource MAstesource kullanarak yaptım
ben biraz daha farklı bir yontem denedim oda trigerla yine detail doysaınında id sini yine trigerla olsutrgugum master dosyassından alsın dedim ve form üzerinde ki hic id kontrolu yapmam ve ya master detail uygulama ma gerek kalmadı .
Ama test etmedim. tek kullanıcıda sorun olmaz tabi de benim sıkıntım aynı anda 5- 6 pc den fis giriliyor ve hepsine tiriger id veriyor. Allah kerim
kodum ise soyle
once master taple post oluyor tabiki :
CREATE TRIGGER "detail_id" FOR "detail_TABLE"
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE variable temp CHAR(20);
begin
select max(id) from master_table
into temp;
NEW.ID=temp;
end
master table gelmiyor.
IBTable ile zaten master detail ilişkisi DataSource MAstesource kullanarak yaptım
ben biraz daha farklı bir yontem denedim oda trigerla yine detail doysaınında id sini yine trigerla olsutrgugum master dosyassından alsın dedim ve form üzerinde ki hic id kontrolu yapmam ve ya master detail uygulama ma gerek kalmadı .
Ama test etmedim. tek kullanıcıda sorun olmaz tabi de benim sıkıntım aynı anda 5- 6 pc den fis giriliyor ve hepsine tiriger id veriyor. Allah kerim
kodum ise soyle
once master taple post oluyor tabiki :
CREATE TRIGGER "detail_id" FOR "detail_TABLE"
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE variable temp CHAR(20);
begin
select max(id) from master_table
into temp;
NEW.ID=temp;
end
a.s selam
hocam generator um yokki triger icinde hallediyorum yani into ile degiskene alıp yazıyorum.
Zaten generator sadece sayi artırma degilmi.
Gun.ay. generatore eklenebiliyormu
soyle bir sey yani 09.02.0001 yade 09.02.1 de olabilir bu sayı her kayıtda ay ve gune gore artacak 09.02.2.... 09.02.3 gibi
hocam generator um yokki triger icinde hallediyorum yani into ile degiskene alıp yazıyorum.
Zaten generator sadece sayi artırma degilmi.
Gun.ay. generatore eklenebiliyormu
soyle bir sey yani 09.02.0001 yade 09.02.1 de olabilir bu sayı her kayıtda ay ve gune gore artacak 09.02.2.... 09.02.3 gibi
master tablemdeki trigera yazayım
sogulsun hocalarım yardımcı oldular
AS
DECLARE variable temp CHAR(2);
declare variable max_id integer;
begin
temp = EXTRACT(DAY from Current_date);
if (substring(temp from 2 for 1) = '') then temp = '0' || temp;
NEW.ID = TEMP || '.';
temp = EXTRACT(MONTH from Current_date);
if (substring(temp from 2 for 1) = '') then temp = '0' || temp;
NEW.ID = NEW.ID || TEMP || '.';
select coalesce(max(cast(substring(id from 7 for 2) as integer)),0)
from TESTTABLE
where id starting with new.id
into max_id;
max_id = max_id + 1;
NEW.ID = NEW.ID || max_id;
end
sogulsun hocalarım yardımcı oldular
AS
DECLARE variable temp CHAR(2);
declare variable max_id integer;
begin
temp = EXTRACT(DAY from Current_date);
if (substring(temp from 2 for 1) = '') then temp = '0' || temp;
NEW.ID = TEMP || '.';
temp = EXTRACT(MONTH from Current_date);
if (substring(temp from 2 for 1) = '') then temp = '0' || temp;
NEW.ID = NEW.ID || TEMP || '.';
select coalesce(max(cast(substring(id from 7 for 2) as integer)),0)
from TESTTABLE
where id starting with new.id
into max_id;
max_id = max_id + 1;
NEW.ID = NEW.ID || max_id;
end
hocam
en guvenilir yontem olarak trigeri dusuntugum icin numalandırmaya trigera verdimki sadece formdan appllyupdate veya commit diyince triger yapsın bu isi ve fis numaralandırmada bir hata olmasın. cunku programda olusacak en kucuk bir sorun benim bitisim olur cok yuklu bir transaction var ve 3,4 pc den aynı anda giriliyor.
o yuzden endiseliyim hocam .
saygılar
en guvenilir yontem olarak trigeri dusuntugum icin numalandırmaya trigera verdimki sadece formdan appllyupdate veya commit diyince triger yapsın bu isi ve fis numaralandırmada bir hata olmasın. cunku programda olusacak en kucuk bir sorun benim bitisim olur cok yuklu bir transaction var ve 3,4 pc den aynı anda giriliyor.
o yuzden endiseliyim hocam .
saygılar
Evet hocam bu işin böyle triggerlarla ve üstelik IBX bileşenleri program başından sona tek transaction kullanılacak şekilde tasarlanmışken yapılması çook zor. Bu iş için bence IBX vasat.
En güzeli generator kullanın. Tarihi okuturkende sistem tarihine bakmayın, firebirdden
böyle bir sorgu ile sunucudaki tarihi alın. Ona göre işlem yapın. Ay, gün ayırın, sonunada generator değerini ekleyin olsun bitsin.
En güzeli generator kullanın. Tarihi okuturkende sistem tarihine bakmayın, firebirdden
Kod: Tümünü seç
select first 1 current_date from rdb$fields;