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

master/detail時DbGrid新增後資料不見了??

答題得分者是:channel
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-06 13:49:46 IP:61.218.xxx.xxx 未訂閱
在做資料庫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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-06 15:48:45 IP:211.21.xxx.xxx 未訂閱
引言: 新增資料時,在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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-06 17:48:06 IP:61.218.xxx.xxx 未訂閱
引言: 這問題我之前也遇過,我建議您使用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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-06 20:16:13 IP:61.217.xxx.xxx 未訂閱
2.Detail取得單號建議在befor在做,Master.OnBeforePort做檢查只檢查Master得欄位,Detial.OnBeforePort做檢查只檢查Detial得欄位,這樣就不會互相干擾了 4.如按取消時寫這樣就好了 detail.CancelBatch Master.CancelBatch TRY TRY SEE
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-07 10:48:23 IP:211.21.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-10 10:42:51 IP:61.218.xxx.xxx 未訂閱
謝謝 channel 前輩這麼熱心的幫忙,但還有問題請教! >>您是不是在Master.AfterPost時下Master.UpdateBatch;不然此行應該不會有錯 但如果我取消Master.Delete那就會產生錯誤如下: [資料列控制代嗎參照到己刪除或標記為即將刪除的資料列] >>您有使用BatchUpdate功能,當還未UpdateBatch時,所產生的單號只是存在Cach之中,應該不會有跳號的問題。 因我的取單號是存在另一個Table,當去Call取單號時就會加1所以才有這問題, 不知前輩是如何做的?? 非常非常的謝謝你,因為有你這世界變的更美好 ☆ ^_^ ☆ °∴°﹒☆°.﹒‧°∴°﹒°.﹒‧°∴°﹒ ﹒‧°∴°﹒☆°.﹒‧°∴°﹒°.﹒‧°∴°﹒﹒‧°∴°﹒☆°.
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-10 11:29:00 IP:211.21.xxx.xxx 未訂閱
引言: >>您是不是在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之前,這樣應該就不會有跳號的問題! ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~
系統時間:2024-06-26 9:47:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!