Satır Güncelleştirme için Bulunamadı...

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
eliteprogrammer
Üye
Mesajlar: 12
Kayıt: 15 Ara 2005 03:52

Satır Güncelleştirme için Bulunamadı...

Mesaj gönderen eliteprogrammer »

s.a.
query ile aldığım bir kayıt ile ilgili düzenleme yaptığımda yani edit ve sonra post yaptığımda bu hatayı alıyorum. unique bir alanım var. tüm bilgiler doğru fakat yinede hata veriyor. nasıl giderebilirim.
yardımlarınız için tşk.
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Mesaj gönderen Lost Soul »

erişimde kullandığın nesneyi (INTERBASE,IBX,FBIPLUS]. hatanin içeriğini ve tablonun yapısını verirsen daha iyi yardımcı olabiiliriz.
kolay gelsin.
eliteprogrammer
Üye
Mesajlar: 12
Kayıt: 15 Ara 2005 03:52

c

Mesaj gönderen eliteprogrammer »

Ado nesnesi kullanıyorum. sql server veritabanım.

Aldığım Hata :

Satır güncelleştirme için bulunamıyor. Son Okunduğundan bu yana bazı değerler değiştirilmiş olabilir.

edit yapıp kaydetmeye çalıştığımda aldığım hata bu.

Tablonun Yapısı :

unique bir alan primary key
kimlik int INC. indexli
diğerleri ise int ve varchar alanlar.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Yanlış hatırlamıyorsam bu bir bug gibi birşeydi ve ilgili delphi sürüm güncelleme paketi yükleyince düzeliyordu.Eğer kullandığınız sürüm için güncelleme paketi varsa yükleminizi öneririm.
Volkan KAMADAN
www.polisoft.com.tr
eliteprogrammer
Üye
Mesajlar: 12
Kayıt: 15 Ara 2005 03:52

Mesaj gönderen eliteprogrammer »

kullandığım delphi 7. güncelleme aradım fakat bulamadım. yada başka bir yöntemi varmı acaba ?
Kullanıcı avatarı
dynamo
Üye
Mesajlar: 96
Kayıt: 21 Haz 2005 02:05
Konum: istanbul

Mesaj gönderen dynamo »

ADO'da bu tarz hatalar birkaç nedenden kaynaklanır:

1-)Query sorgusunda distinct kullanılmışsa bu hatayı verir.

2-)Query sorgusu from'dan sonra birden fazla tablo adı içerirse bu hatayı verir." * from Tablo1,Tablo2 where " gibi.

bu gibi durumlarda Edit,Post,Delete işlemini ayrı bir ADOQuery'de yaparsan hata vermez.mesela dbgrid, qrysatis'a bağlı.qrysatis sorgusu içinde "distinct" ifadesi var.dbgridten seçtiğim kaydı silmek için qrysatis.Delete dersem hata verir.

Kod: Tümünü seç

---------------------------
Debugger Exception Notification
---------------------------
Project Ticari.exe raised exception class EOleException with message 'Anahtar sütun bilgileri yetersiz veya yanlış. Güncelleştirme çok fazla satırı etkiledi'. Process stopped. Use Step or Run to continue.
---------------------------
OK   Help   
---------------------------

kaydı silmek için ADOQuery6 diye ayrı bir query kullanıyorum.ardından qrysatis'ı güncelliyorum:

Kod: Tümünü seç

   ADOQuery6.Close;
   ADOQuery6.SQL.Clear;
   ADOQuery6.SQL.Add('delete from SATIS where URUNKOD='''+qrysatis.FieldByName('URUNKOD').AsString+'''');
   ADOQuery6.ExecSQL;
   qrysatis.Requery();
post yada edit yaptığın Query nin sorgusunu verirsen hatanın kaynağını bulabiliriz.

kolay gelsin.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Satır Güncelleştirme için Bulunamadı...

Mesaj gönderen mrmarman »

Selam.
[b]@eliteprogrammer[/b] yazdı:unique bir alanım var. tüm bilgiler doğru fakat yinede hata veriyor.
- Forumda daha önce bir kaç defa bu hatanın sebeplerine değindim (unique alanım var ifadenizden bunlardan birini gördünüzü varsayıyorum) fakat gerekçesini ifade edememişim sanırım.

- Bu Unique alanı da sorgunuza dahil ederek görüntülerseniz bu sorunla karşılaşmazsınız.

- Görntülerseniz derken, SQL satırında dahil edin ama TDBgrid vb. hangi bileşen kullanıyorsanız orada sütun gizleyin.

- Gerekçesini şöyle özetleyim,

Kod: Tümünü seç

SELECT Adi, Soyadi FROM Tablo
dediğimizde alınan liste

Kod: Tümünü seç

Muharrem ARMAN
Mustafa ŞİMŞEK
Ali VELİ
Ali KEMAL
listelenmiş diyelim...

Kullanıcı bu liste varken bir tane daha Ali VELİ girdi. Buna müsade edilir fakat, yeni listede Ali VELİ sayısı iki tane olunca ve sıralama yönü değişirse SQL bunun hangisi olduğuna karar veremiyor. Kullanıcı Ali VELİ üzerinde değişikliğe direkt EDIT metoduyla düzeltmeye çalışırsa bu aldığınız hata ile karşılaşılıyor.

- Yapmanızı önerdiğim şey ise, Unique alanınız mesela KayıtNo olsun.

Kod: Tümünü seç

SELECT KayitNo, Adi, Soyadi FROM Tablo
şeklinde sorgumuzu kurarsak, ACTIVE dedikten sonra düzeltilmiş kayıtla birlikte görünen şekli şöyle olur..

Kod: Tümünü seç

1 Muharrem ARMAN
2 Mustafa ŞİMŞEK
3 Ali VELİ
4 Ali VELİ
- Sıradaki yapılacak işlem

Kod: Tümünü seç

DBGrid1.Colums[0].Visible := false;
gibi bir komutla ilk KayıtNo isimli sütunu sorgu açıkken gizlemeye giderseniz (Bunu her seferinde yapmaktansa, eğer bir DBGrid sürekli görüntüleme yapıyorsa, sorgu nesnenizin OnAfterOpen olayına yerleştirebilirsiniz.) , bu satır da sorgularda değerlendirmeye alınacak ve iki tane "Ali VELİ"den hangisinin hangi kayda ait olduğu tespiti SQL tarafından mümkün olacaktır.

- Bir de mümkünse seyrek de olsa kullanıcının uyguladığı bazı adımlardan sonra SorguQuery.ReQuery; komutuyla listeyi tazelerseniz (requery SQL cümlesini bozmadan yineleme yapar) faydası dokunur.

- Deneyip sonucu bildirin. Umarım ifade edebilmişimdir. :idea:
En son mrmarman tarafından 18 Nis 2007 11:11 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Resim
Resim ....Resim
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7586
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

a.s.

şu mesajlara da bir bak :

viewtopic.php?t=346

viewtopic.php?t=395

Kolay gelsin.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Satır Güncelleştirme için Bulunamadı...

Mesaj gönderen sabanakman »

eliteprogrammer yazdı:s.a.
query ile aldığım bir kayıt ile ilgili düzenleme yaptığımda yani edit ve sonra post yaptığımda bu hatayı alıyorum. unique bir alanım var. tüm bilgiler doğru fakat yinede hata veriyor. nasıl giderebilirim.
yardımlarınız için tşk.
Hala bir çözüm bulunamadıysa başımdan geçen bir olaydan ötürü bu cevabı yazıyorum :wink: Eğer bu veri tabanında trigger kullanıyorsan gelen hata normaldir. Kendisi aslında hata değildir fakat delphi bu uyarıyı exception olarak algıladığından hata oluşmaktadır. Bu durumu ortadan kaldırmak için SQL Server triggerlarında ilk ve son satıra bir değer ayarlaman gerekmektedir.

Kod: Tümünü seç

BEGIN
  set nocount on
  .
  .
  .
  set nocount off
END
Eğer trigger kodlarını bu set nocount on ve set nocount off kodları arasına alırsan bu sorundan kurtulacaksın diye umuyorum. Çünkü bende öyle olmuştu :) .
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
eliteprogrammer
Üye
Mesajlar: 12
Kayıt: 15 Ara 2005 03:52

Re: Satır Güncelleştirme için Bulunamadı...

Mesaj gönderen eliteprogrammer »

mrmarman yazdı:Selam.
[b]@eliteprogrammer[/b] yazdı:unique bir alanım var. tüm bilgiler doğru fakat yinede hata veriyor.
- Forumda daha önce bir kaç defa bu hatanın sebeplerine değindim (unique alanım var ifadenizden bunlardan birini gördünüzü varsayıyorum) fakat gerekçesini ifade edememişim sanırım.

- Bu Unique alanı da sorgunuza dahil ederek görüntülerseniz bu sorunla karşılaşmazsınız.

- Görntülerseniz derken, SQL satırında dahil edin ama TDBgrid vb. hangi bileşen kullanıyorsanız orada sütun gizleyin.

- Gerekçesini şöyle özetleyim,

Kod: Tümünü seç

SELECT Adi, Soyadi FROM Tablo
dediğimizde alınan liste

Kod: Tümünü seç

Muharrem ARMAN
Mustafa ŞİMŞEK
Ali VELİ
Ali KEMAL
listelenmiş diyelim...

Kullanıcı bu liste varken bir tane daha Ali VELİ girdi. Buna müsade edilir fakat, yeni listede Ali VELİ sayısı iki tane olunca ve sıralama yönü değişirse SQL bunun hangisi olduğuna karar veremiyor. Kullanıcı Ali VELİ üzerinde değişikliğe direkt EDIT metoduyla düzeltmeye çalışırsa bu aldığınız hata ile karşılaşılıyor.

- Yapmanızı önerdiğim şey ise, Unique alanınız mesela KayıtNo olsun.

Kod: Tümünü seç

SELECT KayitNo, Adi, Soyadi FROM Tablo
şeklinde sorgumuzu kurarsak, ACTIVE dedikten sonra düzeltilmiş kayıtla birlikte görünen şekli şöyle olur..

Kod: Tümünü seç

1 Muharrem ARMAN
2 Mustafa ŞİMŞEK
3 Ali VELİ
4 Ali VELİ
- Sıradaki yapılacak işlem

Kod: Tümünü seç

DBGrid1.Colums[0].Visible := false;
gibi bir komutla ilk KayıtNo isimli sütunu sorgu açıkken gizlemeye giderseniz (Bunu her seferinde yapmaktansa, eğer bir DBGrid sürekli görüntüleme yapıyorsa, sorgu nesnenizin OnAfterOpen olayına yerleştirebilirsiniz.) , bu satır da sorgularda değerlendirmeye alınacak ve iki tane "Ali VELİ"den hangisinin hangi kayda ait olduğu tespiti SQL tarafından mümkün olacaktır.

- Bir de mümkünse seyrek de olsa kullanıcının uyguladığı bazı adımlardan sonra SorguQuery.ReQuery; komutuyla listeyi tazelerseniz (requery SQL cümlesini bozmadan yineleme yapar) faydası dokunur.

- Deneyip sonucu bildirin. Umarım ifade edebilmişimdir. :idea:

dediğiniz gibi oldu. şuan herhangi bir hata mesajı almıyorum. ilgilenenlere çok teşekkür ederim
emrahgs
Üye
Mesajlar: 110
Kayıt: 08 Tem 2008 06:25
Konum: Antalya

Re: Satır Güncelleştirme için Bulunamadı...

Mesaj gönderen emrahgs »

Master Detail Bağlı Datasetlerde
Dataset.Delete İşleminden sonra bu hata alındığında

sorun trigerlardan da kaynaklanabiliyor
bunu durumda
triggerlara
set nocount on ... set nocount off
eklenirse sorun düzeliyor.

bunca yıl sonra belki birinin işine yarar diye yazdım. :)
Cevapla