mdi ve mdichild form veritabanına kayıt yapma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
cvheneburi
Üye
Mesajlar: 95
Kayıt: 07 Eki 2010 03:55

mdi ve mdichild form veritabanına kayıt yapma

Mesaj gönderen cvheneburi »

Merhaba arkadaşlar ana formum mdi form veritabanına kayıt yaptığım form mdichild
aşağıdaki kodları normal form da çalıştırdığım zaman gayet güzel çalışıyor fakat mdichild formda şu hatayı veriyor
Access violation at address 008872B9 in module 'EVRAK.exe'. read of address 000003A8.

Kod: Tümünü seç

var
  f_ana: Tf_ana;
  duzenle:integer;
  form:Tf_ana;
implementation
 uses modul, main;
{$R *.dfm}
 
 
procedure kaydet(Sender:TObject);
begin
  case duzenle of
  0:
   dmodul.t_anakod.Insert;
  1:
   dmodul.t_anakod.Edit;
  end;
 
 
  try
    dmodul.t_anakod.FieldByName('KODNO').AsInteger:=StrToInt(f_ana.Edit1.Text);
    dmodul.t_anakod.FieldByName('ANAKODADI').AsString:=f_ana.Edit2.Text;
    dmodul.t_anakod.FieldByName('SAKLAMAKODU').AsInteger:=StrToInt(f_ana.Edit3.Text);
    dmodul.t_anakod.FieldByName('SAKLAMASURESI').AsInteger:=StrToInt(f_ana.Edit4.Text);
    dmodul.t_anakod.Post;
  except
    Application.MessageBox('KAYIT BAŞARISIZ','HATA!!!',mb_ok+MB_ICONWARNING);
    dmodul.t_anakod.Refresh;
    f_ana.BitBtn2.Enabled:=true;
  end;
   duzenle:=0;
   f_ana.Edit1.Text:='';f_ana.Edit2.Text:='';
   f_ana.Edit3.Text:='';f_ana.Edit4.Text:='';
end;
 
 
[U][B]kaydet butonu[/B][/U]
procedure Tf_ana.BitBtn1Click(Sender: TObject);
begin
kaydet(Sender);
duzenle:=0;
BitBtn2.Enabled:=true;
end;
[U][B](düzenle komutu)[/B][/U]
procedure Tf_ana.BitBtn2Click(Sender: TObject);
begin
Edit1.Text:=IntToStr(dmodul.t_anakod.FieldByName('KODNO').AsInteger);
Edit2.Text:=dmodul.t_anakod.FieldByName('ANAKODADI').AsString;
Edit3.Text:=IntToStr(dmodul.t_anakod.FieldByName('SAKLAMAKODU').AsInteger);
Edit4.Text:=IntToStr(dmodul.t_anakod.FieldByName('SAKLAMASURESI').AsInteger);
duzenle:=1;
BitBtn2.Enabled:=False;
end;
child formu açma kodum

Kod: Tümünü seç

AdvOfficeMDITabSet1.AddTab(Tf_ana.Create(Owner)) // owner , nil , self hepsi denendi sonuç aynı
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: mdi ve mdichild form veritabanına kayıt yapma

Mesaj gönderen mkysoft »

Hatayı hangi komutta alıyorsunuz? Breakpoint koyup adım adım çalıştırın. edit moda geçtikten sonra post komutu yerine update kullanmalısınız.
cvheneburi
Üye
Mesajlar: 95
Kayıt: 07 Eki 2010 03:55

Re: mdi ve mdichild form veritabanına kayıt yapma

Mesaj gönderen cvheneburi »

hocam hatayı try komutuna başladığı an alıyor her satırda showmessage ile durdurup kontrol ettim edit çalıştı ondan sonra hatayı verdi... yazdığım bu kodu daha önceki bütün programlarımda kullandım çalıştı.
bu sefer şöyle birşey denedim
formum mdichild from
bu formu tabset içerisinde açıyorum acaba sıkıntı ondan kaynaklanıyor olabilir mi
yanlız şöyle bir durum daha var
yine aynı form üzerinde procedure kullanmadan direkt butonun altına insert komutu ile kayıt ekletmek istediğimda sorun çıkmıyor
try komutunu mu kabul etmiyor anlamadım :)
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: mdi ve mdichild form veritabanına kayıt yapma

Mesaj gönderen vkamadan »

Merhaba ,

Kod: Tümünü seç

    dmodul.t_anakod.FieldByName('KODNO').AsInteger:=StrToInt(f_ana.Edit1.Text);
    dmodul.t_anakod.FieldByName('ANAKODADI').AsString:=f_ana.Edit2.Text;
    dmodul.t_anakod.FieldByName('SAKLAMAKODU').AsInteger:=StrToInt(f_ana.Edit3.Text);
    dmodul.t_anakod.FieldByName('SAKLAMASURESI').AsInteger:=StrToInt(f_ana.Edit4.Text);
kod bloğunda f_ana içinden çağırdığınız nesneler ile ilgili bir sorun olacak , yukarıdaki kod bloğu f_ana içine yazdığınız bir blok mu? eğer öylese sorun şu ;

Kod: Tümünü seç

AdvOfficeMDITabSet1.AddTab(Tf_ana.Create(Owner))
komuduyla değişken adı belli olmayan bir Tf_ana sınıfı türetiyorsunuz, sınıfın kendi içinde tanımlı olan "f_ana : Tf_ana" değişkeni halen nil olduğu için kendi içinde ya da herhangi başka bir yerden o değişken adından forma erişemezsiniz, kendi içinden editörlere erişmek için başına form adını eklemeyin dmodul.t_anakod.FieldByName('KODNO').AsInteger:=StrToInt(Edit1.Text); yada ekleyecekseniz dmodul.t_anakod.FieldByName('KODNO').AsInteger:=StrToInt(self.Edit1.Text); olarak ekleyebilirsiniz.
Volkan KAMADAN
www.polisoft.com.tr
cvheneburi
Üye
Mesajlar: 95
Kayıt: 07 Eki 2010 03:55

Re: mdi ve mdichild form veritabanına kayıt yapma

Mesaj gönderen cvheneburi »

hocam ilginize tşkler
yazdığım kaydet procedure f_kod formunda
ben kaydet procedure şöyle düzenledim
procedure tf_kod.kaydet (Sender:TObject);
begin
case duzenle of
0:
dmodul.t_anakod.Insert;
1:
dmodul.t_anakod.Edit;
end;
try
dmodul.t_anakod.FieldByName('KODTURU').AsString:=ComboBox1.Text;
case ComboBox1.ItemIndex of
0:
dmodul.t_anakod.FieldByName('KODNO').AsString:=Edit1.Text;
1:
dmodul.t_anakod.FieldByName('ALTKONU1').AsString:=Edit1.Text;
2:
dmodul.t_anakod.FieldByName('ALTKONU2').AsString:=Edit1.Text;
3:
dmodul.t_anakod.FieldByName('ALTKONU3').AsString:=Edit1.Text;
end;
dmodul.t_anakod.FieldByName('ANAKODADI').AsString:=Edit2.Text;

dmodul.t_anakod.FieldByName('SAKLAMAKODU').AsString:=Edit3.Text;

dmodul.t_anakod.FieldByName('SAKLAMASURESI').AsString:=Edit4.Text;

dmodul.t_anakod.post;
except
self.BitBtn2.Enabled:=true;
Application.MessageBox('KAYIT BAŞARISIZ','HATA!!!',mb_ok+MB_ICONWARNING);
dmodul.t_anakod.Refresh;
end;

ve çalıştı programım allah sizden razı olsun çok tşk ederim...
Cevapla