Update Trigger sorunu

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
eyalin
Üye
Mesajlar: 126
Kayıt: 09 May 2005 08:08

Update Trigger sorunu

Mesaj gönderen eyalin »

Herkese kolay gelsin merhaba.
Arkadaşlar şöyle bir sıkıntım var.2 tablom var biri cari biri sikayet.
cari tablomdaki carunvan alanının adı değiştiği zaman otomatik olarak sikayet tablomdaki ilişkili kayıtlardaki s_carunvan alanını güncellemek için bir trigger yazıyorum ama bi türlü beceremedim.

Kod: Tümünü seç

CREATE TRIGGER unvanguncelle ON tbl_cari 
FOR update
AS
update tbl_sikayet
set tbl_sikayet.s_carunvan=inserted.car_unvan
from tbl_cari join inserted
on s_carunvan.tbl_sikayet=inserted.car_unvan
falan diye devam edecek ama nasıl.İşin özü cari tablomdaki carunvan alanı değişirse sikayet tablomdaki alanda güncellensin istiyorum.Yardım edecek arkadaşlara teşekkürler.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Şikayet tablonda cari tablondaki ismi tutmatıp cari tablosundaki Id sini tutsan daha iyi olur.
Hem datan şişmez hem böyle bir triggera gerek kalmaz.

Çağırırken Join ederek veya ilişkilendirerek çağırırsın raporlarında.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
ahmet_sinav
Üye
Mesajlar: 263
Kayıt: 17 Nis 2004 07:44
Konum: İzmir Yeşilyurt Ulu Cami
İletişim:

Mesaj gönderen ahmet_sinav »

iyi çalışmalar;
fk tanımlayıp onupdate cascade yapın istediğiniz gerçekleştirir.
Saygılar;
eyalin
Üye
Mesajlar: 126
Kayıt: 09 May 2005 08:08

Mesaj gönderen eyalin »

Arkadaşlar çözüm oldu şöyleki;

Kod: Tümünü seç

CREATE TRIGGER unvanguncelle ON tbl_cari 
FOR update
AS
set nocount on

declare @Newunvan varchar (50), @Oldunvan varchar(50)

select @Newunvan = inserted.car_unvan from inserted
select @Oldunvan = deleted.car_unvan from deleted
update tbl_sikayet set tbl_sikayet.S_CARUNVAN = @Newunvan
where tbl_sikayet.S_CARUNVAN = @Oldunvan
if @@rowcount=0 or @@error<>0
begin
Rollback tran
end

set nocount off
ile şikayet tablomdaki s_carunvan alanı otomatik güncelleniyor.Bakalım başka ne sorunlar çıkacak :wink: [/quote]
eyalin
Üye
Mesajlar: 126
Kayıt: 09 May 2005 08:08

Mesaj gönderen eyalin »

Arkadaşlar güncelleme işini çözdüm ama şimdi de şöyle bir sıkıntı var.
programda kullanıcı cari tabloda ünvan alanında değişiklik yaptığında veritabanında yukarıdaki trigger sayesinde şikayet tablosundaki ünvan alanı güncelleniyor.buraya kadar her şey tamam.Fakat sorun şu;
progamda değişiklik yapıldıktan sonra şikayet formuna girdiğimde şikayet dataseti active edilmesine rağmen boş geliyor.Ta ki programdan çıkıp tekrar girdiğinizde şikayet bölümündeki kayıtları görüyorsunuz.bunun acaba yukardaki trigger ile ilgisi var mıdır?
eyalin
Üye
Mesajlar: 126
Kayıt: 09 May 2005 08:08

Mesaj gönderen eyalin »

Peki bu olay neden olmaz.trigger kullanmadan yukarıdaki güncelleştirmeyi yapmak için ne yapmalıyım.Foreign key kullanmaya çalışıyorum.
tbl_cari tbl_şikayet
car_id(primary key) sid(primary key)
car_unvan(varchar,bu alanda unique index tanımlı) s_carunvan(varchar)

car_unvan ile s_carunvan arasında nasıl bir ilişki kurabilirim.Çıldırıcam
valla az kaldı
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

dataseti refresh et ama,

Tekrar söylüyorum yaparsan senin için daha iyi olur.

Sikayet tablonda ilgili carinin cari tablosundaki unvan alanını değil,
cari tablondaki varsa cari ID sini eklet
yoksa da cari tablona bir prm key olarak olarak ekle;
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Veri tabanı mantığını katletmişsiniz :(
conari yazdı:...
Sikayet tablonda ilgili carinin cari tablosundaki unvan alanını değil,
cari tablondaki varsa cari ID sini eklet
yoksa da cari tablona bir prm key olarak olarak ekle;
@conari nin uyarısına kulak ver. Enerjini gereksiz bir işleme harcıyorsun gibime geliyor. Bu iş UPDATE CASCADE ile yapılıyor olsa da (MS-SQL de nasıl bilmiyorum) yapılması gereken yukarıdaki önerideki gibidir. ve olay Master/Detay olayıdır :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
eyalin
Üye
Mesajlar: 126
Kayıt: 09 May 2005 08:08

Mesaj gönderen eyalin »

rsimsek yazdı:Veri tabanı mantığını katletmişsiniz :(
conari yazdı:...
Sikayet tablonda ilgili carinin cari tablosundaki unvan alanını değil,
cari tablondaki varsa cari ID sini eklet
yoksa da cari tablona bir prm key olarak olarak ekle;
@conari nin uyarısına kulak ver. Enerjini gereksiz bir işleme harcıyorsun gibime geliyor. Bu iş UPDATE CASCADE ile yapılıyor olsa da (MS-SQL de nasıl bilmiyorum) yapılması gereken yukarıdaki önerideki gibidir. ve olay Master/Detay olayıdır :idea:
rsimsek abicim ve cvp yazan arkadaşlara teşekkürler.evet car_unvan alanını şikayet tablosunda ikinci kere tutmaktan vazgeçtim.Katliama son verdim:)sorunu çözdüm
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Bazen "nasihat müsibet" olayı olması gerekiyor :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla