Trigger Yardım

Gönderen Konu: Trigger Yardım  (Okunma sayısı 1252 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı kinqberq

  • Yeni Kullanıcı
  • *
  • Karma: 0
Trigger Yardım
« : 09.04.2012, 12:01 »
Aşağıda yazmış olduğum trigger var, cl_card ve LG_XT1015_998 tablosuna bir kayıt girildiği anda benim veritabanımdaki tablolarıma da ilgili alanları kaydetmesi gerekiyor. Fakat gözden kaçırdığım bir şey var sanırım. Triggerda hata olduğundan dolayı cari kart eklerken "aynı kodlu bir kayıt daha var" tarzında bir hata veriyor. triggerı kaldırınca kaydediyor. triggerda bir sorun var ama çözemedim.  yardımcı olursanız sevinirim.

Kod: [Seç]
USE [database1]
GO
/****** Object: Trigger [dbo].[CARI_TRIGGER] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[CARI_TRIGGER]
ON [dbo].[LG_998_CLCARD]
after INSERT AS

BEGIN

declare @Ad varchar(51)
declare @TCKNO varchar(16)
declare @OgrenciNo varchar(17)
declare @TelefonNo varchar(51)
declare @TelefonNo2 varchar(51)
declare @BursTipi varchar(20)
declare @Oda_Tipi smallint
declare @Konum varchar(20)
declare @Dönem varchar(50)
declare @Cinsiyet varchar(10)
declare @ID int

SET @ID = (SELECT LOGICALREF FROM inserted)
set @Ad = (select inserted.DEFINITION_ from inserted)
set @TCKNO = (select inserted.TCKNO from inserted)
set @OgrenciNo = (select inserted.CODE from inserted)
set @TelefonNo = (select inserted.TELNRS1 from inserted)
set @TelefonNo2 = (select inserted.TELNRS2 from inserted)

set @BursTipi = (select [LG_XT1015_998].BURS from [LG_XT1015_998] Where [LG_XT1015_998].PARLOGREF = @ID )
set @Cinsiyet = (select [LG_XT1015_998].CINSIYET from [LG_XT1015_998] Where [LG_XT1015_998].PARLOGREF = @ID)
set @Dönem = (select [LG_XT1015_998].DONEM from [LG_XT1015_998] Where [LG_XT1015_998].PARLOGREF = @ID)
set @Konum = (select [LG_XT1015_998].KONUM from [LG_XT1015_998] Where [LG_XT1015_998].PARLOGREF = @ID)
set @Oda_Tipi = (select [LG_XT1015_998].ODA_TIPI from [LG_XT1015_998] Where [LG_XT1015_998].PARLOGREF = @ID)

insert into [DB_YEDEK].dbo.Kisiler(KisiAdi) values(@Ad)
insert into [DB_YEDEK].dbo.Kisiler(TCKimlikNo) values(@TCKNO)
insert into [DB_YEDEK].dbo.tbl_EgitimBilgisi(OgrenciNo) values(@OgrenciNo)
insert into [DB_YEDEK].dbo.tbl_IletisimBilgisi(Telefon1) values(@TelefonNo)
insert into [DB_YEDEK].dbo.tbl_IletisimBilgisi(Telefon2) values(@TelefonNo2)
insert into [DB_YEDEK].dbo.tbl_TempOdaBilgisi(OdaTipiID) values(@Oda_Tipi)

END

Çevrimdışı Monsieur®

  • LogoDestek Yönetim
  • Logo Uzmanı
  • *****
  • Karma: 38
Ynt: Trigger Yardım
« Yanıtla #1 : 09.04.2012, 14:34 »
Merhaba,

Bence trigger da sıkıntı yok,
Logonun bu tablo üzerinden ne yaptığını  inceleyin daha sonrasında trigger ınızı yazın.

Ama anlamadığım nokta şu

kendi veritabanınızın kisiler tablosuna 2 satır neden işliyorsunuz? orada bir ilginçlik var. aynı şekilde iletişim içinde geçerli, ayrıca yaptığınız tablolar arası bağlantı yok mu? yok gibi görünüyor.

Uzaktan görüp sesli düşündüklerim.

Kolay gelsin.

Çevrimdışı ByBirol®

  • Logo Sistem Administrator
  • Logo Uzmanı
  • *****
  • Karma: 18
  • admin@artibilisim.com Logo Çözüm Ortağı
Ynt: Trigger Yardım
« Yanıtla #2 : 09.04.2012, 15:51 »
Ayrıca kayıt tarihcesi ve kayit revizyon takibi işinizi goruyor olması lazım .

Çevrimdışı kinqberq

  • Yeni Kullanıcı
  • *
  • Karma: 0
Ynt: Trigger Yardım
« Yanıtla #3 : 10.04.2012, 08:32 »
Cevaplarınız için teşekkürler.
Kişiler tabloma 2 değer girmiyorum örnek için kısaltmıştım. KisiID ile diger tablolar ile bağlantı kuruyorum, kayıt tarihini de tutuyorum.
 Kodu biraz düzenledim önce localde denedim, kisiler tablomda bir kaç deger not nullable özelliginde olduğu için trigger çalışmıyormuş. Triggerın çalışan hali aşağıdadır. Hala eksiklikleri var ama çalışan hali belki yardımcı olur diğer arkadaşlara.

Kod: [Seç]
USE [DATABASE1]
GO
/****** Object:  Trigger [dbo].[CARI_TRIGGER]    ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[CARI_TRIGGER]
ON [dbo].[LG_998_CLCARD]
after INSERT AS


BEGIN
declare @Code varchar(17)
declare @Ad varchar(51)
declare @TCKNO varchar(16)
declare @OgrenciNo varchar(17)
declare @TelefonNo varchar(51)
declare @TelefonNo2 varchar(51)

declare @BursTipi  varchar(20)
declare @Oda_Tipi smallint
declare @Konum  varchar(20)
declare @Dönem  varchar(50)
declare @Cinsiyet  varchar(10)
declare @ID int
declare @KisiID int
declare @Adres varchar(51)
declare @Adres2 varchar(51)

SET @ID = (SELECT LOGICALREF FROM inserted)
set @Ad = (select inserted.DEFINITION_ from inserted)
set @TCKNO = (select inserted.TCKNO from inserted)
set @OgrenciNo = (select inserted.CODE from inserted)
set @TelefonNo = (select inserted.TELNRS1 from inserted)
set @TelefonNo2 = (select inserted.TELNRS2 from inserted)

set @BursTipi = (select [LG_XT1015_998].BURS from [LG_XT1015_998] Where [LG_XT1015_998].PARLOGREF = @ID )
set @Cinsiyet = (select [LG_XT1015_998].CINSIYET from [LG_XT1015_998] Where [LG_XT1015_998].PARLOGREF = @ID)
set @Dönem = (select [LG_XT1015_998].DONEM from [LG_XT1015_998] Where [LG_XT1015_998].PARLOGREF = @ID)
set @Konum = (select [LG_XT1015_998].KONUM from [LG_XT1015_998] Where [LG_XT1015_998].PARLOGREF = @ID)
set @Oda_Tipi = (select [LG_XT1015_998].ODA_TIPI from [LG_XT1015_998] Where [LG_XT1015_998].PARLOGREF = @ID)

insert into [DB_YEDEK].dbo.Kisiler(KisiAdi,TCKimlikNo,Cinsiyet,KayitTarihi) values(@Ad,@TCKNO,@Cinsiyet,GETDATE())
SET @KisiID = SCOPE_IDENTITY()
insert into [DB_YEDEK].dbo.tbl_EgitimBilgisi(KisiID,OgrenciNo,KayitTarihi) values(@KisiID,@OgrenciNo,GETDATE())
insert into [DB_YEDEK].dbo.tbl_IletisimBilgisi(KisiID,Adres,Telefon1,Telefon2,KayitTarihi) values(@KisiID,@Adres+@Adres2,@TelefonNo,@TelefonNo2,GETDATE())
insert into [DB_YEDEK].dbo.tbl_TempOdaBilgisi(KisiID,OdaTipiID,KayitTarihi) values(@KisiID,@Oda_Tipi,GETDATE())

END



Çevrimdışı kinqberq

  • Yeni Kullanıcı
  • *
  • Karma: 0
Ynt: Trigger Yardım
« Yanıtla #4 : 10.04.2012, 09:31 »
Yalnız şöyle bir sorunum var.
belirli bir aşamaya kadar geldim fakat

set @BursTipi = (select [LG_XT1015_998].BURS from [LG_XT1015_998] Where [LG_XT1015_998].PARLOGREF = @ID )

şeklindeki alanların değerlerini döndüremiyorum. @ID alanına veritabanındaki herhangi bir sayıyı girersem geliyor fakat o an eklenmiş olan inserted tablosundaki @ID yi çekemiyor diye düşünüyorum.
İşlem önceliği gibi bir durum mu söz konusu ?
Cari kart açılırken 2 tane tablo benim için önemli cl_card ve xt1015_998

(önce cl_card tablo kaydediliyor,sonrasında dönen değer ile xt1015_998 e bilgi girişi yapılıyor olması gerek)
ben de cl_card tablosuna insert edilen ID ile xt tablomdaki kayıdın bilgilerine ulaşmak istiyorum.? başka hangi yolu önerebilirsiniz ?
« Son Düzenleme: 10.04.2012, 15:45 Gönderen: kinqberq »

Çevrimdışı kinqberq

  • Yeni Kullanıcı
  • *
  • Karma: 0
Ynt: Trigger Yardım
« Yanıtla #5 : 10.04.2012, 16:37 »
kodun başlarına doğru

IF EXISTS(SELECT PARLOGREF FROM [LG_XT1015_998] WHERE PARLOGREF=@ID)
BEGIN
yazdım ve ilgili tablolarıma yazmadı.

CL_CARD inserted edildiği anda LG_XT1015_998 'e kayıt girilmiş olması lazım değil mi ?
cari kart oluşturulduğu anda LG_XT1015_998 den parlogrefi nasıl alabilirim.

mantıkken benim triggerdan önce cl_card logicalref'i LG_XT1015_998 parlogref'e eklemesi gerekmiyor muydu ?

Çevrimdışı Monsieur®

  • LogoDestek Yönetim
  • Logo Uzmanı
  • *****
  • Karma: 38
Ynt: Trigger Yardım
« Yanıtla #6 : 11.04.2012, 08:38 »
Merhaba,

Bunu sana anlatmam çok zor dersem gerçekten inanırmısın.
Anladığım kadarı ile yazılımcısın ama üzgünüm bunu site üzerinde anlatma gibi zamanım yok uzun ve versiyona göre değişen bir konu.

Sadece sebebini yazıyım, orada bir transaction var ve bu yüzden istediğin kayıtlara ulaşamıyorsun.

Kolay gelsin.

Çevrimdışı kinqberq

  • Yeni Kullanıcı
  • *
  • Karma: 0
Ynt: Trigger Yardım
« Yanıtla #7 : 11.04.2012, 09:01 »
Cevap için teşekkürler, evet yazılımla uğraşıyorum.

uzun uzun anlatmaktan ziyade örnek gösterebilecek bir döküman varsa paylaşırsan boş zamanında sevinirim. örnek üzerinden çözmeye çalışırım ben de.

bir de bu cl_card'a kayıt ekleme stored procedure dan mı oluyor yoksa arkaplandaki kodlardan mı ?

ayrıca bu bilgiye tersten gidince ulaştım. triggerı LG_XT1015_998 tablosuna ekledim ve cl_card ile joinledim. insert edildiği anda istediğim bilgiler geliyor ama sağlıklı olmadı gibi düşünüyorum.
Cl_CARD tablosu güncellendiği(up-date) anda XT tablosuda güncellenir mi ? evetse XT üzerinden gidebilirim sanırım ?
« Son Düzenleme: 11.04.2012, 09:13 Gönderen: kinqberq »