master/detail時DbGrid新增後資料不見了?? |
答題得分者是:channel
|
jeffreck
高階會員 發表:247 回覆:340 積分:197 註冊:2003-01-23 發送簡訊給我 |
在做資料庫master/detail時(用ADODataSet連ADODataSet)
detail使DBGrid 新增資料時,在master未Post時
dbGrid新增第二筆資料時第一筆會不見了
我知道這是 master尚未儲存的時,detai在Post之後
並找不到master所以未顯示. 我目前的做法是在dbGrid.onEnter時去Post Master
當User按取消新增時再Delete Master
但覺得不是很好的做法!
所以請教各位前輩的做法為何?? 這問題之前己討論過了http://delphi.ktop.com.tw/topic.php?topic_id=19887
其中andersonhsieh 前輩所說
>>我們公司的作法是在maser新增時先將maser/deail的關聯斷掉,等全部POST後再將關聯連回去
這一部份不知如何做到這樣的,可否請前輩教教!! 我用
關SELF.ADODataSet2.MasterFields:='';
開SELF.ADODataSet2.MasterFields:='調整單號';
但關時DBGRID會顯示合部資料 可否請前輩教教!! 非常非常的謝謝你,因為有你這世界變的更美好 ☆ ^_^ ☆
°∴°﹒☆°.﹒‧°∴°﹒°.﹒‧°∴°﹒
﹒‧°∴°﹒☆°.﹒‧°∴°﹒°.﹒‧°∴°﹒﹒‧°∴°﹒☆°.
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: 新增資料時,在master未Post時 dbGrid新增第二筆資料時第一筆會不見了 我知道這是 master尚未儲存的時,detai在Post之後 並找不到master所以未顯示. 我目前的做法是在dbGrid.onEnter時去Post Master 當User按取消新增時再Delete Master 但覺得不是很好的做法! 所以請教各位前輩的做法為何??這問題我之前也遇過,我建議您使用ADO的BatchUpdate功能,類似BDE的CachedUpdate。 作法如下:(以TADOQuery為例)(ADODataSet也一樣) (1)設定TADOQuery屬性中的LockType為ltBatchOptimistic (2)在存檔的按鈕寫:ADOMaster.UpdateBatch; ADODetail.UpdateBatch; (3)在放棄存檔的按鈕寫:ADOMaster.CancelBatch; ADODetail.CancelBatch; 這樣應該就可以,您可以試試看,效果不錯。 ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~ |
jeffreck
高階會員 發表:247 回覆:340 積分:197 註冊:2003-01-23 發送簡訊給我 |
引言: 這問題我之前也遇過,我建議您使用ADO的BatchUpdate功能,類似BDE的CachedUpdate。 作法如下:(以TADOQuery為例)(ADODataSet也一樣) (1)設定TADOQuery屬性中的LockType為ltBatchOptimistic (2)在存檔的按鈕寫:ADOMaster.UpdateBatch; ADODetail.UpdateBatch; (3)在放棄存檔的按鈕寫:ADOMaster.CancelBatch; ADODetail.CancelBatch; 這樣應該就可以,您可以試試看,效果不錯。 ~小弟淺見,參考看看~謝謝channel前輩的教導,但我目前也是做用BatchUpdate功能 目前做法如下 kEY為單號 1.使用者按新增 2.當dbGrind.OnEnter時 我去取得單號並存入Master.單號 Master執行Post 存入 但我在Master.OnBeforePort時又有做檢查欄位的動作 所以會發出ShowMessage('XXXX欄位不可空白') (Q1)OnBeforePort做檢查必須改到別的地方?? 3.如按儲存時去執行 Master.UpdateBatch detail.UpdateBatch 儲存沒問題 4.如按取消時 detail.CancelBatch Master.Delete <<這樣去執行CancelBatch才不會錯誤 Master.CancelBatch (Q2)但單號又己產生下一單據會跳號的問題?? --------------------------------------- 我是有想過用一個暫時的代號,待確定儲存後再取新單號,但又要更新detail 所以想請各位前輩提供意見! channel前輩如有作法不好的地方也請教導一下 非常非常的謝謝你,因為有你這世界變的更美好 ☆ ^_^ ☆ °∴°﹒☆°.﹒‧°∴°﹒°.﹒‧°∴°﹒ ﹒‧°∴°﹒☆°.﹒‧°∴°﹒°.﹒‧°∴°﹒﹒‧°∴°﹒☆°. |
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: 2.當dbGrind.OnEnter時 我去取得單號並存入Master.單號 Master執行Post 存入 但我在Master.OnBeforePort時又有做檢查欄位的動作 所以會發出ShowMessage('XXXX欄位不可空白') (Q1)OnBeforePort做檢查必須改到別的地方??當dbGrind.OnEnter時您就下Master.Post; Master.OnBeforePort時又有做檢查欄位的動作 所以會發出ShowMessage('XXXX欄位不可空白') 當檢查無誤時,再寫取得單號的程式,也就是取的Master單號的程式是窵在Master.OnBeforePort,應該就沒有問題囉! 引言: 4.如按取消時 detail.CancelBatch Master.Delete <<這樣去執行CancelBatch才不會錯誤 Master.CancelBatch您是不是在Master.AfterPost時下Master.UpdateBatch;不然此行應該不會有錯 引言: 但單號又己產生下一單據會跳號的問題??您有使用BatchUpdate功能,當還未UpdateBatch時,所產生的單號只是存在Cach之中,應該不會有跳號的問題。 如果您的應用程式是多人操作的環境,取得單號時會有問題。 當有兩人以上一起操作相同畫面(例:訂單作業時)時,分別在不同時間新增一筆資料,但都未UpdateBatch,您可以看一下他們的畫面,此時所取到的單號一定是相同的,第一個人存檔沒事,但第二個人存檔就發生Key值重複的錯誤,所以你在存檔前必須再檢查單號是否有重複。 ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~ |
jeffreck
高階會員 發表:247 回覆:340 積分:197 註冊:2003-01-23 發送簡訊給我 |
謝謝 channel 前輩這麼熱心的幫忙,但還有問題請教!
>>您是不是在Master.AfterPost時下Master.UpdateBatch;不然此行應該不會有錯
但如果我取消Master.Delete那就會產生錯誤如下:
[資料列控制代嗎參照到己刪除或標記為即將刪除的資料列] >>您有使用BatchUpdate功能,當還未UpdateBatch時,所產生的單號只是存在Cach之中,應該不會有跳號的問題。
因我的取單號是存在另一個Table,當去Call取單號時就會加1所以才有這問題,
不知前輩是如何做的?? 非常非常的謝謝你,因為有你這世界變的更美好 ☆ ^_^ ☆
°∴°﹒☆°.﹒‧°∴°﹒°.﹒‧°∴°﹒
﹒‧°∴°﹒☆°.﹒‧°∴°﹒°.﹒‧°∴°﹒﹒‧°∴°﹒☆°.
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: >>您是不是在Master.AfterPost時下Master.UpdateBatch;不然此行應該不會有錯 但如果我取消Master.Delete那就會產生錯誤如下: [資料列控制代嗎參照到己刪除或標記為即將刪除的資料列]也就是說,您在取消按鈕,執行 detail.CancelBatch; Master.CancelBatch; 會產生如您說所的錯誤([資料列控制代嗎參照到己刪除或標記為即將刪除的資料列]),照道理講應該不會有錯,因為無法完整看您的程式碼,所有沒有辦法為您找出原因?Sorry!不過您說在取消按鈕,執行 detail.CancelBatch; Master.Delete; Master.CancelBatch; 如此按取消鈕就不會有錯,您就頂著先吧! 引言: >>您有使用BatchUpdate功能,當還未UpdateBatch時,所產生的單號只是存在Cach之中,應該不會有跳號的問題。 因我的取單號是存在另一個Table,當去Call取單號時就會加1所以才有這問題, 不知前輩是如何做的??您的意思應該是當您新增Master所取得的單號是透過另一Table所記錄的某一欄的值去加1,所以當您取得Master單號時就將Master單號再回寫到另一Table所記錄的某一欄去。如果是這樣的話,您應該將回寫單號這一段程式寫在存檔鈕,也就是寫在Master.UpdateBatch之前,這樣應該就不會有跳號的問題! ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |