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

dbgrid 新增時條件不成立時處理

尚未結案
lilisn
一般會員


發表:35
回覆:62
積分:24
註冊:2003-03-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-16 15:54:38 IP:61.228.xxx.xxx 未訂閱
dbgrid 進入 新增 狀態時條件不成立時 如何讓它回覆到非新增狀態 ? ADOQueryBeforeInsert if MessageDlg('確定新增一筆',mtconfirmation,[mbYes,mbNo],0)=mrYes then begin ADOQuery1.SQL.Clear; ADOQuery1.SQL.Text:='select max(chknumber) as totnum from mytest'; ADOQuery1.Open; if ADOQuery1.FieldByName('totnum').IsNull then Si:=1 else Si:=(ADOQuery1.FieldByName('totnum').AsInteger 1); ADOQuery1.Close; DBGrid1.SelectedIndex:=1; end; 我在 ADOQuery1AfterInsert if (ADOQuery1.FieldByName('chknumber').AsInteger = 0) or (Length(Trim(ADOQuery1.FieldByName('chkdate').AsString)) = 0) then begin ADOQuery1.cancel; (或adoquery1.Refresh) 會出現錯誤
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-16 16:36:04 IP:210.65.xxx.xxx 未訂閱
Hi lilisn,    Add some code on BeforePost Event 
procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet);
begin
if (DataSet.FieldByName('chknumber').AsInteger = 0) or (Length(Trim(DataSet.FieldByName('chkdate').AsString)) = 0) then
  Abort;
end;
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
cashxin2002
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-16 16:59:34 IP:202.62.xxx.xxx 未訂閱
您好﹗    除了Fishman兄提到的該把取消新增的程式控制寫在ADOQuery1元件的BeforePost 事件中之外﹐從您描述的BeforeInsert程式碼中還看到一個錯誤如下﹕
begin
  ADOQueryBeforeInsert
  if MessageDlg('確定新增一筆',mtconfirmation,[mbYes,mbNo],0)=mrYes
    then 
    begin
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Text:='select max(chknumber) as totnum from 
        mytest';
      ADOQuery1.Open;
      if ADOQuery1.FieldByName('totnum').IsNull then 
        Si:=1
      else
        Si:=(ADOQuery1.FieldByName('totnum').AsInteger 1);
      ADOQuery1.Close;
      DBGrid1.SelectedIndex:=1;
end;
//以上紅色處語句應刪除掉﹐因為將ADOQuery1元件Close掉﹐當新增時資
料集就不是處于dsBrowse的State(狀態)﹐故會引起錯誤﹒
========================= 我是您的朋友﹐有您真好﹗ ========================= 發表人 - cashxin2002 於 2004/11/16 17:01:57
------
忻晟
lilisn
一般會員


發表:35
回覆:62
積分:24
註冊:2003-03-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-16 18:08:29 IP:61.228.xxx.xxx 未訂閱
版主您好 Abort; 還是停至 dsinsert 如何讓DBGrid 回覆到 dsBrowse 謝謝
kadee
高階會員


發表:11
回覆:141
積分:165
註冊:2002-03-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-16 18:13:18 IP:218.165.xxx.xxx 未訂閱
ADOQuery1.cancel; try try it Kadee_BigRed
------
Kadee/BigRed Ent.
www.tw165.com
cashxin2002
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-16 18:22:53 IP:202.62.xxx.xxx 未訂閱
您好﹗    補充一些﹕ 當您在BeforePost事件中使用Abort方法﹐將停止當前事件中Abort之后的程式碼 運行﹐如果您需要將資料集元件還原到dsBrowse的State﹐您可在Abort方法之前 加上Cancel方法﹐如下﹕
procedure TForm1.ADOQuery1BeforePost(DataSet: TDataSet);
begin
if (ADOQuery1.FieldByName('chknumber').AsInteger = 0) or (Length(Trim
  (ADOQuery1.FieldByName('chkdate').AsString)) = 0) then
  begin
    ADOQuery1.Cancel;
    Abort;
    //此處加入Abort的目的是控制資料集元件不做Post的動作﹐因為在
    Cancel方法之后﹐資料集元件又處于dsBrowse的State﹐此時﹐如果再做
    Post的動作﹐就會出錯了
  end;
end;
========================= 我是您的朋友﹐有您真好﹗ ========================= 發表人 - cashxin2002 於 2004/11/16 18:36:08
------
忻晟
lilisn
一般會員


發表:35
回覆:62
積分:24
註冊:2003-03-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-17 09:45:31 IP:61.228.xxx.xxx 未訂閱
可以了 Thank All
系統時間:2024-06-26 6:38:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!