Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
[Çözüldü] SQL insert ederken autoincrement alan
#1
Sql ile Fb veritabanına kayıt eklerken parametre ile kayıt ekliyorum.  Veritabanında KODU alanı autoincrement ve not null bir alan.  Aşağıdaki şekilde kayıt girmeye çalıştığımda  Kodu alanı boş olamaz hatası veriyor. Autoincrement alan olduğu için değer atayamam fakat parametre olarak koda eklemezsemde yine aynı hatayı alıyorum. 

X6mppj.png


Aşağıdaki şekilde bir kod ile  deneme yaptım sorunsuzca çalıştı fakat yukarıda resimde görülen kod ile çalışmadı. Sanırım sorun çoklu parametre girmede.

with FDATA_M.TGENEL do begin
close;
sql.clear;
sql.add('INSERT INTO Genel (ADI) VALUES (:adi)');
ParamByName('adi').AsString:=Edit1.text;
ExecSQL;

end;
Cevapla
#2
AutoIncrement (otomatik artış) alanları genellikle numerik değerler için barındırılır. Kodu sütununu böyle bir bilgi için muhafaza etmeniz çok doğru olmaz. Onun yerine Id (Identification, Belirleyici, Kimlik) isminde not null integer autoincrement primary key bir alan oluşturmalısınız.

Cevap: yukarıda :KODU diye bir parametre geçmişsiniz ama ParamByName kısmında değer ataması yapmamışsınız. Null Exception bu yüzden.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla
#3
Önemli Not: Değer ataması yapmayacağınız alanları Insert cümleciğinize ve parametre alanına yazmamalısınız.

ALAN1 - AUTOINCREMENT ALAN
ALAN2 - NORMAL ALAN
ALAN3 - NORMAL ALAN

INSERT INTO STOK_KARTLARI (ALAN2,ALAN3) VALUES (:ALAN2, :ALAN3)

şeklinde kullanmalısınız.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla
#4
hocam bir sıkıntıda o parametre olarak eklesemde eklemesemde o hatayı alıyorum. Bende onu anlayamadım. Dikkat ederseniz altta ikinci paylaştığım kod ile o alanı hiç dahil etmeden gönderdim hatasız yaptı. Fakat resimdeki şekilde olmadı Big Grin
Cevapla
#5
(06-10-2018, Saat: 13:57)Lord_Ares Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.hocam bir sıkıntıda o parametre olarak eklesemde eklemesemde o hatayı alıyorum. Bende onu anlayamadım. Dikkat ederseniz altta ikinci paylaştığım kod ile o alanı hiç dahil etmeden gönderdim hatasız yaptı. Fakat resimdeki şekilde olmadı Big Grin

Auto-increment bir alanı  INSERT INTO TABLO_ADI (IncrementAlan) values (:IncrementAlan) şeklinde kullanamazsınız.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla
#6
Kısaca;
INSERT INTO STOK_KARTLARI (BARKODU, ADI ... şeklinde yazarsan sorun olmaz. KODU kısmını böylece NULL gondermiş olursun.

Ayrıca AutoIncrement alanı da INSERT INTO TABLOADI (AutoIncrementAlan) VALUES (:AutoIncrementAlan) şeklinde de kullanabilirsin ama tavsiye etmem, zira önceden kayıtlı bir değer girersen hata alırsın.
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
WWW
Cevapla
#7
Sanırım ben anlatamadım. Yukarıda da dediğim gibi Kodu alanını parametre olarak eklemesemde aynı hatayı alıyorum.  Mesela bu eklenmemiş hali
Sanırım sorun tabloda,  kayıt  ekledikten sonra autoincrement alan değişiyor olabilir. inceleyeyim ..

ODm4dA.png
Cevapla
#8
Merhaba,
kullandığın database nedir?
stok_kartlari tablosunu yapısı nedir?
Cevapla
#9
hocam autoinc alanlara FB de trigger ile tetikleyin.. Parametre vs vermenize gerek yok..
Ör:

CREATE OR ALTER TRIGGER CARITGR FOR CARI
ACTIVE BEFORE INSERT POSITION 0
AS
begin
IF(NEW.CID IS NULL) THEN
begin
NEW.CID = GEN_ID(gen_cari_id , 1);
end
end
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#10
database firebird ise
insert into stok_kartlari(:kodu, .....) values
(GEN_ID(gen_cari_id , 1), ....)
olarak dene
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  [ÇÖZÜLDÜ] Rapor Baskısında 0 değerleri yazılmasın wiseman 2 106 01-10-2019, Saat: 18:04
Son Yorum: wiseman
  cxgrid String alan sorunu HuseyinF 7 227 25-09-2019, Saat: 16:54
Son Yorum: HuseyinF
  [ÇÖZÜLDÜ] fast report dil hatası wiseman 6 235 25-09-2019, Saat: 14:29
Son Yorum: wiseman
  ÇÖZÜLDÜ-timer kullanmadan saat kontrolü mümkünmü? sadikacar60 3 209 10-09-2019, Saat: 22:19
Son Yorum: sadettinpolat
  [ÇÖZÜLDÜ] cxgrid hücre formatı wiseman 2 121 10-09-2019, Saat: 13:53
Son Yorum: wiseman



Konuyu Okuyanlar: 1 Ziyaretçi