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

ADO BatchUpdate 模式 Master Detail 結構的明細序號如何處理自動給號?

答題得分者是:timhuang
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-23 15:28:47 IP:211.22.xxx.xxx 未訂閱
由於 Detail 的功能要達到可以輸入重複的項目, 以銷貨單來舉例要做買十送一的功能, 就要輸入兩筆同樣產品編號如下: 產品編號,數量,金額 P01,10,$100 P02, 1,$0 所以在明細的部份就不能使用 單號 產品編號 的唯一索引, 所以要加上序號的欄位. 序號資料由程式自動產生且使用者不得修改. 目前碰到的狀況就是自動產生序號的部份. 因為是採用 BatchUpdate 的架構, 所以是要做到無論新增幾筆明細紀錄, 都只在按下存檔才一次更新到資料庫, 序號的產生是在 DetailBefortPost 所指定的. 新增第一筆明細所給的序號正常但是新增第二筆明細就會出現與第一筆同樣的序號, 這是因為第一筆尚未存到資料庫, 所以產生序號的程式都抓到舊紀錄. 不知道該用什麼技巧來處理? 我是雪龍
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-23 18:57:12 IP:203.95.xxx.xxx 未訂閱
若是使用 BatchUpdate 的話, 有序號確實比較麻煩, 比較單純的作法會變為在 UpdateBatch 之前, 先進行 check 這次要更新的所有 records , UpdateStatus是否是 usInserted , 也就是批次新增的資料, 再利用最大的序號逐次加號寫回後再進行 UpdateBatch!!
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-24 09:36:25 IP:211.22.xxx.xxx 未訂閱
引言: 若是使用 BatchUpdate 的話, 有序號確實比較麻煩, 比較單純的作法會變為在 UpdateBatch 之前, 先進行 check 這次要更新的所有 records , UpdateStatus是否是 usInserted , 也就是批次新增的資料, 再利用最大的序號逐次加號寫回後再進行 UpdateBatch!!
不好意思, 您所說的是否就是在 qyDetail 的 BeforeInsert 時先作一次明細掃描取得最大的序號 我是雪龍
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-24 13:24:05 IP:203.95.xxx.xxx 未訂閱
我的想法是在存回時, 也就是 UpdateBatch 之前, 做一次寫回資料的完整 scan, 以避免會有遺漏的狀況, 尤其是新增後還未寫回資料庫時, 又進行刪除, 會影響你的明細序號的建立與設置! 在 BeforeInsert 進行也可以, 要注意 Bookmark 的操作, 以方便使用者在新增或刪除時的操作習慣!
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-24 16:14:27 IP:211.22.xxx.xxx 未訂閱
引言: 我的想法是在存回時, 也就是 UpdateBatch 之前, 做一次寫回資料的完整 scan, 以避免會有遺漏的狀況, 尤其是新增後還未寫回資料庫時, 又進行刪除, 會影響你的明細序號的建立與設置! 在 BeforeInsert 進行也可以, 要注意 Bookmark 的操作, 以方便使用者在新增或刪除時的操作習慣!
我了解您的意思, 剛好我又碰到所說的狀況, 同時做明細的刪除與新增然後存檔就出現序號錯亂的問題, 目前的程式架構還是亂糟糟. 不過很確定的就是要在寫回後端資料庫時再指定明細序號是比較好的處理方式. 關於您所說的作一次寫回資料的完整 Scan 不知道在 ADO 是如何處理呢? 我是雪龍
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-24 17:54:00 IP:203.95.xxx.xxx 未訂閱
你可以在UpdateBatch 之前, 利用 Detail 這個 TADOQuery 一筆一筆地檢查每筆的 UpdateStatus, 該屬性有 usDeleted, usInserted, usModified, usUnmodified 4種狀態, 利用這些狀態來決定你要應用的行為. 先和你確認幾種比較麻煩的狀態, 1. 訂單明細是否會在存檔後修改? (應該有) 2. 訂單明細存檔後的修改, 若是新增或是異動都比較沒影響, 但若是刪除的話, 該序號是否要保留? 或是序號可以重複使用呢? 由於是 BatchUpdate 的操作, 所以利用 UpdateStatus 來判定每筆資料的狀態會比較理想!
bestlong
站務副站長


發表:126
回覆:734
積分:512
註冊:2002-10-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-24 18:40:07 IP:211.22.xxx.xxx 未訂閱
引言: 1. 訂單明細是否會在存檔後修改? (應該有)
這裡指的存檔是否是指多筆明細新增或修改後, 發現有誤又再修改剛新增或已異動的明細? 以使用者的習慣判定是一定會有的.
引言: 2. 訂單明細存檔後的修改, 若是新增或是異動都比較沒影響, 但若是刪除的話, 該序號是否要保留? 或是序號可以重複使用呢?
這個部份倒是還不明確, 因為不了解對程式的架構有何差異. 直觀來說已被用過的序號最好不可重用. 因該是比較安全的作法. 只是會有不連號的視覺問題吧. 我是雪龍
------
http://blog.bestlong.idv.tw/
http://www.bestlong.idv.tw/
http://delphi-ktop.bestlong.idv.tw/
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-11-29 23:25:28 IP:220.132.xxx.xxx 未訂閱
如同的上篇所說的, 在 UpdateBatch 之前, 利用 ADOQuery 的 First, .. Next 的方式走一次目前的所有 record check UpdateStatus 來決定如何賦值!
系統時間:2024-06-01 23:44:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!