merhaba arkadaşlar,
programımda ufak bi hesaplama işinde takıldım.sorumu şöyle anlatıyım.
mesela bir müşteriye 3 iş yapıldı ve bu işlerden kalan borçlarını toplattırıp toplam borcunu sql koduyla buldurdum.toplam borçtan bi miktarını ödediği zaman toplam kalan borcunuda buluyorum. takıldığım kısım ise eğer borcundan bi miktar ödemediyse toplam_kalan_para alanım toplam_borc alanıma eşit olsun, ödediği bi miktar varsa toplam_borc tan toplam_odenen_para yı çıkartsın ve kalanı bulsun.
bunun için datasetin beforeinsert olayında şöyle bi kod yazdım ama programı çalıştırıp yeni butonuna tıkladığım zaman stackowerflow hatası alıyorum.
procedure Tisform.ISDATABeforeInsert(DataSet: TDataSet);
begin
dm.sorgu.DataSource:=dm.MUSDS;
dm.sorgu.Close;
dm.sorgu.SQL.Clear;
dm.sorgu.SQL.Text:='Select sum(KALAN_PARA) from YAPILAN_IS where IS_NO=:MUSTERI_PK';
dm.sorgu.Open;
dm.ISDATA.Edit;
If dm.ISDATA.FieldByName('TOPLAM_ODENEN_PARA').AsFloat=0 then
dm.ISDATA.FieldByName('TOPLAM_KALAN_PARA').AsFloat:=dm.sorgu.Fields[0].asfloat
else
If dm.ISDATA.FieldByName('TOPLAM_ODENEN_PARA').AsFloat<>0 then
dm.ISDATA.FieldByName('TOPLAM_KALAN_PARA').AsFloat:=dm.sorgu.Fields[0].asfloat-dm.ISDATA.FieldByName('TOPLAM_ODENEN_PARA').AsFloat;
end;
kolay gelsin...
Bilginin temelini sağlam at depremde zarar görmesin
hımm hata şurdan kaynaklanıyor.eğer önceden kayıtlı bir müşteriye iş kaydı gireceksek tam olarak istediğim işlemi yapıyor diyemem ama hatada vermiyor.
ama yeni bir müşteri ekleyip ona iş kaydı gireceğimiz zaman bu hata mesajını veriyor.
yapmak istediğim işlemi başka nasıl bi yoldan yapabilirm.
iyi çalışmalar..
Bilginin temelini sağlam at depremde zarar görmesin
Merhaba ,
Eklediğiniz hesaplanan bir alana OnClacField olay metodu haricinde Edit yada Append metodları çağırdıktan sonra değer atamak istiyor olabilirmisiniz? yani özetmelek gerekirse belirttiğiniz alanlardan herhangi biri hesaplanan bir alan olabilirmi?
İyi çalışmalar.
Tabi, bahsettiğimiz olay, Fiziksel alanlara Edit yada insert mod haricinde deeğr atamak istediğinizdede karşınıza çıkacaktır, AfterInsert metodunda dataset Insert moddan çıkmıştır yani Post edildikten sonra tetiklenir dolayısıla siz alana değer atamaya çalıştığınızda Stack overflow istisnasına neden olur.
İyi çalışmalar.
Merhaba ,
Anladığım kadarıyla siz yeni bir kayıtta varsayılan değerleri atamak istiyorsunuz , bu durumda bahsettiğiniz kod bloğunu dataset in OnNewRecord olay metoduna yazmanız doğru olacaktır.
BeforeInsert olayında daha Kayıt ekleme/Insert olayı gerçekleşmemiştir. Halbuki siz eklenmeyen kayıtın alanlarına değer atamaya çalışıyorsunuz. Kodları AfterInsert içine yazınız
Yada @vkamadan arkadaşımızın dediği gibi OnNewRecord olayında
afterinsert içine yazıyorum ama toplam_odenen_para alanında 0 yazmasına rağmen toplam_kalan_para alanına toplam_borcun değerini atmıyor.
yani bu işlemi hangi olaya yazarsam yazayım yapmıyor.
aşağıda yapmak istediğim işlemi nasıl gerçekleştiricem ben
If dm.ISDATA.FieldByName('TOPLAM_ODENEN_PARA').AsFloat=0 then
dm.ISDATA.FieldByName('TOPLAM_KALAN_PARA').AsFloat:=dm.sorgu.Fields[0].asfloat
else
If dm.ISDATA.FieldByName('TOPLAM_ODENEN_PARA').AsFloat<>0 then
dm.ISDATA.FieldByName('TOPLAM_KALAN_PARA').AsFloat:=dm.sorgu.Fields[0].asfloat-dm.ISDATA.FieldByName('TOPLAM_ODENEN_PARA').AsFloat;
kolay gelsin..
Bilginin temelini sağlam at depremde zarar görmesin
procedure Tisform.kaydetbtnClick(Sender: TObject);
begin
dm.ISDATA.Post;
dm.ISDATA.Edit;
dm.sorgu.DataSource:=dm.MUSDS;
dm.sorgu.Close;
dm.sorgu.SQL.Clear;
dm.sorgu.SQL.Text:='Select sum(KALAN_PARA) from YAPILAN_IS where IS_NO=:MUSTERI_PK';
dm.sorgu.Open;
If dm.ISDATA.FieldByName('TOPLAM_ODENEN_PARA').AsFloat=0 then
dm.ISDATA.FieldByName('TOPLAM_KALAN_PARA').AsFloat:=dm.sorgu.Fields[0].asfloat
else
If dm.ISDATA.FieldByName('TOPLAM_ODENEN_PARA').AsFloat<>0 then
dm.ISDATA.FieldByName('TOPLAM_KALAN_PARA').AsFloat:=dm.sorgu.Fields[0].asfloat-dm.ISDATA.FieldByName('TOPLAM_ODENEN_PARA').AsFloat;
dm.ISDATA.Post;
end;
tşkler iyi çalışmalar..
Bilginin temelini sağlam at depremde zarar görmesin