"At end of table" Hatası

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

"At end of table" Hatası

Mesaj gönderen serbek_tr »

Merhabalar kusura bakmayın programlama konusunda yeniyim biraz bu hata veritabanı mı yoksa programlama kısmınamı yazılırdı bilmiyorum ama veri tabanı işleminde karşılaştım o yüzden buraya yazdım.

yaptığım ufak bir program master detail çalışıyor detail olan tablom chache update çalışıyor işlemleri yaptıktan sonra commitupdates komutuyla işlemi sonladırıyorum ama bana At end of table diye bir hata veriyor bu mantığın aynısı başka pencerelerdede geçerli başka tablelerle onlarda olmuyor ayrıca bu hatayı verdikten sonra master kısmı kayıtı gerçekleşiyor ancak detail gerçekleşmiyor.

bu aradada şöyle bir denemede bulundum ve şunu gördüm insert olayından sonra table state yi kontrol edeyim dedim insert komutu verildiği halde daha sonra ki adımlar yani tabledeki değişkenlere atadığım değerler işlemiyor yada post komutu işlemiyor. ve o kaydı edit ettiğimde sorun olmadan işlemi yapıyor.

nasıl çözebilirim
onaydin

Mesaj gönderen onaydin »

Muhtemelen sql cümlenizde bir hata var. Cümlenizi yazablirseniz..
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

Arkdaşım ister Insert ister Edit Modunda olsun iki işleminde kaydını yapan kısım aşagıda. Tek bir farkları var eğer işlem edit ise ve bu edit işlemi ile daha önceden kayıtlı proses gurubu yerine başka bir gurub seçilecekse var olan gurup kayıtlarını siliyor ve yenisini tekrar yazıyıyor
yani **** lar içine aldığım kısım edit sırasında işliyor edit değilse işlemiyor ve işte bu kodlar insert te bahsettiğim hatayı veriyor ama ama yeni kayıt değil direk edit de yine olmayan kayıdı açıyor ve işlem gerçekleşiyor bu arada acemiliğimize verin kolay diye paradox kullanıyorum hani database ne kullanıyorsun diye soracak olursanız diye söylüyorum bundan daha açık yazamam


Kod: Tümünü seç

procedure TInputF.kayitClick(Sender: TObject);
Var
dizi,ProsesEkle :String;
Bul : Integer;

Begin
Application.CreateForm(TWaitF, WaitF);
 WaitF.WaitPanel.Caption:='Lütfen Bekleyin... Kayıt Diske Yazılıyor.';
 WaitF.Show;
 WaitF.Update;
**************************
   If (DataModule1.DyeTbl.State In [DsEdit]) And (EskiProses<>ProsesCombo.Text)Then
   While True Do
   Begin
     If DataModule1.DyeDtlTbl.RecordCount<>0 Then
       DataModule1.DyeDtlTbl.Delete
     Else Break
   End;
***************************
   Dizi:= ProsesCombo.Text;
   While True Do
   Begin
     Bul := Pos('+',Dizi);
     If Bul =0 Then
     Begin
       DyeForm.DyeDtlTblInsert(Sender);
       DataModule1.DyeDtlTblBaglac.AsInteger:=
       DataModule1.dyetblNO.Value;
       DataModule1.DyeDtlTblProsesAdi.Value:= Dizi;
       DyeForm.DyeDtlTblPost(Sender);
       Break;
     End
     Else
     Begin
       ProsesEkle :=Copy(Dizi,1,Bul-2);
       Dizi := Copy(Dizi,Bul+2,Length(Dizi)-Bul-1);
       DyeForm.DyeDtlTblInsert(Sender);
       DataModule1.DyeDtlTblBaglac.AsInteger:= DataModule1.dyetblNO.Value;
       DataModule1.DyeDtlTblProsesAdi.Value:= ProsesEkle;
       DyeForm.DyeDtlTblPost(Sender);
     End;
   End;
 
  If DataModule1.DyeDtlTbl.RecordCount=1 Then
  Begin
    DataModule1.DyeDtlTbl.First;
    DataModule1.DyeTblProses.Value := DataModule1.DyeDtlTblProsesadi.Value;
  End;
  If DataModule1.DyeDtlTbl.RecordCount>1 Then
  Begin
    DataModule1.DyeDtlTbl.First;
    DataModule1.DyeTblProses.Value := DataModule1.DyeDtlTblProsesadi.Value;
    DataModule1.DyeDtlTbl.Next;
    DataModule1.DyeTblSProses.Value := DataModule1.DyeDtlTblProsesadi.Value;
  End;


  Try
   DataModule1.dyetbl.post;
 Except
 On E:Exception Do
 Begin
   MessageF('Bilinmeyen Sistem Hatası'
   ,'İşleminiz kayıt edilemedi, buna bir sistem hatası neden olabilir'
   ,'Hata Mesajı : '+E.Message
   ,'InputF'
   ,'ME'
   ,1);
   WaitF.Hide;
   WaitF.Free;
   Abort;
 End;
 End;


  DataModule1.DyeDtlTbl.CommitUpdates;

  WaitF.Hide;
  WaitF.Free;
  InputF.Close;
End;
[/code]
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

DyeDtlTblInsert(Sender); bunlar nedir ? post içinde buna benzer bişey yazmışsın burada ne oluyor? Birde Component ve database niye yazmıyorsun bende bi güzel 1 sayfa yazı yazmıştın sonadan farkettim yazdığımdan farklı bir component kullandığını
Ayrıca

Kod: Tümünü seç

Try
   DataModule1.dyetbl.post;
  DataModule1.DyeDtlTbl.CommitUpdates;
 Except
  DataModule1.DyeDtlTbl.Rollback  yada ilgli proc neyse
 On E:Exception Do
 Begin
   MessageF('Bilinmeyen Sistem Hatası'
   ,'İşleminiz kayıt edilemedi, buna bir sistem hatası neden olabilir'
   ,'Hata Mesajı : '+E.Message
   ,'InputF'
   ,'ME'
   ,1);
   WaitF.Hide;
   WaitF.Free;
   Abort;
 End;
 End;
 
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 !!!
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

Ya daha önce Paradox kullandığımı yazmıştım yanılmıyorsam; evet yazmışım
serbek_tr yazdı:paradox kullanıyorum hani database ne kullanıyorsun diye soracak olursanız diye söylüyorum
Bunlar nedir nasıl anlatsam mesela MessageF ; mesaj iletmem gereken yerlerde sürekli aynı kodları yazmaktansa mesaj başlığının girilebildiği mesaj açıklama satırının girilebildiği mesajın hangi formdan geldiği ve ve bu mesaj formu bir cevap gönderecekse hangi forma göndereceği formda görüntülenecek buton sayısı nedir gibisinden bilgilerin girilebildiği kısa bir procedure

DyeDtlTblInsert ise bir çok yerde yani formda aynı table için ekle kayıt et değiştir işlemleri için sizin aşağıda yazmış olduklarınızı yine defalarca yazmayayım diye kullandığım procedure ler yani DyeDtlTblPost sizin
aşağıda yazmış olduğunuz " DataModule1.DyeDtlTbl.Rollback " kısmı hariç aynı işleri yapıyor.

Ya zaten benim anlayamadığım şey şu yeni kayıt için Table 'a insert yerine edit komutu vereyim aynı satırlar normal işliyor insertte neden işlemiyor daha doğrusu table insert verdiğimde insert moduna geçiyor yani grid üzerinde indicatörün işareti * a dönüyor buda neyi gösterir insert durumunda ancak veri girişini yapan satırlar sanki işlemiyor yani gridde kayıtlar görünmüyor ve bence dolayısı ilede Commitupdate dediğimde table boş olduğu için veriyor bu hata kodunu ancak yeni kayıt için insert yerine edit vereyim ama yanlış anlaşılmasın var olan kayıt üzerinde değil hani table boş ikende edit dediğinde olmayan kayıtı editler ya işte öyle sorun olmuyor çalışıyor normal var olan kayıtıda editlediğimde çalışıyor.....

Valla bende anlamadım işte ama inşallah anlatabilmişimdir.
freeman35 yazdı:DyeDtlTblInsert(Sender); bunlar nedir ? post içinde buna benzer bişey yazmışsın burada ne oluyor? Birde Component ve database niye yazmıyorsun bende bi güzel 1 sayfa yazı yazmıştın sonadan farkettim yazdığımdan farklı bir component kullandığını
Ayrıca

Kod: Tümünü seç

Try
   DataModule1.dyetbl.post;
  DataModule1.DyeDtlTbl.CommitUpdates;
 Except
  DataModule1.DyeDtlTbl.Rollback  yada ilgli proc neyse
 On E:Exception Do
 Begin
   MessageF('Bilinmeyen Sistem Hatası'
   ,'İşleminiz kayıt edilemedi, buna bir sistem hatası neden olabilir'
   ,'Hata Mesajı : '+E.Message
   ,'InputF'
   ,'ME'
   ,1);
   WaitF.Hide;
   WaitF.Free;
   Abort;
 End;
 End;
 
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

Yok ya mantık icabı değil bu.

yeni bir project oluşturdum çok yalın komutlar kullandım hata kontrolu falan da yapmadım yani sadece ekle yaz kaydet- değiştir yaz kaydet

ya bu değiştir yaz kaydet yapıyor ama ekle yapmıyor

bu table dosyasının windows ortamından kaynaklanan sadece bu dosyaya özgü bir sorun olabilirmi yokya

Table1.insert;
Table1Deger.Asstring:=' DEGER';
Table1.Post;


Sonuç yine aynı hata programın tüm koduda sadece yukarıdaki master detail de yok sadece bir dosya ama DatabaseDesktopta herşey normal
Kullanıcı avatarı
serbek_tr
Üye
Mesajlar: 362
Kayıt: 16 Ağu 2004 12:54

Mesaj gönderen serbek_tr »

Sorunu çözdüm Teşekkürler;daha doğrusu kesin nedenini buldum şimdi çözüm arıyorum
Procedure Forum.Imza(Sender: TObject)
Begin
ShowMessage('Her türlü fikire, Her zaman açığım')
End;
Cevapla