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.
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.
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ı: 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.
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.
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
  AdoQuery ile ilgili bir sorun. (Çözüldü) Bay_Y 4 111 17-04-2024, Saat: 10:58
Son Yorum: Bay_Y
  Fastreport İçindekiler Sayfası Oluşturma [ÇÖZÜLDÜ] bydelphi 1 237 18-03-2024, Saat: 12:11
Son Yorum: bydelphi
  Çok Satırlı Filtreleme [Çözüldü] bünyamin68 12 1.353 14-02-2024, Saat: 22:42
Son Yorum: mustafaozpinar
  [ÇÖZÜLDÜ] macos işletim sistemine program yazmak shooterman 5 513 02-02-2024, Saat: 09:54
Son Yorum: shooterman
  COZULDU veritabani prg yerine ne kullanabilirim. sadikacar60 8 776 29-01-2024, Saat: 18:41
Son Yorum: sadikacar60



Konuyu Okuyanlar: 3 Ziyaretçi