dbgrid 新增時條件不成立時處理 |
尚未結案
|
lilisn
一般會員 發表:35 回覆:62 積分:24 註冊:2003-03-09 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
您好﹗ 除了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 發送簡訊給我 |
|
kadee
高階會員 發表:11 回覆:141 積分:165 註冊:2002-03-20 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 補充一些﹕
當您在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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |