Formun çağırdı fonksiyon formu kapattığında hata oluşuyor
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Formun çağırdı fonksiyon formu kapattığında hata oluşuyor
Biraz karışık oldu sanırım. Bir form var. Bu formun üstünde bir button var. Burada başka bir form üzerinde yer alan fonksiyonu çağırıyorum. Çağrılan bu fonksiyon tüm formları kapatıyor (bende kapanmasını istiyorum zaten). Doğal olarak fonksiyonu çağıran formda, çağrılan fonksiyonun işi bittiğinde end; bloğunu okumak istiyor. form kapandığı için end; bloğuna geri dönemiyor ve acsess voladition hatası veriyor. Hatadan nasıl kurtulabilirim?
Teşekkürler.
Teşekkürler.
Çağırdığın fonksiyon bir şarta bağlı olarak mı kapatıyor? Öyle ise bir değişken döndürüp fonksiyonu çağırdığın yerin altında bir değişken veya parametreyi kontrol edip kapatmayı buradan yap. Doğrudan kapatıyorsa da yine aynı şekilde çağırdığın satırın altında kapattır.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Çağırılan fonksiyon
Çağıran fonksiyon;
Kod: Tümünü seç
procedure Tfr_anaform.mn_kullanici_degistirClick(Sender: TObject);
var
i:integer;
begin
for i:= 0 to fr_anaform.MDIChildCount-1 do
fr_anaform.MDIChildren[i].Close;
veriler.data_base.Disconnect;
FormShow(fr_anaform);
end;
Kod: Tümünü seç
procedure Tfr_ayarlar.bt_durumClick(Sender: TObject);
begin
tablo_oku.Params[0].Text := 'Evet';
tablo_oku.ExecSQL;
Self.Close;
fr_anaform.mn_kullanici_degistir.Click;
end;
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Test
Kod sıralamasına göre bir sorun yok gibi ama formların onCloseQuery, onClose ve hatta çalışıyorsa onDestroy olaylarından kaynaklanıyor olabilir. Görünen kod üzerinden düşünürsek te;
satırının çağırdığı prosedür ne yapıyor bilmek lazım. Kodları satır satır inceleyip analiz (trace) edemiyorsan bu prosedürün ilk satırına ve son satırına bir showmessage ile mesaj yaz ('başladı' ve 'bitti' gibi). Muhtemelen hata buradan geliyordur.
Kod: Tümünü seç
FormShow(fr_anaform);
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
- White Rose
- Üye
- Mesajlar: 726
- Kayıt: 06 Tem 2005 09:41
- Konum: Güneyden
- İletişim:
- sabanakman
- Kıdemli Üye
- Mesajlar: 3081
- Kayıt: 17 Nis 2006 08:11
- Konum: Ah bi Antalya olaydı keşke (Ankara)
Kod: Tümünü seç
procedure Tfr_anaform.mn_kullanici_degistirClick(Sender: TObject);
var
i:integer;
begin
for i:= 0 to fr_anaform.MDIChildCount-1 do
fr_anaform.MDIChildren[i].Close;
veriler.data_base.Disconnect;
FormShow(fr_anaform);
end;
Kod: Tümünü seç
for i:=0 to Memo1.Lines.Count-1 do
if Memo1.Lines[i]='' then Memo1.Lines.Delete(i);
Kod: Tümünü seç
for i:=Memo1.Lines.Count-1 downto 0 do
if Memo1.Lines[i]='' then Memo1.Lines.Delete(i);
Kod: Tümünü seç
procedure Tfr_anaform.mn_kullanici_degistirClick(Sender: TObject);
var
i:integer;
begin
for i:=fr_anaform.MDIChildCount-1 downto 0 do
fr_anaform.MDIChildren[i].Close;
veriler.data_base.Disconnect;
FormShow(fr_anaform);
end;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
_________________
Derin olan kuyu değil kısa olan iptir. - .
Denemedim ama deneyeceğim. Böyle bir hatanın olduğunu biliyorum ama mdichildcount'da olacağı aklıma gelmemişti. daha doğrusu zaten mdichildları kapatan kısım düzgün çalışıyordu. ben sadece yeni bir özellik ekledim ve bu özellik programın yeniden açılıyormuş gibi davranmasını gerektirdi. bu nedenle acık tüm programları kapatıp formshow olayında yüklenen parametreleri çağırmam gerekti.
Eski bir versiyonu vardı yanımda onu denedim şimdi onda hata vermiyor. Benim düşünceme göre sorun şu;
begin
diğer fonksiyona git
end; //buraya dönmesi gerekecek
diğerfonsiyon
begin
end; // buradan çağıran fonksiyonun end komutuna gitmek isteyecek
ama geri döneceği end artık yok çünkü kapandı.
teşekküler.
Eski bir versiyonu vardı yanımda onu denedim şimdi onda hata vermiyor. Benim düşünceme göre sorun şu;
begin
diğer fonksiyona git
end; //buraya dönmesi gerekecek
diğerfonsiyon
begin
end; // buradan çağıran fonksiyonun end komutuna gitmek isteyecek
ama geri döneceği end artık yok çünkü kapandı.
teşekküler.