Firedac TFDTable ile sql_no_data hatası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
mkucuktepe
Üye
Mesajlar: 13
Kayıt: 30 Oca 2021 10:55

Firedac TFDTable ile sql_no_data hatası

Mesaj gönderen mkucuktepe »

merhaba Arkadaşlar ; Yaptığım Programda 1 ana tabloya bağlı yaklaşık 20 tablo var şu ana kadar her şey güzel gidiyordu. Kullandığım FireDac -TFDTable. Fakat son bir haftadır ana tabloyu edit leyip veri değiştirip post ettiğimde "firedac [firedac][dapt]-400. update command updated [0] instead of [1] record" -"SQL_NO_DATA" hatası alıyor değişiklikleri de kaydetmiyor. sorunun gittikçe farklı alanlarda da baş gösteriyor veri tabanının içerisinde (Sql Server) tabloda bir kaç alanı hesaplanabilir yaptım son bir gündür o alada da hata veriyor. Sorun nedir anlamadım.
Yardımınız için şimdiden teşekkür ederim.
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: Firedac TFDTable ile sql_no_data hatası

Mesaj gönderen ertank »

Merhaba,

Çok az bilgi vermişsiniz. Detayları da paylaşabilir misiniz?
mkucuktepe yazdı: 21 Mar 2024 10:48 1 ana tabloya bağlı yaklaşık 20 tablo var
Diğer 20 tablo aynı form üzerinde ana tabloya master-detail ilişki ile bağlı mı?
mkucuktepe yazdı: 21 Mar 2024 10:48 Kullandığım FireDac -TFDTable
Şahsen FDQuery kullanmanızı tavsiye ederim. Sadece gerekli kayıtları ekranda gösterin. FDTable tüm tablo kayıtlarını gösterir. İlerleyen zamanda performans açısından kötü etkilenirsiniz.
mkucuktepe yazdı: 21 Mar 2024 10:48 Fakat son bir haftadır ana tabloyu edit leyip veri değiştirip post ettiğimde "firedac [firedac][dapt]-400. update command updated [0] instead of [1] record" -"SQL_NO_DATA" hatası alıyor
Ana tablo dediğiniz tablonun yapısını indeks detayı ile bilmeden ve hangi kolonda ne değişiklik (eski veri, yeni veri) yaptığınızı bilmeden bu konuda birşey söylemenin çok doğru olmayacağını düşünüyorum. Bahsettiğiniz hata normalde kayıt silme zamanında karşılaşılan bir hatadır. Zaten daha önce silinmiş bir kaydı yeniden silmeye çalıştığınızda oluşur. Detay bilgiler olmadan, tamamen tahmine dayalı olarak: Diğer 20 tablo master-detail ilişkide ve değişiklik sebebiyle olaylara bağlı şekilde bir silme işlemi tetikleniyor olabilir mi?
mkucuktepe yazdı: 21 Mar 2024 10:48 sorunun gittikçe farklı alanlarda da baş gösteriyor veri tabanının içerisinde (Sql Server) tabloda bir kaç alanı hesaplanabilir yaptım son bir gündür o alada da hata veriyor.
Öncelikle ne hata alıyorsunuz? Farklı bir hata olduğunu düşünüyorum. Eğer uygulama içinde FDQuery içinde calculated field kullanıldı ise OnCalculate olayındaki kodlarınızı görmeden, eğer veritabanı seviyesinde tablo içinde hesaplanan kolon kulandı iseniz tablo yapısını bilmeden birşey söylemek zor.
mkucuktepe
Üye
Mesajlar: 13
Kayıt: 30 Oca 2021 10:55

Re: Firedac TFDTable ile sql_no_data hatası

Mesaj gönderen mkucuktepe »

Diğer 20 tablo aynı form üzerinde ana tabloya master-detail ilişki ile bağlı mı?
Evet Master-detail ilişki ile bağladım.
Şahsen FDQuery kullanmanızı tavsiye ederim. Sadece gerekli kayıtları ekranda gösterin. FDTable tüm tablo kayıtlarını gösterir. İlerleyen zamanda performans açısından kötü etkilenirsiniz.
Malesef yaklaşık kırk tabloyu FDQuery ile değiştireceğim gibi
Ana tablo dediğiniz tablonun yapısını indeks detayı ile bilmeden ve hangi kolonda ne değişiklik (eski veri, yeni veri) yaptığınızı bilmeden bu konuda birşey söylemenin çok doğru olmayacağını düşünüyorum. Bahsettiğiniz hata normalde kayıt silme zamanında karşılaşılan bir hatadır. Zaten daha önce silinmiş bir kaydı yeniden silmeye çalıştığınızda oluşur. Detay bilgiler olmadan, tamamen tahmine dayalı olarak: Diğer 20 tablo master-detail ilişkide ve değişiklik sebebiyle olaylara bağlı şekilde bir silme işlemi tetikleniyor olabilir mi?
Ana tablomda otomatik artan inx_no değişkenim var. zaman zaman bir kayıtta değişiklik yapılması gerekiyor "Bekar/Evli-Çocuksuz/Çocuklu" gibi ben bu değişikliği yapmaya çalıştığım zaman "Project suru_server.exe raised exception class EMSSQLNativeException with message '[FireDAC][Phys][ODBC][msodbcsql17.dll] SQL_NO_DATA'." hatası alıyorum ve şu ana kadar silme işlemleri yapmadım hiç bir tabloda.
Öncelikle ne hata alıyorsunuz? Farklı bir hata olduğunu düşünüyorum. Eğer uygulama içinde FDQuery içinde calculated field kullanıldı ise OnCalculate olayındaki kodlarınızı görmeden, eğer veritabanı seviyesinde tablo içinde hesaplanan kolon kulandı iseniz tablo yapısını bilmeden birşey söylemek zor.
Calculated alan sql server tarafında kullanıyorum, program tarafında değil programda calculated alan kullanmıyorum
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2357
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Firedac TFDTable ile sql_no_data hatası

Mesaj gönderen freeman35 »

Transaction kontrolü yaptın mı? master kaydetmeden detail i kaydetmeye çalışmak gibi, firedac seçeneklerinde yanılmıyorsam Autocommit diye seçenek vardı. inx_no dediğinde muhtemelen prkey olarak kullanıyorsun, bunu guid de yapabilirdin.
debug edebiliyorsan, nerede hata aldığını yani hangi tabloda hata verdiğini bul, sonrada beforepost eventinde field değerlerini kontrol et.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: Firedac TFDTable ile sql_no_data hatası

Mesaj gönderen ertank »

mkucuktepe yazdı: 22 Mar 2024 03:16 Ana tablomda otomatik artan inx_no değişkenim var. zaman zaman bir kayıtta değişiklik yapılması gerekiyor "Bekar/Evli-Çocuksuz/Çocuklu" gibi ben bu değişikliği yapmaya çalıştığım zaman "Project suru_server.exe raised exception class EMSSQLNativeException with message '[FireDAC][Phys][ODBC][msodbcsql17.dll] SQL_NO_DATA'." hatası alıyorum ve şu ana kadar silme işlemleri yapmadım hiç bir tabloda.
Hata incelendiğinde zaten silinmiş bir veri ile işlem yapılması olarak gözüküyor.
Bu durum en azından aşağıdaki şekillerde oluşabilir.
- CachedUpdates kullanımında silinmiş kayıt üzerinde işlem yapma ile
- CachedUpdated kullanılmasa dahi A kullanıcısı kayıt siler, B kullanıcısı değişiklik yapmaya çalışırsa.
- İlgili tablodaki trigger içinde yapılan bir işlem dolayısıyla

Aklıma gelmeyen başka sebepler de olabilir. Bazı kişiler hiç değişiklik yapmayıp eski kaydı silip yenisini ekleme kaydetme yolunu seçiyorlar. Bu gibi kullanım şekilleri de bir noktada soruna yol açabilir.

Hata tekrar edilebiliyor ise, DEBUG profili seçili iken F9 ile projenizi çalıştırıp hata oluşmasını sağlayın. Delphi hata oluştuğunda sizi durdurur. "Break" butonunu tıklayıp ekranda Stack Trace penceresini inceleyin. Hata oluşmadan önce çalışan prosedür ve fonksiyonlar listelenir o pencerede. Sorunu tetikleyen bir olay bulabilirsiniz belki.

Diğer bir tavsiye de FireDAC loglamasını kullanın. Böylece sizin unuttuğunuz bir silme tetikleniyor ise hata oluşmadan önce loglara silme SQL komutu yazılı olacaktır.
mkucuktepe
Üye
Mesajlar: 13
Kayıt: 30 Oca 2021 10:55

Re: Firedac TFDTable ile sql_no_data hatası

Mesaj gönderen mkucuktepe »

Teşekkür ediyorum çok saolun
Cevapla