Record not found or changed by another user

Diğer veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
eren2000
Üye
Mesajlar: 126
Kayıt: 26 Haz 2003 06:40
Konum: aksaray
İletişim:

Record not found or changed by another user

Mesaj gönderen eren2000 »

Record not found or changed by another user

MySql 3.23.42 kullanıyorum.
Delphi6.0 kullanıyorum. dbexpress ile bu işlemi yapmaya kalktım. Tabiki Delphi 6.0 güncellemesi yüklü.

Bu sorunla daha önce karşılaşanlar olmuş çeşitli cevaplar var ama ben sorunu çözemedim. Hala devam ediyor.

Yapmak istediğim olay şu idi.
Sicil ve hareket table ı var.
Sicil tableından seçilen kayıt numarasına göre hareket tableındaki sahalar edit modunda açılarak update edilecek.

Fakat benim kullandığım TSQLClientdataset ve TClientdataset buna izin vermedi.
Cursor döndürmüyormuş delphi öyle diyor.

Çok basit yöntemle hareket tableında uyan kayıtları geçici dosyaya yazdırdım. Buradan sırasıyla okutup hareket tableına locate ile konumlanıp edit yaptım. Yukarıdaki hatayı aldım.
Mantık hatasımı var acaba.
Hareket tableından bir sorgu ile bazı kayıtları elde ediyorum.
while not sorgu.eof do
begin
...
sorgu.next;
end;

yapıyorum.
begin end arasına sorguda kullandığım hareket tableını edit post ve applyupdates yapıyorum. Bu hatalarla karşılaşıyorum.
İyi bir fikri ya da çözümü olan lütfen yazsın.Teşekkürler
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Mesaj gönderen ender_arslanturk »

Merhaba

Döngüde komutlar bir kayıttaki record numarasını bulamamaktadır. Eğer döngü içindeki komutlarda filtreleme veya başka table sorgulama işlemin varsa mesela table1 deki 15 numaralı kayıtı table2 de sorgulatabilirsin ki table birde bu record yani sayısal numara olmadığında bu gibi hataları alabilirsin.

Saygılar,
Kullanıcı avatarı
Fatih!
Kıdemli Üye
Mesajlar: 1172
Kayıt: 26 Kas 2004 10:46
Konum: Malatya
İletişim:

Mesaj gönderen Fatih! »

eren2000
Üye
Mesajlar: 126
Kayıt: 26 Haz 2003 06:40
Konum: aksaray
İletişim:

teşekkürler fakat sorun devam ediyor

Mesaj gönderen eren2000 »

Herkese teşekkürederim. Fakat sorun devam ediyor.
Aynı işlemi bde ile oracle da yaptığımda hiç sorun yaşamadım.
Delphi4 kullanıyordum. Oracle 8.1.5 de böyle bir problem yaşamadım.
Problemin aslı şu :
Bir table dan sorgu ile bazı sahaları seçiyorum. Ve bu sahaları table da edit ediyorum. Bu hata veriyor.
Aynı işlemi sql komutuyla update ederken de hata veriyor.
Burada döngüde olan sql farklı diğer yazdığım sql komutu farklı.
Bilmem anlatabildim mi? Acil bu sorunu çözmem lazım. Teşekkürler...
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Mesaj gönderen ender_arslanturk »

Merhaba

Kullandığın kodları tam olarak yazabilirsen hatanın nerde olduğu konusunda bilgiler paylaşılabilir. Birde döngü esnasında like gibi sql sorgusu kullandıysan da bu hatayı alabilirsin....

Saygılar,
eren2000
Üye
Mesajlar: 126
Kayıt: 26 Haz 2003 06:40
Konum: aksaray
İletişim:

Mesaj gönderen eren2000 »

Değerli kardeşlerim,
Kullandıklarımı yazayım ve nasıl bir kod oluşturdum onu da yazayım.
mysql 3.23.42 ve Delphi 6.0 ve dbexpress kullanıyorum.Delphi 6.0 ım update li.
TSQLConnection, TSQLDataset, TDataSetProvider ve
TClientDataset,TSQLClientdataset kullanıyorum bileşen olarak.

Yapılacak işlem şu.

1.sql

select * from tahakkuk
where (sicilno=:sicilno) and (kalantutar>0)


kod ise şöyle

while not sql1.eof do
begin
tahakkuk.edit;
tahakkukbakiye.value:=bakiye;
tahakkuk.post;
tahakkuk.applyupdates(-1);
sql1.next;
end;

gelen hata cursor not returned gibi birşeydi.
Diğer işlemlerde de başlıkta yazdığım hatayı alıyorum.

Bütün forumlara ve mysql sitesine baktım. Diyorlarki
primary key tanımla autoinc olsun.
2 den fazla numerik saha kullanma
date tipi fieldlar için timestamp kullan.
Bunları diğer arkadaşlarımız da sağolsunlar yazmışlar ama bu çözüm olmuyor.
Delphinin helpinde de tSqlclient ın cursor döndürmeyeceği yazıyor.
Bu işin başka bir çözüm yolu olmalı.
Sağolun...
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Mesaj gönderen ender_arslanturk »

Merhaba

While döngüünden önce SQL1.First; yok acaba open dediğin zaman son kayıta otomatik gider birde seçili kayıtların başına gitmediğin için böyle bir hata alabiliyor olabilirmisin ....


Saygılar,
eren2000
Üye
Mesajlar: 126
Kayıt: 26 Haz 2003 06:40
Konum: aksaray
İletişim:

Mesaj gönderen eren2000 »

yazmayı unutmuşum kodda var
first yapıyor.
ondan olduğunu sanmıyorum.
Hatta şöyle uzun ve garantili bir yöntem uyguladım.
Queryden aldığım sonuçları geçiçi bir table a yazdırdım.
Bu table ı döngüye aldım.
Döngünü arasında tahakkuk table nı edit post ve applyupdates yaptım. ama işte bu hatayı verdi.
Bir anlam veremedim.
İşin içinde çıkamadım bir türlü

Hocam eğer msn kullanıyorsanız mailinizi verin de ekleyeyim. Forumda konuşup boş yere forum sayfalarını işgal etmeyelim.
Eğer sorunu çözersek burada yayınlarız.
Ama bana MySQL ile ilgili bir sorun gibi geliyor. Çünkü aynı sorun bir çok kullanıcının başına gelmiş
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Mesaj gönderen ender_arslanturk »

Merhaba

Msn daveti alırsınız kaydettim ama sorunu aslında adım adım burda tartışılması bilgi adına daha faydalı olduğunu düşünüyorum....

Kod: Tümünü seç

SQL1.First;
while not sql1.eof do 
begin 
    ShowMessage('');
    if SQL1Sicilno.Text<>'' then
    begin
         tahakkuk.edit; 
         tahakkukbakiye.value:=bakiye; 
         tahakkuk.post; 
         tahakkuk.applyupdates(-1); 
         sql1.next; 
   end;
end; 
SQL1 Componentinde birde bu şekilde deneyebilirmisiniz.... Eğer if kontrolünde sorun çakırmaz ise SQL1 e bir dbgrid bağlayıp döngüde her seferini bir inceleyebilirmisiniz....

Saygılarımla, Başarılar ....
eren2000
Üye
Mesajlar: 126
Kayıt: 26 Haz 2003 06:40
Konum: aksaray
İletişim:

Mesaj gönderen eren2000 »

table ı filtrelemeyi denemedim. Bir de bu yöntemi deneyeceğim. Ama tableı filtrelemek client server çalışan bir uygulamada ne kadar çözüm sağlar veya kargaşaya yol açarmı bilemiyorum. Bunu da deneyeceğim.
Bu sorunu aşmanın yolunu bulacağım.
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Mesaj gönderen ender_arslanturk »

Merhaba

Query ile sorgulamanızı yaptınız diyelim. Mesela 1 den 1000 e kadar olan kayıtlarda 50 den büyük olan ve 500 den küçük olan kayıtları sorgu ile seçtikten sonra, tekrar sadece bu seçilenlere filter metodu uygularsanız, 50 den büyük ve 500 den küçükler arasındakilere sonuç alabilirsiniz. Bu da dikkatinizden kaçmasın.... :idea:

Saygılar,
doganzorlu
Kıdemli Üye
Mesajlar: 395
Kayıt: 22 Tem 2004 09:15
Konum: İzmir
İletişim:

Mesaj gönderen doganzorlu »

Selam,

Tabloya tahakkuk bakiyeden erişiyor o nedenle siz onu değiştirince aklı karışıyor muhtemelen. Oracle da tabloda bir primatu key yoksa bu cursor, rownum u kullanıyor yanlış hatırlamıyorsam o nedenle orada hata almıyor olabilirsiniz. Tabloya başka bir uniq alan ekleyiniz...
Doğan Zorlu, İzmir

------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
Kullanıcı avatarı
emrahkaraarslan
Üye
Mesajlar: 243
Kayıt: 21 Haz 2005 12:28
Konum: Trabzon

Mesaj gönderen emrahkaraarslan »

table laerı kapalı tutup formların activate lerine açma komutu verirsen sorunun hallolacağını düşünüyorum çünkü refresh edilidğinde bu problem çoğu kez düzeliyor sonunda ben böyle yaptım artık o sorunla karşılaşmıyorum
Allah'ım bana değiştirebileceklerimi değiştirme değiştiremeyeceklerimi kabullenme ve aradaki farkı anlayabilme yeteneği ver
eren2000
Üye
Mesajlar: 126
Kayıt: 26 Haz 2003 06:40
Konum: aksaray
İletişim:

Sorun halledildi

Mesaj gönderen eren2000 »

Herkesin ilgisi ve yardım etme isteği için çok teşekkür ederim. allah hepinizden razı olsun. Sorun çözüldü.
Mysql in kendi sitesinde de bu forumda da belirtildiği gibi table açarken otomatik bir primary key oluşturuyor. Bu primary key aynı zamanda otomatik artan olan bir saha. Böylece yapıldığında sorun kendiliğinden çözülüyor. Başka bir arkadaşımız aynı sorunu MSSQL de yaşamış ben bu sorunu yaşayınca hemen forumu araştırdım. Bunu denedim fakat hatalı uygulamamdan dolayı sorunu o gün çözememiştim. Mysql sitesine baktığımda orada da üç yöntemden bahsediliyordu. Birinci sırada bu yöntem vardı.
Bu forumu hazırlayanlardan,katılanlardan,bu işe gönül veren ve emek harcayan herkesten Allah razı olsun.
Teşekkürler, iyi çalışmalar...
Cevapla