請大大們提供OnValidate的撰寫方向 |
尚未結案
|
chiag
一般會員 發表:14 回覆:38 積分:10 註冊:2002-10-02 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
下面這段程式, 在 Detail Table (IdenChild) 的 Parent_PK 欄,
檢查填入之值, 若於 Master Table (Parent) 不存在相關資料,
則發佈錯誤訊息 :
procedure TForm1.IdenChildParent_PKValidate(Sender: TField); begin if Sender.AsString <> '' then with TQuery.Create(Self) do begin // 新建一查詢元件 try DatabaseName := IdenChild.DatabaseName; // 指定新建之查詢資料庫 SQL.Add('select count(*) from Parent where Parent_PK ='#39 Sender.AsString #39); Open; if Fields[0].AsInteger <> 1 then raise Exception.Create('Parent_PK 值,於Parent檔中無相關資料!'); finally Close; // 關閉並釋放新建之查詢元件 Free; end; end; end;發表人 - Mickey 於 2003/04/28 10:44:19 發表人 - Mickey 於 2003/04/28 10:46:15 |
chiag
一般會員 發表:14 回覆:38 積分:10 註冊:2002-10-02 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
procedure TForm1.MyIdenChildParent_PKValidate(Sender: TField); begin if Sender.AsString <> '' then with TQuery.Create(nil) do begin // 新建一查詢元件 try DatabaseName := TDBDataSEt(Sender.DataSet).DatabaseName; // 指定新建之查詢資料庫 SQL.Add('select count(*) from Parent where Parent_PK ='#39+ Sender.AsString+#39); Open; if Fields[0].AsInteger <> 1 then raise Exception.Create('Parent_PK 值,於Parent檔中無相關資料!'); finally Close; // 關閉並釋放新建之查詢元件 Free; end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin Query1.FieldByName('Parent_PK').OnValidate := MyIdenChildParent_PKValidate; // assign OnValidate end; |
chiag
一般會員 發表:14 回覆:38 積分:10 註冊:2002-10-02 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
引言: 是不是也可說是直接assign一個Function 或 procedure給onValidate,是的, 但應是一個與 OnValidate "同型" 的 procedure. 引言: 但一定透過新建一個query來查詢嗎?不一定新建一個query來查詢, 因我不知你 OnValidate 之檢查需求, 回應之 Sample 只是 Demo Master-Detail 的關聯性而已. 引言: 我是說假設assign的procedure內, 直接ShowMessage( 'testValidate' ); 則當在Field中按下Enter鍵時, 就會Show了, 對嗎 >>< face="Verdana, Arial, Helvetica"> 對 <>< face="Verdana, Arial, Helvetica">引言: 新手上路!!加油中...你的問題, 不像新手喔 補充說明,完整一點的方式( class="code"> type TForm1 = class(TForm) ... private UserOnValidate : TFieldNotifyEvent; procedure MyIdenChildParent_PKValidate(Sender: TField); ... procedure TForm1.MyIdenChildParent_PKValidate(Sender: TField); begin ... UserOnValidate(Sender); // Call User OnValidate Event end; procedure TForm1.FormCreate(Sender: TObject); begin UserOnValidate := ClientDataSet1.FieldByName('Parent_PK').OnValidate; // Save User Defined Procedure to UserOnValidate. ClientDataSet1.FieldByName('Parent_PK').OnValidate := MyIdenChildParent_PKValidate; end; |
chiag
一般會員 發表:14 回覆:38 積分:10 註冊:2002-10-02 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |