Jessie 發問時間: 電腦與網際網路程式設計 · 1 0 年前

如何用DELPHI將欄位中的數字做乘法運算?

在DATABASE中,我建立了五個欄位,分別是,member’s name , member’s number, book’s name, delayed day, 跟fine。

程式執行時可以在DBedit中輸入資料,並顯示在dbgrid裡。

請問,若我想在

delayed day欄位中輸入 1 時,讓fine欄位出現3,

delayed day欄位中輸入 2 時,讓fine欄位出現6,

也就是每遲延一天,罰金就是多三塊,請問該程式如何寫?

(以下補充為計算平均數時的程式,供參考。)

已更新項目:

var i:integer;

xMath,xEng:double;

begin

for i:=1 to tbstd.recordcount do begin

tbSTD.Edit;

xMath:=tbStD.FieldByName('Math').AsFloat;

xEng:=tbStD.FieldByName('Eng').AsFloat;

tbSTD.FieldByName('AVG').Asfloat:=(xmath+xeng)/2;

tbSTD.Next;

end;

end;

end.

1 個解答

評分
  • Email
    Lv 6
    1 0 年前
    最佳解答

    1. 不建議讓客戶直接在 TDBGrid 上編輯,TDBGrid 有很大的瑕疵,未經過驗證

    如果移到別筆記錄上,就會立刻更新過,像你的逾期天數輸入錯誤,然後

    使用者又去點別筆資料,你就知道後果了(自己去測試)。

    2. 逾期天數應該使用自動計算的,不應該由人為輸入

    tbStD.FieldByName('delayed').AsDateTime := Date - tbStD.FieldByName('借閱日期欄位').AsDateTime;

    3. 怎麼寫??我完全不知道你的問題出在哪? 在 TTable( or TSQL...看你用什麼元件)

    的 BeforePost 事件上寫

    tbStD.FieldByName(fine).Value := tbStD.FieldByName('delayed').Value * 3;

    只有一行就解決了,完全不知道你哪裡不會? 而且你又補充的那個計算平均

    數時副函數跟你問的問題一點也搭不上邊,補充那個要做什麼用途完全不懂。

    當然我上面是很粗陋的寫法,一個商業軟體,你還要去判別 User 輸入的是否

    正確,或者未輸入任何數值則不該計算,那些你自己去寫了。

    2006-05-31 08:20:16 補充:

    你那個補充的地方,有Edit(),一定要對應一個 Post()或Cancel(),結果沒Post,又去做下一筆的編輯。for i:=1 to tbstd.recordcount do begin xMath:=tbStD.FieldByName('Math').AsFloat; xEng:=tbStD.FieldByName('Eng').AsFloat; tbSTD.Edit; tbSTD.FieldByName('AVG').Asfloat:=(xmath+xeng)/2; tbSTD.Post; tbSTD.Next; end;

    2006-05-31 08:20:54 補充:

    還有AVG 要是屬於計算欄位,那就把他放在 OnCalcFields事件內,不需再用任何迴圈,或者 Edit 事件了。下面三行就解決了。xMath:=tbStD.FieldByName('Math').AsFloat; xEng:=tbStD.FieldByName('Eng').AsFloat; tbSTD.FieldByName('AVG').Asfloat:=(xmath+xeng)/2;

還有問題?馬上發問,尋求解答。