Satır Güncelleştirme için Bulunamadı...
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 12
- Kayıt: 15 Ara 2005 03:52
Satır Güncelleştirme için Bulunamadı...
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.
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.
-
- Üye
- Mesajlar: 12
- Kayıt: 15 Ara 2005 03:52
c
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.
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.
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
www.polisoft.com.tr
-
- Üye
- Mesajlar: 12
- Kayıt: 15 Ara 2005 03:52
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.
kaydı silmek için ADOQuery6 diye ayrı bir query kullanıyorum.ardından qrysatis'ı güncelliyorum:
post yada edit yaptığın Query nin sorgusunu verirsen hatanın kaynağını bulabiliriz.
kolay gelsin.
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();
kolay gelsin.
Re: Satır Güncelleştirme için Bulunamadı...
Selam.
- 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,
dediğimizde alınan liste
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.
şeklinde sorgumuzu kurarsak, ACTIVE dedikten sonra düzeltilmiş kayıtla birlikte görünen şekli şöyle olur..
- Sıradaki yapılacak işlem 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.
- 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.[b]@eliteprogrammer[/b] yazdı:unique bir alanım var. tüm bilgiler doğru fakat yinede hata veriyor.
- 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
Kod: Tümünü seç
Muharrem ARMAN
Mustafa ŞİMŞEK
Ali VELİ
Ali KEMAL
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
Kod: Tümünü seç
1 Muharrem ARMAN
2 Mustafa ŞİMŞEK
3 Ali VELİ
4 Ali VELİ
Kod: Tümünü seç
DBGrid1.Colums[0].Visible := false;
- 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.

En son mrmarman tarafından 18 Nis 2007 11:11 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Re: Satır Güncelleştirme için Bulunamadı...
Hala bir çözüm bulunamadıysa başımdan geçen bir olaydan ötürü bu cevabı yazıyorumeliteprogrammer 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.

Kod: Tümünü seç
BEGIN
set nocount on
.
.
.
set nocount off
END

Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
-
- Üye
- Mesajlar: 12
- Kayıt: 15 Ara 2005 03:52
Re: Satır Güncelleştirme için Bulunamadı...
mrmarman yazdı:Selam.
- 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.[b]@eliteprogrammer[/b] yazdı:unique bir alanım var. tüm bilgiler doğru fakat yinede hata veriyor.
- 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,
dediğimizde alınan listeKod: Tümünü seç
SELECT Adi, Soyadi FROM Tablo
listelenmiş diyelim...Kod: Tümünü seç
Muharrem ARMAN Mustafa ŞİMŞEK Ali VELİ Ali KEMAL
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.
şeklinde sorgumuzu kurarsak, ACTIVE dedikten sonra düzeltilmiş kayıtla birlikte görünen şekli şöyle olur..Kod: Tümünü seç
SELECT KayitNo, Adi, Soyadi FROM Tablo
- Sıradaki yapılacak işlemKod: Tümünü seç
1 Muharrem ARMAN 2 Mustafa ŞİMŞEK 3 Ali VELİ 4 Ali VELİ
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.Kod: Tümünü seç
DBGrid1.Colums[0].Visible := false;
- 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.
dediğiniz gibi oldu. şuan herhangi bir hata mesajı almıyorum. ilgilenenlere çok teşekkür ederim
Re: Satır Güncelleştirme için Bulunamadı...
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.
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.
