Hata Oluşumları
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Hata Oluşumları
Arkadaşlar Programların kitlenme nedeni genelde neden oluşur. Mesala benim uğraştığım program üzerinde bir değiştirme işlemi yapıyorum kaytediyorum veya kaydetme işleminden vazgeçip formu, pencereyi terkediyorum sonra tekrar değiştirmek için girdiğim zaman problem oluyor. Bu pencerede 3 tablo işliyor. Ben bu olayı çözdüm burada 3 tane table bileşini birde database bileşeni kullanıyorum database bileşeni table3 bileşeni ile bağlantılı bunlarla iptal işlemi için transaction yöntemini kullanmak için barındırıyorum dbgrid nesnesi için ve olay table3 ile Database1 nesnesini kapatmaya çalıştığım zaman oluşuyor. Database1.Close Table3.Close bu hata sebebi Tranaction olayı olabilirmi.
Merhaba,
transaction'da genel yapı şöyledir:
Database1.BeginTransaction;
// değişiklikler, eklemeler
eğer kaydedecekseniz : CommitTransaction;
yok iptal edecekseniz : RollbackTransaction;
önce RollbackTransaction yapıp, sonra kapatın.
Bu işe yaramazsa adım adım çalıştırıp hatanın nerde olduğunu bulmaya çalışın.
Kolay gelsin.
transaction'da genel yapı şöyledir:
Database1.BeginTransaction;
// değişiklikler, eklemeler
eğer kaydedecekseniz : CommitTransaction;
yok iptal edecekseniz : RollbackTransaction;
önce RollbackTransaction yapıp, sonra kapatın.
Bu işe yaramazsa adım adım çalıştırıp hatanın nerde olduğunu bulmaya çalışın.
Kolay gelsin.
bu çok zor bir soru olabilir. doğrudan şudur demek de zor ama buradan tahmin yürüteceğiz. kilitlenme-donma haricinde verilen bir mesaj varsa onu da yazmanız isabetli tespit yapmamızı kolaylaştıracaktır.
şöyle bir tavsiyede bulunabilirim; bir forumda oluşturduğunuz create, open, vs. işlemleri forumu kapatırken tam tersinden yapmaya çalışınız. yani database i open yaptıktan sonra table i açıyorsanız önce table i close yapın sonra database i (gerçi database i close yapınca tüm bağlı tablo/query ler de kapanır) disconnect yapın (close). ayrıca forum içinde herhangi bir nesne create edilmişse onları da aynı sırayı takip ederek free ediniz. birde oncreate mi onshow da mı işlem yaptığınızı ve ne işlemi yaptığınızı iyice tartıp ona göre karar verin. diyeceğim şu ki; daha create edilmemiş bir nesne üzerinde de işlem yapmaya çalışmayın. gözlemlerim genelde bu tip hataların bolca yapıldığı yönünde..
şöyle bir tavsiyede bulunabilirim; bir forumda oluşturduğunuz create, open, vs. işlemleri forumu kapatırken tam tersinden yapmaya çalışınız. yani database i open yaptıktan sonra table i açıyorsanız önce table i close yapın sonra database i (gerçi database i close yapınca tüm bağlı tablo/query ler de kapanır) disconnect yapın (close). ayrıca forum içinde herhangi bir nesne create edilmişse onları da aynı sırayı takip ederek free ediniz. birde oncreate mi onshow da mı işlem yaptığınızı ve ne işlemi yaptığınızı iyice tartıp ona göre karar verin. diyeceğim şu ki; daha create edilmemiş bir nesne üzerinde de işlem yapmaya çalışmayın. gözlemlerim genelde bu tip hataların bolca yapıldığı yönünde..
Bu da önemli
Arkadaşlar ben Table larımı Create acıyorum ve daha sonra formu kapatıp açtığım zaman problem oluyor problemi Active eventine tekrar table larımı açmakla kapatabildim fakat yaptığım işlemin doğru olup olmadığını bilmiyorum. Ayrıca formlarımı Close; metoduyla kapatıyorum close eventine de table ları kapatıyorum. Sizce doğru olan bumudur yoksa yanlış eventlermi kullanıyorum.
eğer formu run-time esnasında create etmiyorsan yani proje ile birlikte baştan create ediliyorsa; ve orada kullanacağın tablolar başka formları da pek ilgilendirmiyorsa; formun.onshow event ında tabloları aç onclose da da kapat. bu iş için onactive uygun değil.
ayrıca dediğim gibi oncreate de açıyorsan ve formun program çalışırken bir kez create edileceğinden ve de onclose da da tabloyu kapatmış olacağından ikinci kez formu sadece show ediyorsun o yüzden kapalı tabloya ulaşima hatası alıyorsundur. dediğim gibi en pratik olan onshow ve onclose.
ayrıca dediğim gibi oncreate de açıyorsan ve formun program çalışırken bir kez create edileceğinden ve de onclose da da tabloyu kapatmış olacağından ikinci kez formu sadece show ediyorsun o yüzden kapalı tabloya ulaşima hatası alıyorsundur. dediğim gibi en pratik olan onshow ve onclose.
Teşekkürler
Çok teşekkür ederim beni bu konuda bilinçlendirdiğiniz için.
Değer Atamaları
Bir de kafama takılan bazı noktalar var mesala form1 den form2 ye değişken veya değer atamaları yapıyorum bunu da formun onActivate eventinde yapıyorum programım çalışıyor hata vermiyor ama doğrusu bumu merak ettim o yüzden soruyorum. Birde Form1.Free; metodunu Create ile oluşturduğumuz formlarda mı kullanmalıyız formu kapatmak için. Soracaklarım bu konuyla ilgili şimdilik bu kadar.
programcının ihtiyacına göre hepsine de yeri geldiğinde ihtiyaç olabilir.
bu event ların öncelik sıralarını ve ne zamanlar çalıştıklarını çok iyi bilmek lazım.
açarken sıralama söyle;
1.OnCreate (program ilk başlarken yada Form1 := TForm1.Create(Self) ile)
2.OnShow
3.OnActivete
kapatırken
1.OnCloseQuery
2.OnClose
3.OnDeActivete
4.OnDestroy (sadece Form1.Free ile)
bu event ların öncelik sıralarını ve ne zamanlar çalıştıklarını çok iyi bilmek lazım.
açarken sıralama söyle;
1.OnCreate (program ilk başlarken yada Form1 := TForm1.Create(Self) ile)
2.OnShow
3.OnActivete
kapatırken
1.OnCloseQuery
2.OnClose
3.OnDeActivete
4.OnDestroy (sadece Form1.Free ile)
Merhaba,
1. olayı şöylece anlatayım ben. Siz bir form göstermek istediğinizde bu form hafızada oluşturulur ve öylece gösterilir. Yani hafızada bir yer işgal eder. Eğer Close ile kapatırsanız, form hafızada yer kaplamaya devam eder, ancak ekrandan kaldırılır. Free ile de hafızadan silebilirsiniz.
Benim kullandığım ve daha uygun olan yol, formları gerektiği zaman oluşturup, işi bittiği zaman hafızadan silmektir.
2. Eğer birden fazla formda kullandığınız global bir değişkeniniz varsa, bunu ayrı bir unitte tanımlayın ve her iki formun uses kısmına da bu unitin adını yazın. Ben böyle bir uniti her programım için oluşturup, içine global değişken, procedure ve function'ları yazıyorum.
Kolay gelsin.
1. olayı şöylece anlatayım ben. Siz bir form göstermek istediğinizde bu form hafızada oluşturulur ve öylece gösterilir. Yani hafızada bir yer işgal eder. Eğer Close ile kapatırsanız, form hafızada yer kaplamaya devam eder, ancak ekrandan kaldırılır. Free ile de hafızadan silebilirsiniz.
Benim kullandığım ve daha uygun olan yol, formları gerektiği zaman oluşturup, işi bittiği zaman hafızadan silmektir.
2. Eğer birden fazla formda kullandığınız global bir değişkeniniz varsa, bunu ayrı bir unitte tanımlayın ve her iki formun uses kısmına da bu unitin adını yazın. Ben böyle bir uniti her programım için oluşturup, içine global değişken, procedure ve function'ları yazıyorum.
Kolay gelsin.
Çok İyi
Şimdi olayları daha iyi anladım.
Teşekkür Ederim.
Teşekkür Ederim.