projemde taksitlendir butonuna tıklayınca access violation hatası alıyorum. yaptıklarımı kısaca anlatayım.Hatayı nerde yaptığımı bulamadım

3 tane tablom var.Kayit_tutarı, odenen ve bakiye alanlarımı OGRENCI tablosunda tutuyorum.Bakiyeyi hesaplarken OGRENCI tablosunda BAK isimli bir calculated alan oluşturdum ve datasetin oncalcfields olayında aşağıdaki kodları yazdım:
Kod: Tümünü seç
procedure Tdm.OGRENCIDATACalcFields(DataSet: TDataSet);
begin
if (not OGRENCIDATAKAYIT_TUTAR.isnull) and
(not OGRENCIDATAODENEN.isnull) and
(OGRENCIDATAKAYIT_TUTAR.AsFloat <> 0) then
dm.OGRENCIDATABAK.AsFloat:=dm.OGRENCIDATAKAYIT_TUTAR.asfloat-dm.OGRENCIDATAODENEN.asfloat
else
dm.OGRENCIDATABAK.AsFloat:=0;
end;
Taksitlendirme kısmında ise taksit adedi, Küsüratı, Ilk Taksit Tarihi, Taksit Araligi,Kusurati Ilk taksidemi / Son Taksidemi Ekleyecegi, Kaydı alan Kişi gibi alanları TAKSIT tablomda tutuyorum.Vade_tarihi, Vade_tutari, Odeme_Tarihi, Odeme_tutari gibi alanlarıda ODEME tablomda tutuyorum.taksitlendir deyince ilgili alanlardaki verileri (taksit adedi vs..) TAKSIT tablosuna atıyor, Vade_tarihi ve Vade Tutarlarını hesaplıyorum.ODEME tablosunun afterpost olayında Odenen_Tutarlari toplatıp OGRENCI tablosundaki ODENEN alanına atıyorum.Böylece toplam ödenen miktarı buluyorum. Projeyi çalıştırınca Öğrenci bilgilerini giriyorum.Hesaplar kısmına geçip taksit bilgilerini giriyorum taksitlendir diyorum bazen taksitlendir butonuna tıklayınca access violation hatasını alıyorum bazende ODEME tablosunda mesela taksidin birini ödeyip post ettikten sonra o hatayı alıyorum ve OGRENCI tablosu edit modunda görünüyor. kodları aşağıda veriyorum.
Taksitlendir butonu :
Kod: Tümünü seç
procedure Thesapform.cxButton1Click(Sender: TObject);
begin
if cxComboBox1.Text='' then
begin
Application.Messagebox('Lütfen Küsüratı Giriniz..','.:: ! ::.',mb_Ok+mb_IconInformation);
cxComboBox1.SetFocus;
exit;
end;
if cxSpinEdit2.Text='' then
begin
Application.Messagebox('Lütfen Taksit Adedini Giriniz..','.:: ! ::.',mb_Ok+mb_IconInformation);
cxSpinEdit2.SetFocus;
end;
if cxDateEdit1.Text='' then
begin
Application.Messagebox('Lütfen İlk Taksit Tarihini Giriniz..','.:: ! ::.',mb_Ok+mb_IconInformation);
cxDateEdit1.SetFocus;
exit;
end;
if cxSpinEdit1.Text='' then
begin
Application.Messagebox('Lütfen Taksit Aralığını Giriniz..','.:: ! ::.',mb_Ok+mb_IconInformation);
cxSpinEdit1.SetFocus;
exit;
end;
if cxComboBox2.Text='' then
begin
Application.Messagebox('Lütfen Küsüratı Hangi Taksite Ekleyeceğinizi Giriniz..','.:: ! ::.',mb_Ok+mb_IconInformation);
cxComboBox2.SetFocus;
exit;
end;
If cxtextedit1.Text='' then
begin
Application.Messagebox('Lütfen Kaydı Alan Kişiyi Giriniz..','.:: ! ::.',mb_Ok+mb_IconInformation);
cxtextedit1.SetFocus;
exit;
end;
Kusurat:=StrToInt(cxComboBox1.TExt);
Taksit_Adet:=cxSpinEdit2.Value;
Tarih:=CxDateEdit1.Date;
Gun:=cxSpinEdit1.Value;
Ilk_Son:=cxCombobox2.text;
kaydi_alan:=cxTextEdit1.Text;
Taksit_tutar:=dm.OGRENCIDATA.fieldbyname('KAYIT_TUTAR').AsFloat/taksit_adet;
Taksit_Tutar:=Yuvarla(Taksit_Tutar,Kusurat);
Artan:=Taksit_Tutar*Taksit_Adet;
Artan:=dm.OGRENCIDATA.fieldbyname('KAYIT_TUTAR').AsFloat-Artan;
dm.TAKSITDATA.Append;
dm.TAKSITDATA.FieldByName('ADET').AsInteger:=Taksit_adet;
dm.TAKSITDATA.FieldByName('BAS_TAR').AsDateTime:=Tarih;
dm.TAKSITDATA.FieldByName('GUN').AsInteger:=Gun;
dm.TAKSITDATA.FieldByName('KAYDI_ALAN').AsString:=kaydi_alan;
dm.TAKSITDATA.FieldByName('ILK_SON').AsString:=ilk_son;
dm.TAKSITDATA.FieldByName('KUSURAT').AsInteger:=Kusurat;
dm.TAKSITDATA.Post;
For i:=1 To Taksit_Adet Do
Begin
Dm.ODEMEDATA.Append;
Dm.ODEMEDATA.FieldByName('VADE_TARIHI').AsDateTime:=Tarih;
Dm.ODEMEDATA.FieldByName('VADE_TUTARI').AsFloat:=Taksit_Tutar;
dm.ODEMEDATA.FieldByName('ODENEN_TUTAR').AsFloat:=0;
If (i=1) and (Ilk_Son='İlk Takside Ekle') Then
Begin
Dm.ODEMEDATA.FieldByName('VADE_TUTARI').AsFloat:=Taksit_Tutar+Artan;
End;
If (i=Taksit_Adet) and (Ilk_son='Son Takside Ekle') Then
Begin
Dm.ODEMEDATA.FieldByName('VADE_TUTARI').AsFloat:=Taksit_Tutar+Artan;
End;
Dm.ODEMEDATA.Post;
Tarih:=Tarih+Gun;
End;
ShowMessage('Taksitlendirme İşlemi Tamamlandı..');
end;
Kod: Tümünü seç
procedure Thesapform.ODEMEDATAAfterPost(DataSet: TDataSet);
begin
dm.sorgu.DataSource:=dm.OGRENCIDS;
dm.sorgu.Close;
dm.sorgu.SQL.Clear;
dm.sorgu.SQL.Text:='Select sum(ODENEN_TUTAR) from ODEME where HESAP_ID=:OGRENCI_PK';
dm.sorgu.Open;
dm.OGRENCIDATA.Edit;
dm.OGRENCIDATA.FieldByName('ODENEN').AsFloat:=dm.sorgu.Fields[0].asfloat;
dm.OGRENCIDATABAK.AsFloat:=dm.OGRENCIDATAKAYIT_TUTAR.asfloat-dm.OGRENCIDATAODENEN.asfloat;
dm.OGRENCIDATABAKIYE.AsFloat:=dm.OGRENCIDATABAK.AsFloat;
dm.OGRENCIDATA.Post;
end;