Master-Detail DBGrid 取消編輯問題 |
答題得分者是:cashxin2002
|
jasing
一般會員 發表:11 回覆:29 積分:8 註冊:2004-12-23 發送簡訊給我 |
Hello版主大人及各位先進好 :
小弟想請教一個關於使用Master-Detail ADOTable的問題,
因作業須求,小弟寫了一個類似像選擇不同表格,會產生各自的表格的程式,
所以在明細檔裡會將所選的表格樣版Title資料套入,例如套入第一筆紙張,
第二筆原子筆...讓User直接輸入數量,但後來發現在未進入明細檔,如不想輸入,可以取消,但進入明細檔後即無法取消,我主檔是使用TDBEdit,明細檔使用
DBGrid,因為是套表的方式所以明細檔沒有修改,刪除等資料編輯按鈕,只有在主檔有資料編輯按鈕,原以為只要使用 Master.cancel; Detail.cancel;這樣即可,但卻無作用,只要有修改就會直接儲存,想請各位大大指導一下! 謝謝!
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 從您的描述來看﹐當使用者在主檔輸入資料然后進入明細檔的時候﹐主檔的資料已經做儲存的動作了﹐這樣的話﹐您可在對應主檔的ADOTable之BeforePost事件中﹐先用變數記錄下此筆記錄的唯一鍵值﹐當您准備取消的時候﹐雖然主檔的資料已經存入資料表中﹐但您還是可以根据此唯一鍵值對此筆資料做刪除的動作﹐另外一點﹐如果對M/D資料庫做取消的動作時﹐除了使用資料集元件的Cancel方法之外﹐可以試試使用Abort();方法﹐作用為取消Abort();以下的所有動作﹒ 因為您是使用ADO存取﹐故也可使用另一種方法﹐就是ADO的BatchUpdate﹐此方法有點相似于BDE/IDAPI存取技術中的CachedUpdate﹐在沒有呼叫ADO資料集元件的UpdateBatch方法之前﹐所有的資料異動皆在快取記憶體中﹐當決定取消所有的資料異動時﹐可使用ADO資料集元件的CancelBatch方法來取消﹒
此方法的好處是對資料的異動速度非常快﹐降低資料來源的負荷﹒
ADO資料集元件使用BatchUpdate方法的相關屬性條件﹕
CursorType屬性值需為ctKeyset或ctStatic
LockType屬性值需為ltBatchUpdate
執行的SQL敘述需為Select敘述
CursorLocation屬性值需為clUseClient
注﹕當CursorLocation屬性值為clUseServer也可使用﹐缺點是無法使用Briefcase模型﹐而且在執行效率上不佳﹒ 相關的使用方法在站內搜索一下﹐有很多相關的討論﹒ =================================
有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗
================================
------
忻晟 |
jasing
一般會員 發表:11 回覆:29 積分:8 註冊:2004-12-23 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |