|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
sken
註冊時間: 2004-02-17 文章: 67
第 31 樓
|
發表於: 星期四 九月 26, 2019 1:49 pm 文章主題: |
|
|
CPS0204 寫到: | 有個解決方法就是,使用DBF 的索引檔,把主鍵設為單號,就可解ˋ決99.9% |
但syntech兄 說可以100.0%ㄟ(還是條件不同?) |
|
回頂端 |
|
|
ezpos
註冊時間: 2011-04-20 文章: 323
第 32 樓
|
發表於: 星期四 九月 26, 2019 2:51 pm 文章主題: |
|
|
CPS0204 寫到: | 小弟就是使用者按下存檔後,立刻取得新單號,並存檔更新,但還是會發生單號重複!
==============================
1.若是你是使用dbf (FILE-SERVER)的方式就無解,即使是NOVELL.同時50人按紐也會搶號!
有個解決方法就是,使用DBF 的索引檔,把主鍵設為單號,就可解ˋ決99.9%
剩餘0.1% 還是無解,因為DBF 模式,是將SERVER COPY 至本機來暫存, 在RAM,快取記億體中都會造成誤判,我已試過好幾年,一年當中約會有 1-2筆重覆,不管如何鎖定,解鎖都會搶號!
2.若是SQL SERVER就簡單多了,在 SQL SERVER上,將單號設為PK鍵即可,!
寫入時若 SQLEXEC() 回傳 -1,就是搶號了,再去執行跳號的程序即可! |
我使用第二個方式 ,專門的table管理流水號
基本上,沒聽說過有重複的現象 _________________ ezPos收銀機 簡單好用低成本 http://www.ezpos.info
全新美觀的POS收銀機.POS軟硬體耗材.
軟體客制化.網站規劃....能賺錢的都可以找我
http://www.twelife.com 台灣生活網 |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4225 來自: Taipei,Taiwan
第 33 樓
|
發表於: 星期四 九月 26, 2019 4:04 pm 文章主題: |
|
|
sken 寫到: | CPS0204 寫到: | 有個解決方法就是,使用DBF 的索引檔,把主鍵設為單號,就可解ˋ決99.9% |
但syntech兄 說可以100.0%ㄟ(還是條件不同?) |
因為有一段你沒注意到,少那一段就變成普通作法一樣了
做成 pk 其實就除了硬體問題外,可以說是 99.9999......... % 了
那就四捨五入吧 _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
CPS0204
註冊時間: 2014-08-24 文章: 451
第 34 樓
|
發表於: 星期五 九月 27, 2019 9:43 am 文章主題: |
|
|
相信我,使用dbf 的TABLE (非SQL SERVER) 的 rlock(),flock()在多人版本時,一定會有幾筆會重號,由其多人在輸單時!
一定要相信我,使用DBF一定會0.1%機率會相同流水號!
例:存檔時先 FLOCK() ,幾秒, 再SELECT * FROM ...在抓一次,再判斷最後一號+1,再存檔,還是會有遺漏!個人覺得是WINDOW版的FOXPRO 沒考率到有記億體的快取,硬碟的快取,還有網卡的快取,及 SERVER 上的I/O快取.....都會造成不同的誤判(不符合人期待)的誤判!所以MS 後來才一直推廣,SERVER請上移至 SQL SERVER,不要再用FILE-SERVER
後來改成SQL SERVER(PK KEY) 後,就沒有搶號問題了!
-
另外一個思考模式:將流水好由A00001->A00006 改為 A+(登錄者代號)+流水號
其中限制:不準兩個相同帳號同時登錄,這很簡單控制
新單號變為 AU001-00001 到 AXXXX-99999 (當中的U001為使用者註冊在本ERP的唯一流水號,不可重覆,長度可自由設定),這樣即使最後5碼相同,但完整碼,是不同的,也可避開錯誤點!
這樣當作銷貨單頭的流水號,應可保證(完整碼)是唯一的!
例:有機會存檔到 AU001-00008,與 AU234-00008 在資料庫,看起來很奇怪,但不會影想唯一性 |
|
回頂端 |
|
|
sken
註冊時間: 2004-02-17 文章: 67
第 35 樓
|
發表於: 星期五 九月 27, 2019 5:08 pm 文章主題: |
|
|
CPS0204 寫到: | 相信我,使用dbf 的TABLE (非SQL SERVER) 的 rlock(),flock()在多人版本時,一定會有幾筆會重號,由其多人在輸單時!
一定要相信我,使用DBF一定會0.1%機率會相同流水號!
[/color] |
我相信你~
我一定相信你!
只是我使用file-server,20年了~ 還有機會改SQL server嗎?
前輩留給我時,告訴我資料庫維護是必要的,單號本來就會重複,所以才需要我們ㄚ!ㄎ ㄎ |
|
回頂端 |
|
|
CPS0204
註冊時間: 2014-08-24 文章: 451
第 36 樓
|
發表於: 星期六 九月 28, 2019 8:38 am 文章主題: |
|
|
自刪除 |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4225 來自: Taipei,Taiwan
第 37 樓
|
發表於: 星期六 九月 28, 2019 10:15 am 文章主題: |
|
|
sken 寫到: |
只是我使用file-server,20年了~ 還有機會改SQL server嗎?
前輩留給我時,告訴我資料庫維護是必要的,單號本來就會重複,所以才需要我們ㄚ!ㄎ ㄎ |
我支持你前輩.
系統做到沒出問題,
連年度保護費都會收不到
Orz _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
goodnight
註冊時間: 2008-10-13 文章: 472 來自: 台南市
第 38 樓
|
發表於: 星期五 十月 04, 2019 11:35 am 文章主題: |
|
|
garfield 寫到: | 引言回覆: |
如果我寫了一個註記, 剛好我又不正常離開, 註記沒有被清除, 那後面的人要怎麼辦?
|
應該在寫入註記時順便寫入有效期限, 只要超過有效期限的是可以被清除的. |
果然薑還是老的辣~~ _________________ 希望有更多人來參與
VFP wiki - 需要大家一起完成的VFP電子書與FAQ |
|
回頂端 |
|
|
goodnight
註冊時間: 2008-10-13 文章: 472 來自: 台南市
第 39 樓
|
發表於: 星期五 十月 04, 2019 11:43 am 文章主題: |
|
|
至於單據號碼的問題, 我好像有看過這種做法, 不知道好不好用
新增時產生一個單號 -> 寫入時確定現有的單號有沒有存在
Y: 已存在, 表示已經有人寫入了, 重新產生單號, 並出現訊息告知 user
N: 不存在, 直接寫入並結案 _________________ 希望有更多人來參與
VFP wiki - 需要大家一起完成的VFP電子書與FAQ |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4225 來自: Taipei,Taiwan
第 40 樓
|
發表於: 星期一 十月 07, 2019 10:01 am 文章主題: |
|
|
目前我是這樣搞的.
1. 資料 table: A, 資料TABLE 結構相同的暫存檔 A', 用來驗證唯一性的TABLE B (BUFFER MODE = 0,直接寫入)
作法:
1.新增時,由A 及B 找出最大的號碼,例如:01,把01+1,例如02寫入B,
2.因為B 中記錄不可重複,所以網路上其他工作站同時新增02時會收到錯誤,再把02+1再寫入B,
以此類推,所有工作站都不會重複
3.新增時先把資料通通打到A',最後再一次寫回A
4.取消或是存檔後,把B中的記錄清除.
5.萬一遇到斷電,02當然就會卡在B中,請使用者執行"重整"(為了隱藏真實作業的偽功能),在裡面做清除B記錄的動作
當然你可以變化一下,
例如B裡加上工作站IP,寫入時間,......輔助你控制B,
但原理不會相差太多
如果變成SQL版,那就是B中的單號或是其他你想控制的欄位做成PRIMARY KEY,
一樣,當網路上其他工作站要插入同一個單號,
就會跳出錯誤,就給他+1再存一次,直到存進去.
最後也是清除掉B中的記錄
----
註1: A' 與A 的問題,可以自己想一想.
註2: DBF 在後來的版本也可以建PRIMARY KEY _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
CPS0204
註冊時間: 2014-08-24 文章: 451
第 41 樓
|
發表於: 星期三 十月 09, 2019 10:33 am 文章主題: |
|
|
1.若是dbf 有設為INDEX 的PK KEY,還是會重覆
因為:區域網路上的遠端FILE SERVER,有CACHE RAM,你的PC上也有CACHE RAM (硬碟+RAM),兩者的INDEX 現有狀況的同步化不清楚(因是VFOX後台在做同步的,每幾秒或每幾毫秒,同步一次不會知道),既然無法100%保證CACHE 同步,所以還是會有小機率造成存檔刷新不同步,兩個人同時搶到同樣的流水號!
即使使用RLOCK,FLOCK 也是一樣,本人每年都要處理1-2筆的重號問題!苦不堪言
2.解決方法: 改由 SQL-SERVER 的PK KEY! |
|
回頂端 |
|
|
ezpos
註冊時間: 2011-04-20 文章: 323
第 42 樓
|
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4225 來自: Taipei,Taiwan
第 43 樓
|
發表於: 星期二 十月 15, 2019 4:26 pm 文章主題: |
|
|
CPS0204 寫到: | 1.若是dbf 有設為INDEX 的PK KEY,還是會重覆
因為:區域網路上的遠端FILE SERVER,有CACHE RAM,你的PC上也有CACHE RAM (硬碟+RAM),兩者的INDEX 現有狀況的同步化不清楚(因是VFOX後台在做同步的,每幾秒或每幾毫秒,同步一次不會知道),既然無法100%保證CACHE 同步,所以還是會有小機率造成存檔刷新不同步,兩個人同時搶到同樣的流水號!
即使使用RLOCK,FLOCK 也是一樣,本人每年都要處理1-2筆的重號問題!苦不堪言
2.解決方法: 改由 SQL-SERVER 的PK KEY! |
其他的部分,
也無法強求軟體工程師都要能處理.
也不見得都無法處理,只是SERVER檔案讀寫效能會因此低落
做軟體工程師能做的就好了.
不然用VFP做一個SERVICE取得唯一單號. _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|