請教SQL語法部分不會立即更新的問題 |
尚未結案
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
請教各位前輩﹒ 小弟程式碼如下﹐使用SQL的Update語法來根据使用的輸入再計算其它欄位值﹐但很奇怪的是標注紅色處(利用if..else來判斷ParamByName變數值)就不會立即更新﹐而需要再重新Edit該筆記錄一次﹐然后再次Post﹐才會真正計算出欄位值﹐但其它的欄位計算時都不會有這樣的現象﹐同樣是寫在ADOTable元件的AfterPost事件之后﹐一触發Post后﹐即可計算出結果﹐請問是何原因﹖
procedure TForm7.ADOTable3AfterPost(DataSet: TDataSet); Var AmountRemark : Variant; begin IDRemark := ADOTable3.FieldByName('Idno').AsString; ADOQuery3.Close; ADOQuery3.SQL.Text := 'Update TableName3 Set Total_Amount= ' 'First_Amount Second_Amount Non_Leave_Pay Sanitary_Pay ' 'Where Idno=''' IDRemark ''''; ADOQuery3.SQL.Text := StringReplace(ADOQuery3.SQL.Text, 'TableName3', ADOTable3.TableName, [rfReplaceAll, rfIgnoreCase]); ADOQuery3.ExecSQL; ADOQuery3.Close; ADOQuery3.SQL.Text := 'Update TableName3 c, Employee a Set c.Medical_Insurance= ' 'Round(Total_Amount / 100 * 4.5) Where a.Medical_Insurance=''Yes'' and ' 'c.Idno=a.Idno and c.Idno=''' IDRemark ''''; ADOQuery3.SQL.Text := StringReplace(ADOQuery3.SQL.Text, 'TableName3', ADOTable3.TableName, [rfReplaceAll, rfIgnoreCase]); ADOQuery3.ExecSQL; AmountRemark := ADOTable3.FieldByName('Total_Amount').AsVariant - ADOTable3.FieldByName('Medical_Insurance').AsVariant; ADOQuery3.Close; ADOQuery3.SQL.Text := 'Update TableName3 Set Income_Tax= :Tax Where Idno=''' IDRemark ''''; ADOQuery3.SQL.Text := StringReplace(ADOQuery3.SQL.Text, 'TableName3', ADOTable3.TableName, [rfReplaceAll, rfIgnoreCase]); if AmountRemark <= 200000 then begin ADOQuery3.Parameters.ParamByName('Tax').Value := 0; end else if (AmountRemark > 200000) and (AmountRemark <= 700000) then begin ADOQuery3.Parameters.ParamByName('Tax').Value := Round((AmountRemark - 200000) / 100 * 5); end else if (AmountRemark > 700000) and (AmountRemark <= 1900000) then begin ADOQuery3.Parameters.ParamByName('Tax').Value := Round((AmountRemark - 700000) / 100 * 10) 25000; end else if (AmountRemark > 1900000) and (AmountRemark <= 3700000) then begin ADOQuery3.Parameters.ParamByName('Tax').Value := Round((AmountRemark - 1900000) / 100 * 15) 120000 25000; end else if (AmountRemark > 3700000) and (AmountRemark <= 5900000) then begin ADOQuery3.Parameters.ParamByName('Tax').Value := Round((AmountRemark - 3700000) / 100 * 20) 270000 120000 25000; end; ADOQuery3.ExecSQL; ADOQuery3.Close; ADOQuery3.SQL.Text := 'Update TableName3 Set Total_Receive= ' 'Total_Amount - Medical_Insurance - Income_Tax Where ' 'Idno=''' IDRemark ''''; ADOQuery3.SQL.Text := StringReplace(ADOQuery3.SQL.Text, 'TableName3', ADOTable3.TableName, [rfReplaceAll, rfIgnoreCase]); ADOQuery3.ExecSQL; ADOTable3.Close; ADOTable3.Open; ADOTable3.Locate('Idno', IDRemark, []); ADOTable3.Next; DBGrid3.SelectedIndex := 0; end;===================== 努力,相信會獲得美麗! 忻晟
------
忻晟 |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
sun_chih_yen
一般會員 發表:40 回覆:33 積分:13 註冊:2003-10-03 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |