MS SQL DE SCHEMADA kayıt sorunu(Firedac ve ADO...ile denedim sorun var)Çözüldü

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

MS SQL DE SCHEMADA kayıt sorunu(Firedac ve ADO...ile denedim sorun var)Çözüldü

Mesaj gönderen softdestek »

Sorun çok ilginç bir durum arkadaşlar..
MS SQL veritabanında tüm bilgiler genel düz mantık olarak dbo şemasında tutulur.
Ben tüm tableları dbo şemasında değilde..Her yazacağım bölümün kendi şemasında durmasında istiyorum
örnek vermek gerekirse BORSA veritabanın içine
BORSA.DEMIRBAS
BORSA.EVRAKKAYIT
BORSA.UYELIK
BORSA.TESCIL
BORSA.MUHASEBE
......
Tabi bu nedenden ötürü aynen oracle olduğu gibi MS SQL de şema oluşturdum.
Buraya kadar soru yok.

Birde tabloların bazılarında iki çeşit outoinc alan oluşyturdum
Şu şekilde
SIRANO ALANI ms sqlde identy alan(autoinc)
TESCILNO ALANI ise triger ile değerini yıla göre artırdığım autoinc alan..Her yıl sırano alanları birden başlıyor bu nedenden ötürü..
( alanının değerini ise sequence ile YIL alanın değerine göre bir bir artıyorum. Triger yolu ile.)
Normalde table edit postlarda sorun yok.

Sorun insert ve post olayında...
Fakat iş kayıt eklemeye gelince Firedac ve ADO da aynı hata söz konusu
Sadece SIRANO,TESCILNO,YIL alanın değeri veritabanına ekleniyor diğer hiç bir alan eklenmiyor..

Aşağıda resimleri mevcut bunun sebebi ne olabilir.

Projeyi yazmaya başladım burda takıldım.
İlgilenen herkese çok teşekkür ederim.

Durumla ilgili resimler aşağıda..

http://s28.postimg.org/qhgl83hm5/ERROR_1.jpg
http://s16.postimg.org/7bf5cm3zp/ERROR_2.jpg
http://s16.postimg.org/5yxgaq6k5/ERROR_3.jpg
En son softdestek tarafından 02 May 2015 12:13 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: MS SQL DE SCHEMADA kayıt sorunu(Firedac ve ADO...ile denedim sorun var)

Mesaj gönderen mrmarman »

Önce SQL Manager ile çıplak bir sorgu ile kayıt ekleyip o yakada sorun olmadığını netleştirmek lazım.

Testiniz SQL sorgularını basite indirgeyip Delphi tarafından öyle denemek ile takip etsin. Yani sadece bir alana veri düşecek şekilde insert into ile.

Tecrübenize binaen try except koyup exception durumunu pass geçmeyip gözlemlediğinizi düşünmek istiyorum.
Keza örnek olsun diye yazıyorum, yanlış anlaşılmasın bazen basit hatalar bakış açımızı gölgeleyebiliyor, autoinc alana veri yazmaya çalışıldı da exception oluştu, bunu bilmeden görmezden gelmiş olunmuş benzeri kayıt insert olmuş sonra Update olamamış gibi de duruyor.

ek bunu derken iki ardışık işlem varsa diye yazdım, yoksa kimse eleştirmesin, insert işleminde exceptiın olursa kayıt gerçekleşmez illa ki. sql kod örnekleri olmadığından farazi konuşuyorum.
Resim
Resim ....Resim
Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

Re: MS SQL DE SCHEMADA kayıt sorunu(Firedac ve ADO...ile denedim sorun var)

Mesaj gönderen softdestek »

SQL sorguyu en sade şekle indirdim zaten;

Kod: Tümünü seç

Select
  TESCIL.TESCILMASTER.SIRANO,
  TESCIL.TESCILMASTER.TESCILNO,
  TESCIL.TESCILMASTER.TARIH,
  TESCIL.TESCILMASTER.SATISKODU,
  TESCIL.TESCILMASTER.SATICINO,
  TESCIL.TESCILMASTER.SATICIADRESNO,
  TESCIL.TESCILMASTER.ALICINO,
  TESCIL.TESCILMASTER.ALICIADRESNO,
  TESCIL.TESCILMASTER.MALKODU,
  TESCIL.TESCILMASTER.FIYAT,
  TESCIL.TESCILMASTER.MIKTAR,
  TESCIL.TESCILMASTER.YIL
From
  TESCIL.TESCILMASTER
ORDER BY
 TESCIL.TESCILMASTER.YIL, TESCIL.TESCILMASTER.SIRANO

Kullandığım trigeride vereyim

Kod: Tümünü seç

USE [BORSA]
GO
/****** Object:  Trigger [TESCIL].[TESCILMASTER_TESCILNO_Insert]    Script Date: 02.05.2015 11:39:28 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [TESCIL].[TESCILMASTER_TESCILNO_Insert] ON [TESCIL].[TESCILMASTER]
INSTEAD OF INSERT
--FOR INSERT
AS
BEGIN
DECLARE @TESCILNO Int
declare @YIL INT
-- SET @idCol = Select max(idCol)+1 from dbo.Tablom (Sequence kullanmaz isen.)

SELECT  @YIL=YIL FROM INSERTED

IF @YIL=2015 BEGIN
             SET @TESCILNO = NEXT VALUE FOR GEN2015
			 END    

IF @YIL=2014 BEGIN
             SET @TESCILNO = NEXT VALUE FOR GEN2014
			 END

IF @YIL=2013 BEGIN
             SET @TESCILNO = NEXT VALUE FOR GEN2013
			 END 
			 			  
IF @YIL=2012 BEGIN
             SET @TESCILNO = NEXT VALUE FOR GEN2012
			 END 

IF @YIL=2011 BEGIN
             SET @TESCILNO = NEXT VALUE FOR GEN2011
			 END 

IF @YIL=2010 BEGIN
             SET @TESCILNO = NEXT VALUE FOR GEN2010
			 END 

IF @YIL=2009 BEGIN
             SET @TESCILNO = NEXT VALUE FOR GEN2009
			 END 

IF @YIL=2008 BEGIN
             SET @TESCILNO = NEXT VALUE FOR GEN2008
			 END 

IF @YIL=2007 BEGIN
             SET @TESCILNO = NEXT VALUE FOR GEN2007
			 END 

IF @YIL=2006 BEGIN
             SET @TESCILNO = NEXT VALUE FOR GEN2006
			 END 

--SET @idCol = NEXT VALUE FOR SQN_TESCIL_TESCILNO

--Insert Into dbo.vedat (TESCILNO,YIL,TARIH,ISIM) Select  @TESCILNO,inserted.YIL,inserted.TARIH,inserted.ISIM     From inserted   
Insert Into TESCIL.TESCILMASTER(TESCILMASTER.TESCILNO,TESCILMASTER.YIL) Select  @TESCILNO,inserted.YIL     From inserted   

END
Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

Re: MS SQL DE SCHEMADA kayıt sorunu(Firedac ve ADO...ile denedim sorun var)

Mesaj gönderen softdestek »

Trigerden kaynaklanır şu trigeri gözden geçireyim..
Edit postde sorun yok ama sadece ilk kayıt eklemede sorun var...
Triger çalışıyor ama diğer alanları dikkate almıyor...
yukardaki örneğe tüm alanları ekleyecem birde...inşallah olur.
Kullanıcı avatarı
softdestek
Üye
Mesajlar: 155
Kayıt: 17 Eyl 2010 03:53

Re: MS SQL DE SCHEMADA kayıt sorunu(Firedac ve ADO...ile denedim sorun var)

Mesaj gönderen softdestek »

Sorunu çözdüm..Firedac ile yazmaya devam ediyorum projeyi teşekkür ederim ..
Sorun trigerdenmiş...
MS SQL yeni öğrendiğim için trigerde hata yapmışım.

Aşağıdaki kodu

Kod: Tümünü seç

Insert Into TESCIL.TESCILMASTER(TESCILMASTER.TESCILNO,TESCILMASTER.YIL) Select  @TESCILNO,inserted.YIL     From inserted   
Aşağıdaki gibi düzenledim.
Her alanı tek tek yazdım. Ben yeni başladığım için ms sql "from inserted kullanımı yeni öğrenmiştim.
Standart insert into values... biliyorum ama bu From inserted olayı yeni öğrenmiştim.

Kod: Tümünü seç

INSERT INTO TESCIL.TESCILMASTER(
  TESCIL.TESCILMASTER.TESCILNO,
  TESCIL.TESCILMASTER.TARIH,
  TESCIL.TESCILMASTER.SATISKODU,
  TESCIL.TESCILMASTER.SATICINO,
  TESCIL.TESCILMASTER.SATICIADRESNO,
  TESCIL.TESCILMASTER.ALICINO,
  TESCIL.TESCILMASTER.ALICIADRESNO,
  TESCIL.TESCILMASTER.FIYAT,
  TESCIL.TESCILMASTER.MALKODU,
  TESCIL.TESCILMASTER.MIKTAR,
  TESCIL.TESCILMASTER.TUTAR,
  TESCIL.TESCILMASTER.TESCILUCRETI,
  TESCIL.TESCILMASTER.STOPAJ,
  TESCIL.TESCILMASTER.BEYANTURU,
  TESCIL.TESCILMASTER.CEZA,
  TESCIL.TESCILMASTER.SSDF,
  TESCIL.TESCILMASTER.MERAFONU,
  TESCIL.TESCILMASTER.T_GELIR,
  TESCIL.TESCILMASTER.IPTAL,
  TESCIL.TESCILMASTER.USERDEGISADI,
  TESCIL.TESCILMASTER.USERDEGISTIME,
  TESCIL.TESCILMASTER.USERGIRISADI,
  TESCIL.TESCILMASTER.USERGIRISTIME,
  TESCIL.TESCILMASTER.YIL,
  TESCIL.TESCILMASTER.SUBEKODU
  )

  SELECT  
  @TESCILNO,
  inserted.TARIH,
  inserted.SATISKODU,
  inserted.SATICINO,
  inserted.SATICIADRESNO,
  inserted.ALICINO,
  inserted.ALICIADRESNO,
  inserted.FIYAT,
  inserted.MALKODU,
  inserted.MIKTAR,
  inserted.TUTAR,
  inserted.TESCILUCRETI,
  inserted.STOPAJ,
  inserted.BEYANTURU,
  inserted.CEZA,
  inserted.SSDF,
  inserted.MERAFONU,
  inserted.T_GELIR,
  inserted.IPTAL,
  inserted.USERDEGISADI,
  inserted.USERDEGISTIME,
  inserted.USERGIRISADI,
  inserted.USERGIRISTIME,
  inserted.YIL,
  inserted.SUBEKODU
From inserted
Cevapla