24h購物| | PChome| 登入
2012-12-17 12:08:15| 人氣254| 回應0 | 上一篇 | 下一篇

[技術]參數檔製作注意事項

推薦 0 收藏 0 轉貼0 訂閱站台

參數檔製作注意事項

1.   新 刪 修 查

2.   以被使用過的資料不可被刪除

3.   以被使用過的編碼, 不可重複新增

例如客戶碼 公司碼(要注意調出舊資料再新增時, 帶入的編碼要為新資料的編碼)

5.   刪除防呆功能


假設: 有張TABLE如下

A

B

C

01

UM

1

02

UMX

1

03

UMM

1

 

假設B欄位不允許重複 不論是在新增/修改時, 都要做檢核

 

該如何做

 

新增:

新增會有兩種狀況

1.         直接新增

直接把新增的值, TABLE中的值做對比就行了

可以用 要加上濾掉自己的WHERE條件的TSQL

 

2.         把舊資料調出來, 修改資料後新增

要注意, 要接受檢核的資料ID需為新鍵資料的ID, 而非舊的,

可以用 要加上濾掉自己的WHERE條件的TSQL 但是要帶入的值要為新鍵資料的ID

 

修改 假設修改03這筆資料

修改會有3種狀況

1.         B欄位改成別的值, 但沒有跟其他Table中的值重複

OK, 直接對比就行了 只是實務上不知道是否有沒有重複

所以最好這段檢核的TSQL 要加上濾掉自己的WHERE條件

2.         B欄位的值沒有改

這段檢核的TSQL 要加上濾掉自己的WHERE條件

3.         B欄位的值改成和TABLE中其他筆資料的值一致了(主要是防這塊!)

這段檢核的TSQL 要加上濾掉自己的WHERE條件

 

該如何防呢?

 

想法1(修改時)

判斷B欄位有沒有被改掉, 如果沒有就不用檢核, 如果有, 就進檢核程式

檢核程式也很簡單, 就直接拿改過後的B欄位, TABLE中的B欄位的值做對比, 如果TABLE中有這個值, 那就代表重複了, 不予修改

 

想法2(修改時)

不管B欄位有沒有改, 直接進檢核, 檢核B欄位的值是否有跟DB中的值重複

這時後就要注意, 如果我們像想法一一樣, 直接掃Table中的資料做比對, 可能會出錯

 

依照修改時可能會碰到的3種狀況逐一解釋

 

B欄位沒改, 去掃TABLE, 卻發現永遠都會掃到有重複的值

為什麼? 因為03原本就在TABLE裡面阿! 所以掃全TABLE的話, 至少會掃出03B欄位的值是重複的, 因為根本是同一筆資料嘛!

所以這時的檢核, 要加上濾掉異動那筆資料的WHERE條件, 這樣才不會掃到自己, 才有意義.

B欄位改成其他不重複的值

這個OK, 不管檢核程式有無濾掉自己, 檢核都會過

B欄位的值改成TABLE中已有的值, 造成重複

檢核程式需要濾掉自己, 不然還沒掃到別人, 光掃到自己就會造成重複了

 

所以 想法2的結論是 如果是用想法2的話 這段檢核的TSQL 要加上濾掉自己的WHERE條件

 

延伸問題

新增呢?新增的檢核如何做?

新增應該是很單純的, 直接把新增的值, TABLE中的值做對比就行了

 

如果我想把新增/修改的TSQL寫成一組共用的, 新增的TSQL也用有濾掉自己的條件TSQL, 可以嗎? 會不會遇到什麼問題呢?

應該是可以, 因為TABLE中根本還沒有新增的值, 就算有加濾掉新值的條件, 其實還是掃全部的TABLE, 應該Ok

 

但是有一個問題, 就是如果使用者是調出某筆資料再新增的話, 那要注意, 要接受檢核的資料ID需為新鍵資料的ID, 而非舊的, 否則就會一直查到自己的資料導至資料重複 無法新增@@


台長: nut
人氣(254) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: 技術 |
此分類下一篇:顯示巡覽頁(Sitemap) 的設定方法
此分類上一篇:如何 在VS2005中 使用JavaScript開日曆新視窗功能

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文