Delphi Can

Orjinalini görmek için tıklayınız: [Çözüldü] SQL insert ederken autoincrement alan
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Sayfalar: 1 2
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;
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.
Ö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.
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
(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.
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.
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
Merhaba,
kullandığın database nedir?
stok_kartlari tablosunu yapısı nedir?
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
database firebird ise
insert into stok_kartlari(:kodu, .....) values
(GEN_ID(gen_cari_id , 1), ....)
olarak dene
Sayfalar: 1 2