全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1100
推到 Plurk!
推到 Facebook!

請教SQL執行后為何無反應?

尚未結案
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-19 21:52:03 IP:63.84.xxx.xxx 未訂閱
請教各位前輩.    小弟在ADOTable元件之AfterPost事件中鍵入如下程式碼, 利用ADOQuery元件來更新資料表的內容, 但Update語法執行之后, 重新開啟資料表, 但無任何反應, 請問是何原因造成這樣的現象?
procedure TForm7.ADOTable1AfterPost(DataSet: TDataSet);
Var
  IDRemark, OldSQL : String;
  HourRemark : Real;
begin
  IDRemark := ADOTable1.FieldByName('Idno').AsString;
    if ADOTable1.FieldByName('O_OT_Hours').AsVariant <= 15 then
      begin
        OldSQL := 'Update TableName Set Salary_Money=Round(Salary_Month / 26 * Work_Days) and '
            'Salary_Money_H=Round(Salary_Month / 26 / 8) and '
            'O_OT_Money=Round(Salary_Month / 26 / 8 * O_OT_Hours * 1.5) and '
            'H_OT_Money=Round(Salary_Month / 26 / 8 * H_OT_Hours * 2.5) and '
            'Meal=Round(Work_Days * 2000) and '
            'Total_Amount=Round(Salary_Month / 26 * Work_Days) '
            '  Round(Salary_Month / 26 / 8 * O_OT_Hours * 1.5) '
            '  Round(Salary_Month / 26 / 8 * H_OT_Hours * 2.5) '
            '  Round(Work_Days * 2000) '
            '  Bonus Where Idno=''' IDRemark '''';
        ADOQuery1.Close;
        ADOQuery1.SQL.Text := OldSQL;
        ADOQuery1.SQL.Text := StringReplace(ADOQuery1.SQL.Text, 'TableName', Form6.TableNameFirst, [rfReplaceAll, rfIgnoreCase]);
      end
    else
      begin
        HourRemark := ADOTable1.FieldByName('O_OT_Hours').AsVariant - 15;
        OldSQL := 'Update TableName Set Salary_Money=Round(Salary_Month / 26 * Work_Days) and '
            'Salary_Money_H=Round(Salary_Month / 26 / 8) and '
            'O_OT_Money=Round(Salary_Month / 26 / 8 * 15 * 1.5) and '
            'H_OT_Money=Round(Salary_Month / 26 / 8 * H_OT_Hours * 2.5) and '
            'Meal=Round(Work_Days * 2000) and '
            'Bonus=Bonus   Round(Salary_Month / 26 / 8 * :Hour * 2.5) and '
            'Total_Amount=Round(Salary_Month / 26 * Work_Days) '
            '  Round(Salary_Month / 26 / 8 * 15 * 1.5) '
            '  Round(Salary_Month / 26 / 8 * H_OT_Hours * 2.5) '
            '  Round(Work_Days * 2000) '
            '  Bonus   Round(Salary_Month / 26 / 8 * :Hour * 2.5) Where Idno=''' IDRemark '''';
        ADOQuery1.Close;
        ADOQuery1.SQL.Text := OldSQL;
        ADOQuery1.SQL.Text := StringReplace(ADOQuery1.SQL.Text, 'TableName', Form6.TableNameFirst, [rfReplaceAll, rfIgnoreCase]);
        ADOQuery1.Parameters.ParamByName('Hour').Value := HourRemark;
      end;
  ADOQuery1.ExecSQL;
  ADOTable1.Close;
  ADOTable1.Open;
  ADOTable1.Locate('Idno', IDRemark, []);
  ADOTable1.Next;
  DBGrid1.SelectedIndex := 0;
end;
感謝! ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-20 10:29:02 IP:63.84.xxx.xxx 未訂閱
請教各位前輩﹒    如上的程式碼﹐小弟在if...else判斷結束之后﹐ADOQuery1.ExecSQL;之前﹐用ShowMessage擷取出當前的ADOQuery.SQL.Text﹐字串內容是正确的﹐但為何ExecSQL后看不到任何異動呢﹖    感謝﹗    ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
terrychen
尊榮會員


發表:90
回覆:794
積分:501
註冊:2003-05-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-20 10:32:17 IP:61.221.xxx.xxx 未訂閱
您好 請問你確認過資料有POST嗎?因為你是寫在AFTER POST EVENT 再者UPDATE後資料庫有資料ㄇ 然後在檢查WHERE 條件是否對應 小弟猜想可能問題出在上述紅色部分
terrychen
尊榮會員


發表:90
回覆:794
積分:501
註冊:2003-05-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-10-20 10:34:36 IP:61.221.xxx.xxx 未訂閱
您好 請您將 用ShowMessage擷取出當前的ADOQuery.SQL.Text 拿至資料庫執行,看看會有什ㄇ樣的結果
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-10-20 10:44:30 IP:218.163.xxx.xxx 未訂閱
cashxin2002 你好 : 可否告知 ADOTable1.CursorType 與 LockType Property 的 Value, 以確認一下, ADOTable1.AfterPost 時, 是否已經 Apply 到 access 資料庫中.
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-10-20 10:55:19 IP:63.84.xxx.xxx 未訂閱
感謝回應﹗    回Mickey版主大人﹕ ADOTable1.CursorType: ctKeyset     ADOTable1.LockType: ltOptimistic    感謝﹗        ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-10-20 11:33:17 IP:218.163.xxx.xxx 未訂閱
引言: ADOTable1.CursorType: ctKeyset ADOTable1.LockType: ltOptimistic
我試都正常耶...加一行 Showmessage 看看多少資料列被異動到 ADOQuery1.ExecSQL; Showmessage(inttostr(ADOQuery1.RowsAffected));
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-10-20 11:40:14 IP:63.84.xxx.xxx 未訂閱
感謝Mickey版主大人﹒    回應有一筆資料﹐這也是正确的﹐因為下了Where 鍵值的條件﹐所以只有一筆資料會Update﹐但資料表內容就是沒有動靜﹐真的是怪怪的﹒    還有其它的原因嗎﹖    ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-10-20 12:23:54 IP:63.84.xxx.xxx 未訂閱
還是找不到原因所在﹒    SQL語法中除了Idno欄位為文字形態外﹐其它欄位皆為數字﹐其格式為雙精准數﹐標准形態﹐小數位自動﹒這樣的資料表格式有問題嗎﹖    小弟另外將此SQL語法直接寫在Button元件的OnClick中﹐并沒有涉及到ADOTable的事件部分﹐資料表還是沒有反應﹐且也沒有錯誤訊息﹐唉﹗到底怎么了﹖    勞煩各位前輩了﹗    ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-10-20 12:25:56 IP:218.163.xxx.xxx 未訂閱
我試的是, 這樣沒問題 : >
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-10-20 17:07:10 IP:63.84.xxx.xxx 未訂閱
感謝各位的指教﹗    找了半天﹐原來問題出在SQL的Update語法中﹐不能使用'and'來組合﹐而是要改作','即可正确Update﹒ 唉﹐頭暈暈中﹗ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-10-20 20:32:06 IP:218.32.xxx.xxx 未訂閱
哈哈...我也老眼昏花 @@~ 不過, access 也沒有 raise SQL Error ...這 ... 怪怪
系統時間:2024-05-19 15:59:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!