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 Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.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ı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.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ı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.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ı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.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);
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.

Sadece Hobiciyim..
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Firebird Trigger'a parametre gönderme esistem 1 653 3 saat önce
Son Yorum: Aktolgali
  view tabloya id alan Aktolgali 6 197 15-09-2019, Saat: 23:16
Son Yorum: Aktolgali
  Firebird ile aynı server içindeki iki ayrı database deki tablolar arasında select serkansirin001@gmail.com 6 316 03-09-2019, Saat: 01:05
Son Yorum: mcuyan
  Visual Studio Code kullanıcıları için Firebird Eklentisi rmzgenius 2 360 31-05-2019, Saat: 10:32
Son Yorum: edo
  Firebird Database Oluşturma SercanTEK 6 689 30-05-2019, Saat: 09:18
Son Yorum: rmzgenius



Konuyu Okuyanlar: 1 Ziyaretçi