Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Firebird 3 embedded versiyon autoinc alan problemi
#1
Delphi 10.2 ve firebird 3.03
Benim bilgisayarda firebird kurulu. Embedded versiyonda test etmek amacıyla firebird kurulu olmayan bir bilgisayarda, programı yanında embedded firebird dosyaları varken çalıştırdım. Bağlantı başarılı oldu, db içindeki kayıtları da sorunsuz görüp, sorgulama yaptım.
Ancak yeni kayıt yapmak istediğimde, kayıt aşamasında "field id must have value" hatası aldım. Tabloda bu alan autoinc olarak tanımlı. Bağlantıyı sağlayan firedac bileşeninde autogeneratorvalue=Autoinc olarak ayarlı. Benim bilgisayarda kayıt yaparken bu hatayı vermiyor. Neden böyle bir hata alıyor olabilirim?
Cevapla
#2
Aldığınız hatanın tamamını yazarsanız daha yönlendirici olabilir ama hata veritabanı değil uygulamadan geliyor (daha veritabanına gitmeden önce oluşuyor) gibi gözüküyor. Kullandığınız bileşen nedir? Dataset'in afterinsert'ünde id alanını 0 yapıp dener misiniz sonuç ne oluyor?
Cevapla
#3
(16-05-2018, Saat: 16:11)canbir Adlı Kullanıcıdan Alıntı: Delphi 10.2 ve firebird 3.03
Benim bilgisayarda firebird kurulu. Embedded versiyonda test etmek amacıyla firebird kurulu olmayan bir bilgisayarda, programı yanında embedded firebird dosyaları varken çalıştırdım. Bağlantı başarılı oldu, db içindeki kayıtları da sorunsuz görüp, sorgulama yaptım.
Ancak yeni kayıt yapmak istediğimde, kayıt aşamasında "field id must have value" hatası aldım. Tabloda bu alan autoinc olarak tanımlı. Bağlantıyı sağlayan firedac bileşeninde autogeneratorvalue=Autoinc olarak ayarlı. Benim bilgisayarda kayıt yaparken bu hatayı vermiyor. Neden böyle bir hata alıyor olabilirim?

fdquery nesnesi kullanıyorsanız
UpdateOptions kısmında
    AutoIncFields,  GeneratorName,  KeyFields
   değer atamanız gerekir diye biliyorum
Cevapla
#4
alternatif olarak firebird 3 lü versiyonları kullanıyorsanız autoinc alanınızı identity olarakta belirleyebilirsiniz.

“Do. Or do not. There is no try.”
Cevapla
#5
(16-05-2018, Saat: 17:13)edo Adlı Kullanıcıdan Alıntı: Aldığınız hatanın tamamını yazarsanız daha yönlendirici olabilir ama hata veritabanı değil uygulamadan geliyor (daha veritabanına gitmeden önce oluşuyor) gibi gözüküyor. Kullandığınız bileşen nedir? Dataset'in afterinsert'ünde id alanını 0 yapıp dener misiniz sonuç ne oluyor?
Hatanın tamamı bu kadar. Dediğiniz gibi hata uygulamadan geliyor. id alanı required bir alan post sırasında boş olduğu için bu hatayı veriyor.
(16-05-2018, Saat: 17:40)meko Adlı Kullanıcıdan Alıntı: fdquery nesnesi kullanıyorsanız
UpdateOptions kısmında
    AutoIncFields,  GeneratorName,  KeyFields
   değer atamanız gerekir diye biliyorum
Evet fdquery nesnesi kullanıyorum, fazladan id alanını autoinc yapmışım, ancak hata sanırım başka bir şeyden kaynaklanıyor. Uygulamayı derlerken fdconnection nesnesi bağlı ise, dm create edilirken close yapıp, parametreleri girip sonra yeniden bağlantı sağlamama rağmen, sanırım kendi bilgisayarımda db aynı olduğundan bir sorun çıkmıyor. Diğer bilgisayarda ise bağlantı sağlanıyor ama bir şekilde autoinc alanı işlevini yerine getirmiyor. Aslında hatanın nedeninin bu olduğundan da emin değilim. Çünkü uygulama bir kez hata verince sonrasında uygulamada bu konu hakkında ne değişiklik yaparsam yapayım veritabanı dosyasını değiştirmedikçe farklı da olsa hata almaya devam ettim. Sanırım post kodunun olduğu try bloğunun except alanında rollback kodu olmasına rağmen db kayıt olarak zarar görüyor.
Soruna neyin neden olduğunu anlayamasam da embedded firebird kullanan uygulamam ile şu an sorunsuz kayıt yapabiliyorum.Son ayarlarım: Sıfır veritabanı dosyası kullandım, fdquery updateoptions kısmına AutoIncFields, GeneratorName, KeyFields bilgilerini uygun şekilde tanımladım ve id fieldinin autogeneratevalue özelliğini none yaptım.

(16-05-2018, Saat: 21:13)masteryoda Adlı Kullanıcıdan Alıntı: alternatif olarak firebird 3 lü versiyonları kullanıyorsanız autoinc alanınızı identity olarakta belirleyebilirsiniz.
Evet firebird 3.03 versiyon kullanıyorum. identity alanını bir kez kurcalamıştım. Benim anladığım normalde trigger ve sequencede bulunan generatorün yaptığı işi db kendi içinde hallediyor. Trigger ve generator göremedim. Belki basit veya saçma gelecek ama, ana tabloya kayıt girildikten hemen sonra alt tabloya kayıt eklemek istediğimde ana tablonun id numarasını alamam diye kullanmamıştım. Şu an kullandığım şekliyle kayıt gerçekleştiği anda ana tablonun id bilgisi query de bulunuyor. Konusunu açmışken identity kullanımı hakkında bilgi verirseniz memnun olurum.

İlgilenen tüm arkadaşlara teşekkür ediyorum. (+ rep)
Cevapla
#6
Delphi 10.2 ve Firebird 2.5.8 , FireDAC ile yaptığım bir uygulamada benzer sorun yaşadım. Çözüm olurmu bilmiyorum ama aşağıdaki şekilde yazdığım kod çalışıyor.

M_ID alanı otmatik artan bir alan. kayıt eklerken Query creat ediyorum ve ekleyip sonra siliyorum.

Benzer sorun yaşayıp araştırma yapıp bu konuyu okuyan arkadaşlar için cevap vermek istedim.

 var
   MusteriEkle: TFDQuery;
    MusteriEkle := TFDQuery.Create(self);

   with MusteriEkle do
   begin
     Connection := AnaForm.DBBaglanti;
     Sql.Clear;
     Sql.Add('SELECT * FROM MUSTERI_KART');
     AutoCalcFields := True;
     UpdateOptions.AutoIncFields := 'M_ID';
     Open;

     Insert; // Ekle
     FieldByName('M_ADI').AsString := Trim(MusteriAdi.text);
     FieldByName('M_ADRES').AsString := Trim(MusteriAdresi.text);
     FieldByName('M_TEL').AsString := Trim(MusteriTel.text);
     FieldByName('M_SEKTOR').AsString := Trim(MusteriSektor.text);
     FieldByName('M_REFERANS').AsString := Trim(MusteriRef.text);
     FieldByName('M_VERGI_DAIRESI').AsString := Trim(MusteriVergiDairesi.text);
     FieldByName('M_VERGI_NO').AsString := Trim(MusteriVergiNo.text);
     FieldByName('M_YETKILI').AsString := Trim(MusteriYetkiliAdi.text);
     FieldByName('M_YETKILI_MAIL').AsString := Trim(MusteriYetkiliEmail.text);
     FieldByName('M_YETKILI_TEL').AsString := Trim(MusteriYetkiliTel.text);
     FieldByName('M_EKLEYEN').AsString := '-';
     Post; // Kaydet
     Close; // Kapat

   end;
   FreeandNil(MusteriEkle);
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  pardusda dbeaver ıle fırebırd kullanımı hakkında sadikacar60 8 481 29-02-2024, Saat: 17:50
Son Yorum: Hayati
  store procedure problemi sadikacar60 10 833 26-02-2024, Saat: 14:37
Son Yorum: sadikacar60
  Firebird Sound_ex Kodu. COMMANDX 1 275 28-01-2024, Saat: 01:56
Son Yorum: maydin60
  Firebird ile FIFO Hesaplama Nasıl yapılır? klavye 0 334 17-08-2023, Saat: 12:33
Son Yorum: klavye
  [ÇÖZÜLDÜ] FB 2.5 Alan tipi değiştirme mcuyan 0 297 28-07-2023, Saat: 02:43
Son Yorum: mcuyan



Konuyu Okuyanlar: 1 Ziyaretçi