Tüm Platformlar için Hızlı Uygulama Geliştirme Kitabı... Delphi
Ön Sipariş Talebinde Bulunan Üyelerimiz
Sipariş Talebinde Bulunan Üyelerimiz

Konuyu Paylaş : facebook gplus twitter

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ı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlDelphi 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ı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlAldığı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ı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Olfdquery 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ı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Olalternatif 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);
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  firebird forum klavye 0 147 15-11-2018, Saat: 16:24
Son Yorum: klavye
  Firebird Yedekleme-Geri Yükleme Aracı ihalilcoban 5 589 11-11-2018, Saat: 13:53
Son Yorum: mcuyan
  Firebird External Table Storage anemos 4 422 05-10-2018, Saat: 22:04
Son Yorum: anemos
  Yeni Başlayanlar İçin Firebird Kurulumu ve Delphi FireDAC Ayarları DelphiCanR 18 2.860 12-09-2018, Saat: 11:54
Son Yorum: rmzgenius
  Firebird Pivot Sorgu klavye 6 1.309 14-08-2018, Saat: 22:39
Son Yorum: anemos



Konuyu Okuyanlar: 1 Ziyaretçi