存檔前讓序號自動重排之問題 |
尚未結案
|
99right
一般會員 發表:1 回覆:0 積分:0 註冊:2009-07-09 發送簡訊給我 |
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
老大仔大您好,如果是把號碼重編的話,會不會比較快呢?
還是我搞錯題意的樣子? 因為有點看不懂… 1.先用i := 0010 DownTo 0001來判斷是否是最後一個被刪的 ↑這是要利用旗標把之前刪除過的id先存起來嗎? 2.假如是的話再用j := 0001 to (i 1),然後下sql指令把你要的欄位資料Update為0001~(i 1) ↑想不太出來這要如何轉成delphi語法 還麻煩老大仔大大賜教,謝謝囉! ===================引 用 老大仔 文 章=================== 那您的0002 0004 0006 也要寫回去嗎? 假如是的話 可以在刪掉後.... 1.先用i := 0010 DownTo 0001來判斷是否是最後一個被刪的 2.假如是的話再用j := 0001 to (i 1),然後下sql指令把你要的欄位資料Update為0001~(i 1) 僅供參考~ |
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
您好
表身寫入檔的用意是? 我的作法是,表身依單號 產品編號為key 然後用虛欄位, 在DataSet.OnCalcFields事件裡,動態賦予序號 如此不管刪了那一筆次序會自動重排 試看看是不是你要的? procedure cdsDetailCalcFields(DataSet: TDataSet); begin cdsDetailvSNo.Value:=IntToStr(cdsDetail.RecNo); end; ===================引 用 99right 文 章=================== 各為前輩們大家好, 小弟想求助各位 : 單身資料表BB透過複製產生了十筆0001~0010, 經過些許修改之後刪除了 item0002; 0004 & 0006, 希望存檔(新增或修改)時自動重新寫入 0001~0007 的序號(BB003), 請問該如何寫呢? (BB資料表的PRIMARY: BB001 BB002 BB003) DB新人 |
rookie168
一般會員 發表:0 回覆:3 積分:0 註冊:2010-01-07 發送簡訊給我 |
Dear 老大仔 您好,
幾點事項, 向您說明報告: 1, 刪掉的部份不需要寫回去. 2, 我司因為求方便快速, 會先建立好常用單據(例如:常用報價單), 當中會有10幾項item; 並都有各自序號, 當客戶要求報價時, 我司會使用複製單據的功能快速的先把整張常用報價單copy 到當天的日期的新單據, 此時會依客戶實際所需刪除部份item, 但被刪除的item及其序號會形成跳號, 造成客戶誤解, 所以需要將程式修改成於"存檔前" "序號重排"的功能. 3, 最後容小弟解釋一下, 因小弟欲進行email 地址變更, 沒看清楚系統提醒需重新驗證, 一不小心把99right(原發問ID)給註銷了, 後續將用 rookie168 繼續向各位前輩們請益, 謝謝~ ===================引 用 老大仔 文 章=================== 那您的0002 0004 0006 也要寫回去嗎? 假如是的話 可以在刪掉後.... 1.先用i := 0010 DownTo 0001來判斷是否是最後一個被刪的 2.假如是的話再用j := 0001 to (i 1),然後下sql指令把你要的欄位資料Update為0001~(i 1) 僅供參考~
------
PR.Rookie |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
我常向初學者提出, 這樣的做法是無意義的, 試想, 等到資料有上萬筆時, 每次都要重排一次序號, 多累人!?
抱著序號一定要連號, 除了比較容易知道有沒有跳號外, 還有什麼功能性存在呢? 如果沒有, 為了跳號的控管 是不是還有其他方式可以達成, 想想看吧! ===================引 用 99right 文 章=================== 各為前輩們大家好, 小弟想求助各位 : 單身資料表BB透過複製產生了十筆0001~0010, 經過些許修改之後刪除了 item0002; 0004 & 0006, 希望存檔(新增或修改)時自動重新寫入 0001~0007 的序號(BB003), 請問該如何寫呢?? (BB?資料表的PRIMARY?: BB001 BB002 BB003)? DB新人 |
rookie168
一般會員 發表:0 回覆:3 積分:0 註冊:2010-01-07 發送簡訊給我 |
版主大大大 您好,
可能是小弟很努力的想把重點簡單的表達出來, 但又表達的不好~ 真是報歉~~ 但小弟的報價單身最多報個20筆就很多了(目前最多18筆, 不可能上萬筆), 而且我也沒有要控管?? 事實上 : 單身資料表前三個欄位都是PRIMARY KEY : 分別為 BB001(單別) BB002(單號) BB003(序號), 而列印出來的給客戶的報價單BODY, 只會顯示序號(BB003) 品項 單價; 數量.....等等 , "序號" 會需要排序也是 FOR 客戶要求, 因為若是報價單身共有12個item, 但序號卻出現到 "0018", 並且中間少了6個序號(少18-12=6個), 龜毛的客戶會哇哇叫, 因此小弟來這求助於各位大師. 另外, 小弟也曾想過乾脆就改要提供給客戶的報價單憑證程式就好, 因為聽說建檔程式之"單別 單號 序號"是寫在祖先裡頭, 但是這時又考慮到 ISO 建檔資料與產出憑證內容不符的問題, 只好回頭想如何改建檔程式, 並且改在"存檔"前最後一刻, 強迫 直接將資料庫的序號改掉, 應該就全部相安無事了, 這就是整個故事及小弟的想法了... 謝謝~~ ===================引 用 P.D. 文 章=================== 我常向初學者提出, 這樣的做法是無意義的, 試想, 等到資料有上萬筆時, 每次都要重排一次序號, 多累人!? 抱著序號一定要連號, 除了比較容易知道有沒有跳號外, 還有什麼功能性存在呢? 如果沒有, 為了跳號的控管 是不是還有其他方式可以達成, 想想看吧! ===================引 用 99right 文 章=================== 各為前輩們大家好, 小弟想求助各位 : 單身資料表BB透過複製產生了十筆0001~0010, 經過些許修改之後刪除了 item0002; 0004 & 0006, 希望存檔(新增或修改)時自動重新寫入 0001~0007 的序號(BB003), 請問該如何寫呢?? (BB?資料表的PRIMARY?: BB001 BB002 BB003)? DB新人
------
PR.Rookie |
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
TO GrandRURU 前輩:
噢~看來我也會錯意了XD 我原本以為只是在10筆的範圍內 以為...因為少了三筆資料 所以從後面數回去到最後被刪掉的那一筆 然後再 1(0007) 唉唉~~會錯意了 請別在意我的第一篇回應囉~ Sorry~ ps:您稱我為”大”...小弟我擔當不起啊 我也只是個初學者而已 ===================引 用 GrandRURU 文 章=================== 老大仔大您好,如果是把號碼重編的話,會不會比較快呢? 還是我搞錯題意的樣子? 因為有點看不懂… 1.先用i := 0010 DownTo 0001來判斷是否是最後一個被刪的 ↑這是要利用旗標把之前刪除過的id先存起來嗎? 2.假如是的話再用j := 0001 to (i 1),然後下sql指令把你要的欄位資料Update為0001~(i 1) ↑想不太出來這要如何轉成delphi語法 還麻煩老大仔大大賜教,謝謝囉! ===================引 用 老大仔 文 章=================== 那您的0002 0004 0006 也要寫回去嗎? 假如是的話 可以在刪掉後.... 1.先用i := 0010 DownTo 0001來判斷是否是最後一個被刪的 2.假如是的話再用j := 0001 to (i 1),然後下sql指令把你要的欄位資料Update為0001~(i 1) 僅供參考~
編輯記錄
老大仔 重新編輯於 2010-01-08 09:26:17, 註解 無‧
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
嗯...不知道我這樣想對不對
以下供參考~ 先把您要的資料(序號(BB003) ?品項 ?單價; 數量.....等等) Select出來放到某個Dataset中 並且在Select 當中再自行加入一個新的欄位(Ex:序號2) 之後再用迴圈0~12一一的把數值填入"序號2"中 要列印出來時,只需要把"序號(BB003)"設隱藏就好了 如此一來 序號2應該可以偷偷的代替掉序號了@@ 不知這樣行不行的通= = ===================引 用 rookie168 文 章=================== 版主大大大 您好, 可能是小弟很努力的想把重點簡單的表達出來, 但又表達的不好~?真是報歉~~ 但小弟的報價單身最多報個20筆就很多了(目前最多18筆, 不可能上萬筆), 而且我也沒有要控管?? 事實上 : 單身資料表前三個欄位都是PRIMARY KEY : 分別為 BB001(單別) BB002(單號) BB003(序號), 而列印出來的給客戶的報價單BODY, 只會顯示序號(BB003) ?品項 ?單價; 數量.....等等?, "序號" 會需要排序也是 FOR 客戶要求, 因為若是報價單身共有12個item, 但序號卻出現到 "0018", 並且中間少了6個序號(少18-12=6個), 龜毛的客戶會哇哇叫, 因此小弟來這求助於各位大師. 另外, 小弟也曾想過乾脆就改要提供給客戶的報價單憑證程式就好, 因為聽說建檔程式之"單別 單號 序號"是寫在祖先裡頭, 但是這時又考慮到 ISO 建檔資料與產出憑證內容不符的問題, 只好回頭想如何改建檔程式, 並且改在"存檔"前最後一刻, 強迫 直接將資料庫的序號改掉, 應該就全部相安無事了, 這就是整個故事及小弟的想法了... 謝謝~~ ===================引 用 P.D. 文 章=================== 我常向初學者提出, 這樣的做法是無意義的, 試想, 等到資料有上萬筆時, 每次都要重排一次序號, 多累人!? 抱著序號一定要連號, 除了比較容易知道有沒有跳號外, 還有什麼功能性存在呢? 如果沒有, 為了跳號的控管 是不是還有其他方式可以達成, 想想看吧! ===================引 用 99right 文 章=================== 各為前輩們大家好, 小弟想求助各位 : 單身資料表BB透過複製產生了十筆0001~0010, 經過些許修改之後刪除了 item0002; 0004 & 0006, 希望存檔(新增或修改)時自動重新寫入 0001~0007 的序號(BB003), 請問該如何寫呢?? (BB?資料表的PRIMARY?: BB001 BB002 BB003)? DB新人 |
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
依個人經驗,連號序號對 DB 實無意義,但確有實際的需求。
例如本例,客戶並不想依”單別+單號+品號”做排序, 因對客戶而言,品名及品項(序號)較有意義,品號只是電腦作業的需求。 又例如會計傳票之單身,若不編序號,無法 Unique;若在中間刪除或插入, 則序號便須重編,否則難符會計之需求。 小弟重編序號的方法是: 若是插入,先將該位置序號及其後者,由後往前各加一,再做插入新錄,序號為原插入位置之序號。 若是新增於最後,則直接加入新錄,序號為原有各錄之最大號加一。 若是刪除,則刪除後,該序號之後各錄,由前往後各減一。 須注意的是:做此流程時,須鎖住該批單身資料各錄,以防網路多人作業發生錯誤。 |
rookie168
一般會員 發表:0 回覆:3 積分:0 註冊:2010-01-07 發送簡訊給我 |
Pedro大 您好,
感謝您的指點, 幾點事項向您說明報告: 1, 表身序號重新寫入的用意是 : 新增單據方式為透過複製舊單據產生後, 開始進行編修資料, 但單身之序號欄位(BB003)只可顯示,不給修改, 所以經過刪除修改後造成中間有被刪除的item序號跳號. 2, 單據想要存檔時, 同時重新排序的欄位已經存在, 即 : BB003 3, 您指導的方式, 小弟覺得好像比較接近可行, 但礙於剛在學習階段, 無法完全理解, 可否請您依照小弟 目前的環境狀況, 再詳述一下作法及完整的語法 感謝您!! ===================引 用 pedro 文 章=================== 您好 表身寫入檔的用意是? 我的作法是,表身依單號 產品編號為key 然後用虛欄位, 在DataSet.OnCalcFields事件裡,動態賦予序號 如此不管刪了那一筆次序會自動重排 試看看是不是你要的? procedure cdsDetailCalcFields(DataSet: TDataSet); begin cdsDetailvSNo.Value:=IntToStr(cdsDetail.RecNo); end; ===================引 用 99right 文 章=================== 各為前輩們大家好, 小弟想求助各位 : 單身資料表BB透過複製產生了十筆0001~0010, 經過些許修改之後刪除了 item0002; 0004 & 0006, 希望存檔(新增或修改)時自動重新寫入 0001~0007 的序號(BB003), 請問該如何寫呢? (BB資料表的PRIMARY: BB001 BB002 BB003) DB新人
------
PR.Rookie |
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
hi rookie168
事實上,我提的作法與P.D.版主建議的一樣,不存入流水序的方式,既然是計算欄位, 只是方便使用者閱讀和列印,在資料表是不存在的欄位 如果照herbert2大,所提,會有一些額外的動作需處理, 就如您2.的構想一樣,需用迴圈看表身從頭計數到尾 ===================引 用 rookie168 文 章=================== Pedro大 您好, 感謝您的指點, 幾點事項向您說明報告: 1, 表身序號重新寫入的用意是 :?新增單據方式為透過複製舊單據產生後, 開始進行編修資料, 但單身之序號欄位(BB003)只可顯示,不給修改, 所以經過刪除修改後造成中間有被刪除的item序號跳號. 2, 單據想要存檔時, 同時重新排序的欄位已經存在, 即 : BB003? 3, 您指導的方式, 小弟覺得好像比較接近可行, 但礙於剛在學習階段, 無法完全理解, 可否請您依照小弟 ??? 目前的環境狀況, 再詳述一下作法及完整的語法 感謝您!! ===================引 用 pedro 文 章=================== 您好 表身寫入檔的用意是? 我的作法是,表身依單號 產品編號為key 然後用虛欄位, 在DataSet.OnCalcFields事件裡,動態賦予序號 如此不管刪了那一筆次序會自動重排 試看看是不是你要的? procedure cdsDetailCalcFields(DataSet: TDataSet); begin cdsDetailvSNo.Value:=IntToStr(cdsDetail.RecNo); end;
編輯記錄
pedro 重新編輯於 2010-01-09 08:22:41, 註解 無‧
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
其實你的描述已經非常清楚了, 所以無須抱歉啦!
我提這檔觀念是因為接過太多這樣的案例, 我都向客戶解釋電腦資料處理的要點在那裡? 早之前大家會要求序號連號是因為手工作業不易管理, 所以最直接的引用序號控管是人力 目視上都容易察覺的出來的, 但把人工的觀念引入資訊流中是否恰當, 這值得三思, 往往就是 因為人工的觀念害的電腦設計為配合這樣的不合適的流程, 而引發敗筆 雖然現實面上還是有很多業主要求要連號, 在此提供你一個方法 只要你能確保操作者輸入的資料可以正常保存, 不妨流水號由報表產生, 這樣不管對方如何輸入, 印出來都一定會是連號, 當然這只是為應付像你提到這麼龜毛的客戶 或者利用一個calcfiled 來產生流水號, 提供你參考 ===================引 用 rookie168 文 章=================== 版主大大大 您好, 可能是小弟很努力的想把重點簡單的表達出來, 但又表達的不好~?真是報歉~~ 但小弟的報價單身最多報個20筆就很多了(目前最多18筆, 不可能上萬筆), 而且我也沒有要控管?? 事實上 : 單身資料表前三個欄位都是PRIMARY KEY : 分別為 BB001(單別) BB002(單號) BB003(序號), 而列印出來的給客戶的報價單BODY, 只會顯示序號(BB003) ?品項 ?單價; 數量.....等等?, "序號" 會需要排序也是 FOR 客戶要求, 因為若是報價單身共有12個item, 但序號卻出現到 "0018", 並且中間少了6個序號(少18-12=6個), 龜毛的客戶會哇哇叫, 因此小弟來這求助於各位大師. 另外, 小弟也曾想過乾脆就改要提供給客戶的報價單憑證程式就好, 因為聽說建檔程式之"單別 單號 序號"是寫在祖先裡頭, 但是這時又考慮到 ISO 建檔資料與產出憑證內容不符的問題, 只好回頭想如何改建檔程式, 並且改在"存檔"前最後一刻, 強迫 直接將資料庫的序號改掉, 應該就全部相安無事了, 這就是整個故事及小弟的想法了... 謝謝~~ |
pillar62
資深會員 發表:9 回覆:324 積分:271 註冊:2002-04-15 發送簡訊給我 |
|
ANDY8C
資深會員 發表:114 回覆:582 積分:299 註冊:2006-10-29 發送簡訊給我 |
您只是要讓報價單的 "項次" 號碼連貫, 建議不要去重寫 PRIMARY KEY,工程浩大 如其它前輩所言,另開一欄位,可以輸入號碼,好處是可以自己輸入項次, 要把某幾筆屬性一樣的資料連號在一起,也可以手工調整 例 : 項次 ------ 01 02 03 ...... 或 項次 ------ A01 A02 B01 B02 ...... 結論是 : 1. 電腦產生的 PRIMARY KEY 是 目前最大號,繼續往下 1 2. 印表的項次序號,由另一欄位可輸入調整,隨時可以更改
------
--------------------------------------- 偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |