Hata Oluşumları

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Hata Oluşumları

Mesaj gönderen husonet »

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.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7587
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

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.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

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..
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Bu da önemli

Mesaj gönderen husonet »

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.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

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.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Teşekkürler

Mesaj gönderen husonet »

Çok teşekkür ederim beni bu konuda bilinçlendirdiğiniz için.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

rica ederim. maksat muhabbet olsun, pardon iş görülsün :wink:
zaten bu sıcakta da başka birşey yapamıyoruz:(
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Değer Atamaları

Mesaj gönderen husonet »

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.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

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)
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Peki değişken kullanımları başka formlardan değer ve değişken atamalarını onActivate olayında yapmam sizce doğru olanmıdır.

Birde Form1.Free; metodu ile Form1.Close metodları arasındaki farklar nelerdir. Nerelerde kullanılır. Form1.Free niye kullanıyoruz. Bu konularda çok çelişkide kalıyorum.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7587
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

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.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Çok İyi

Mesaj gönderen husonet »

Şimdi olayları daha iyi anladım.

Teşekkür Ederim.
Cevapla