garip hatalar, access violation, hata kodları

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
ozsal
Üye
Mesajlar: 108
Kayıt: 22 Oca 2006 07:55
Konum: izmir
İletişim:

garip hatalar, access violation, hata kodları

Mesaj gönderen ozsal »

s.a
kolay gelsin arkadaslar.Bugune kadar forumdan çok şey öğrendim. Herkese çok teşekkür ederim.
Yine bir kaç sorum olacak;

ilk olarak bir proje üzerinde çalışıyorum.projede notebook kullandım. 7 sayfası olan bir notebook. bunun her bir sayfasının üzerinde bir sürü dbedit ve comboboxlar var.
1. birincisi bu şekilde yapmak; ( formun üzerinde aşşağı yukarı 300 denetim oluyor) bellek hatası yapar mı? yada hız problemi. Yani bunları yeni forma mı taşımalıyım?

2.Aynı şekilde progamla sorunsuz çalışmaktaydım.bir buttonla veritabanına checkbrowse modunu kullanarak gonderme yapıyorum. bu komuttan once ' combobox45.itemindex=0 then dm.qrsemt.value; '
diye bir iki yordam ekledikten sonra ( programın en son ki çalışır halinden sonra sadece bu değişikliği yaptım. ) program

" Exception Eİnvalidoperating ..... 0006eee1 gibi bir hata verdi. acıklaması olarak da
Can't focus a disabled or invisible control diye bir şey yazdı^.'

IF LENGTH(DBEDIT56.TEXT)=50 THEN DBEDIT57.SETFOCUS;

SATIRINI KALDIRDIĞIM ZAMAN PROGRAM ÇALIŞMAYA DEVAM EDİYOR.
AMA DAHA ONCE BU SATIR VARKEN DE ÇALIŞIYORDU.
artı
bu kontrolleın hiçbiri visible=false or enabled=true değil
?
bunun sebebi ve çözümü nasıl olabilir sizce arkadaslar?

3. program en başta nedenini anlamadığım bir şekilde access violation 00000140 gibi bir hata veriyor ama yine de çalışıyor. bu hatayı da her zaman almıyorum. ara da bir veriyor.

bir de boyle runtime hatalarının kodlarını nereden bulabilirim? yani hangi hata hangi koda karşılık geliyor?

yazarken dikkat etmemişim. bayağı uzun olmuş. Yardımlarınız için şimdiden teşekkür ederim.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

Merhaba ,
SetFocus yapmak istediğiniz kontrol Notebook un aktif sayfasında değilse, tıpkı aktif olmayan bir formdaki nesneye Setfocus yapmak istemişsiniz gibi , hata alırsınız.Kural olarak SetFocus aktif pencerelerde kullanılabilir buna dikkat etmelisiniz.
iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
ozsal
Üye
Mesajlar: 108
Kayıt: 22 Oca 2006 07:55
Konum: izmir
İletişim:

Mesaj gönderen ozsal »

aktif sayda oldugu halde boyle oluyor ama
:(
Kullanıcı avatarı
ozsal
Üye
Mesajlar: 108
Kayıt: 22 Oca 2006 07:55
Konum: izmir
İletişim:

Mesaj gönderen ozsal »

Access violation bellek hatası mı?

birde
bir formun üzerindeki nesneleri ctrl+c ile kopyalayıp yapıştırdığımız zaman bu hata mesajı ile karşılasabilir miyiz?
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

Merhabalar,

FormShow olayında setfocus yapıyorsan böyle hata verir.

Hiç denemedim ama eğer DB edit modunda değilse, DBEdit'ler enabled=false oluyor (tabi isteğe bağlı olarak), belki ondan dolayıda Setfocus olmamış olabilir.

Program hatası olarak verilen 000140 gibi bir değer, programın hata meydana geldiği adresidir. CPU'daki yerini gösterir. Program hatadan dolayı kırıldığında, EDIT/find address (galiba öyleydi. unuttum :)) menüsünden bu adresin yerini aratabilir ve hatanın meydana geldiği yere ulaşabilirsin.

Program yazarken, bir çoğumuz bilgisayarda sanki başka uygulamalar çalışmayacakmış gibi davranırız. Babamızın çiftliği gibi, sistemin tüm kaynaklarını kendi uygulamamıza yönlendirir, geri kalanların canı cehenneme deriz sanki.

Elbette bu programcılığın başlarında böyle olur, zamanla elde edilen tecrübeler doğrultusunda bunların üstesinden gelinir.

Şimdi programınızda bir çok sayfa olduğunu ve her sayfada onlarca bleşen olduğunu belirttiğinizi söylediniz. Bir kullanıcı uygulamayı yüklediği ve uygulamanın açık kaldığı süre boyunca, tüm ama tüm sayfalarla işi olacağıın garantisini veriyor musunuz? Yani kullanıcı benim yaptığım sayfalara mutlaka girecektir, hatta about sayfası gibi bişi yaptım ona bile bakar diyorsanız. Aynen kullandığınız yönteme devam edin.

Fakat bu garanti verilemiyorsa şunuda sormak gerekiyor, günde sadece bir kez ya da hafta da birkez bakılacak bir sayfayı neden her zaman hafızada yüklü bulunduruyorsunuz? Boş boşuna bu sayfalardaki bileşenler, resimler DB bağlantıları vb. şeyler için neden sistem kaynakları tüketiliyor.

Tavsiyem, siz ilgili sayfayı çağırdığınızda o sayfayı dışarıdan yükleyin (create edin demiyorum, bu zaten olacak) işi bitince FREE edin.

Eğer ben işim düşünce CREATE edeyim derseniz yine yanılırsınız, çünkü bu durumda tüm tipler zaten hafızada olacağı için hemen hemen hiç birşey farketmeyecektir. Siz fiziki olarak dışarıdan yükleyin diyorum.

DLL ya da BPL ile sayfaları (form) dışarıdan yükleyin. Sitede bununla ilgili konuşmalar var. Aratırsanız bilgi alabilirsiniz.

Son olarak çok gerekmedikçe ya da sırf görsel özelliğinden dolayı zevk için 3. parti bileşenlerden kaçının. Formların üstüne çok büyük resimleri gömmeyin.

Saygılar.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
eğer kullanıcı aktif bir şekilde notbuktaki tüm sayfaları kullanmıyorsa onları ayrı bir formda create etmeyi düşün derim.

onun haricinde verdiği hatayı şu şekilde bertaraf edebilirsin.

Kod: Tümünü seç

IF LENGTH(DBEDIT56.TEXT)=50 THEN 
begin
  if dbedit57.canfocus then DBEDIT57.SETFOCUS
  else showmessage('dbedit57 seçilemiyor onu kontrol et');
end;
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
ozsal
Üye
Mesajlar: 108
Kayıt: 22 Oca 2006 07:55
Konum: izmir
İletişim:

Mesaj gönderen ozsal »

@aslangeri Evet bu da mantıklı bi çözüm. teşekkür ederim.

@Murat Dicle; İlgilenip o kadar yazdığınız için çok teşekkür ederim.
Formun on showuna yapmıyorum. daha önce bir problem olmadan çalışıyordu. her şey aynı. sadece programın kaydet buttonuna eklediğim bir kaç yordamdan sonra böyle yapmaya başladı.
free olayını kullanmaya çalışıyordum.
Galiba dikkatli kullanılması gereken bir komut.

form create yoradmındaki olayları form activate ye taşıdım.
dm deki bütün qrlerin hepsinin fieldlerini silip tekrar ekledim. bütün qrleri tekrar açtım.
ve bu şekilde bu hata mesajından kurtuldum.

read of adress ....000001 inde hata veriyor. bir yerin başlangıcı oldugunu düşünüyorum ama neresi bilmiyorum.
evet
şu an sorundan kurtuldum. ama Tabi programcılık mantık işi. Ben hatanın nereden kaynaklandığını anlamadım hala.ve nasıl düzeldiğini :(
hepinize yardımlarınız için teşekkür ederim arkadaslar
Cevapla