MDIForm ve MDIChild kontrollere müdahale edemiyorum..

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
hi_selamlar
Üye
Mesajlar: 523
Kayıt: 05 May 2005 03:24
Konum: DelphiTürkiye.COM

MDIForm ve MDIChild kontrollere müdahale edemiyorum..

Mesaj gönderen hi_selamlar »

S.A. Arkadaşlar

MDIChild formlar arasında bilgi alışverişini yapamıyorum.

Deneme amaçlı hazırladağım bir projem var.
3 Tane Form var.

Ana Form = MDIForm
2 Form = MDIChild
3 Form = fsNormal ve ShowModal olarak açılıyor.

sorunum ise şu;

ana form program açılışında creat ediliyor.
daha sonra 2 form (MDIChild) create ediliyor. (OnCLose 'unda nil ve free ediliyor)

daha sonra 3. form (fsNormal ve Showmodal) açılıyor.

2 formda bir tane DB var.

3 formda kullanıcı bilgilerini giriyor. eğer bilgiler kayıt edilmemişse program OnCloseQuery olayında soru soracak.

bilgi kayıt edilmemiş uyarısı verecek..

Kod: Tümünü seç

[b]OnCLoseQuery[/b] de ise

if Form2.Dataset1.State in edit veya insert then
begin
işlemleri yap
....
....

end;
ama bu kodda hata veriyor.
Access violation at adress 006687D9 in modüle deneme.exe
neden olmuyor bilmiyorum.


MDIChild formdan çağrılan, Showmodal+fsNormal form üzerinden takrar MDIChild üzerindeki DB kontrolü yapılamaz mı?


Umarım anlatabilmişimdir. uzun süredir arıyorum fakat istediğim gibi bilgi bir türlü bulamadım.

Yardımlarınız bekliyorum. lütfen.

S.A.
En son hi_selamlar tarafından 27 Kas 2006 04:14 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Herkes cahildir, bazi konularda.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Free edilen veya nil ataması yapılan bir nesne var olamayacağı için kullanamazsın. Cümle biraz karmaşık oldu kısaca söylemek gerekirse, kullanmak istediğin bileşen create edilmiş, free edilmemiş olacak ve nil değerine sahip olmayacak.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
hi_selamlar
Üye
Mesajlar: 523
Kayıt: 05 May 2005 03:24
Konum: DelphiTürkiye.COM

Mesaj gönderen hi_selamlar »

S.A.

belki biraz yanlış anlatmış olabilirim. kusura bakmayın. :)


benim yapamadığım işlem şu..


İşleyiş Şöyle ;

AnaMenu-------> Kart Formu ----> Yeni Kart Ekleme Formu
(fsMDIForm) (fsMDIChild) (fsNormal + ShowModal)


Kart formunda bir ader IBDataSet mevcut.

Yeni kart ekleme menüsünden kullanıcı bilgilerini giriyor sonra kayıt etmeden çıkmak istiyor. ve ben bu esnada kullanıcıya soru soruyorum.
"kardeşim neden kayıt etmiyorsun diye." kullanıcı pardon abi diyor sonra Evet Lütfen Kaydet tuşuna basıyor.

Bu esnada "Kart Formu" ndaki IBDataSet üzerinde bir takım kontrol ler yapacağım fakat "Access violatin" hatası veriyor.

yani

Yeni Kart EKleme Formundan > Kart Formundaki IBDataSet 'e ulaşamıyorum.

Acaba Neden?

baya araştırdım fakat bununla ilgili bir örnek veya kod parçacığı bulamadım.

NOT!
Uses bölümüne ilgili Unitler ekle.. sorun yok.



S.A.
Herkes cahildir, bazi konularda.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
acces violation hatasını genelde oluşturulmamış veya free edilmiş bir bileşene ulaşmaya çalıştırğınız zaman verir.
programı satır satır çalıştırırsanız hata verdiği satırı tespit edebilirsiniz. o satırdaki bileşenleri kontrol edmelisiniz. çünkü henüz oluşturulmamışlar veya free edilmişler.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
hi_selamlar
Üye
Mesajlar: 523
Kayıt: 05 May 2005 03:24
Konum: DelphiTürkiye.COM

Mesaj gönderen hi_selamlar »

S.A.

hocam herşey normal şekilde çalışıyor.
Kullanıcı kapat tuşuna bastığında formun OnCloseQuery yordamı çalıştırıyor ve hemen orda ilk olarak oluşturulan formda hata veriyor.

hocam;

- Ana form(fsMDIForm)
- Kart Listesi (fsMDIChild)
- Kart Listesi Yeni Kart Ekleme (fsNormal + Showmodal) olarak oluşturuyor.

1- Ana Menü açılıyor
2- Kart Listesi Aşağıdaki kod ile oluşturuluyor.
IBDataSet bileşenim Kart Listesi formunda yer alıyor.

Kod: Tümünü seç

procedure MDIFormOlustur(FormAdi: TForm; TFormAdi: TComponentClass; StrForm: String);
begin
  if Application.FindComponent(StrForm) = Nil then
  begin
    Application.CreateForm(TFormAdi, FormAdi);
  end;
    TForm(Application.FindComponent(StrForm)).Show;
end;

3- Kullanıcı kart listesinde Yeni kart listesi oluşturmak istediğini belirtiyor ve form açılıyor. form ise fsNormal+ShowModal olarak açılıyor.

bilgilerini giriyor ve kayıt etmeden iptal et dediğinde doğal olarak IBDataSet bileşenini Kart Listesi bölümünden durumunu kontrol ediyorum.
Eğer dsEdit veya dsInsert then ona göre işlem yapacağım.

ama malesef daha kontrol aşamasına geldiğinde hata veriyor.

amacım kart listesi ekleme formundan girilen bilgileri Kart Listesi formundaki IBDataSet iile öncelikle kontrol etmek istiyorum.

Ama Olmuyor.

:(

S.A.[/b][/list]
Herkes cahildir, bazi konularda.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Anladığıma göre kullanak istediğin bileşen başka formda. Kesninlikle bir noktayı gözden kaçırıyorsun. Programı satır satır çalıştırmayı dene. F5 tuşu ile bir veya bir kaç önemli noktaya duraklama noktası yerleştir, program oraya kadar normal çalışsın ve o satır çalışacakken kontrolü delphi ele alsın. Ondan sonra F7 ve F8 tuşları ile satır satır çalıştır. Aralarındaki fark F7 tuşu prosedür ve fonksiyonları çalıştırırken, bunların da içeriğine giderek çalışır, F8 ise bunları direk çalıştırarak bir alt satıra iner. F5 ile duraklama noktası koyacağın yerler önemli. Mesela DataSet'in bulunduğu formun onCreate ve onDestroy olayına bir şey yazmasan da buralara bir mesaj yaz ve F5 ile duraklama işareti koy. Birde hatayı veren satırı bul ve oraya da işaret koy. Sıralama düşündüğün şekilde doğru çalışıyor mu bak.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla