DBF 在新增或修改時,如何做到鍵值重複檢查? |
答題得分者是:Justmade
|
MCDU
一般會員 發表:10 回覆:7 積分:3 註冊:2003-06-12 發送簡訊給我 |
問題說明:
dbf1.dbf(包含兩欄 f1,f2)
f1: c2 -> index & unique
f2: c10
設計一個單檔維護畫面,使用 dbgrid 元件,希望於新增或修改時
能進行鍵值(f1)重複檢查,
參考過前人討論:重複鍵值在dbgrid的問題? (http://delphi.ktop.com.tw/topic.php?topic_id=27130)
但總覺得單檔維護功能,需開第二個 TTable 來進行 lookup 功能,較為複雜且資源浪費,不知各位先進是否還有其他解法?
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 問題說明: dbf1.dbf(包含兩欄 f1,f2) f1: c2 -> index & unique f2: c10 設計一個單檔維護畫面,使用 dbgrid 元件,希望於新增或修改時 能進行鍵值(f1)重複檢查, 參考過前人討論:重複鍵值在dbgrid的問題? (http://delphi.ktop.com.tw/topic.php?topic_id=27130) 但總覺得單檔維護功能,需開第二個 TTable 來進行 lookup 功能,較為複雜且資源浪費,不知各位先進是否還有其他解法? >>< face="Verdana, Arial, Helvetica"> 如果你不想使用兩個table來做double check的行為, 有一個方法, 這也是我用 過的 1.在新增時, 對原有的table做locate搜尋f1值, 如果有找到f1的值表示新增的 f1值有重覆了, 此時發出重覆訊息 2.修改時, 既然是修改, 表示當初值被存入時已確認沒有重覆, 所以點修改鍵時 關閉 f1 欄位可以修改的功能, 設為 readonly:=true即可, 這樣使用者就不 會去改f1值, 當然也就沒有所謂重覆的問題了 |
MCDU
一般會員 發表:10 回覆:7 積分:3 註冊:2003-06-12 發送簡訊給我 |
|
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
這是因為你 locate 時會自動 post -> validate -> post -> validate 明白為甚麼用兩個 dataset 會簡單點了罷 ? 另一個簡單的方法是 :
try DataSet.Post; except showmessage('key值有重覆'); end;你也可用 on EXXXXX do 來先檢查是甚麼 exception 不過很多人都不很喜歡用 exception... 發表人 - Justmade 於 2003/06/18 14:49:26 |
MCDU
一般會員 發表:10 回覆:7 積分:3 註冊:2003-06-12 發送簡訊給我 |
謝謝版主及ha0009的解答但若把重複檢查功能放在 OnBeforePost Event中,只要dbf 指標的位置一移動,就會造成所述 post -> validate -> post -> validate 的現象:若用try ... except ... 較不適用於 dbf 這種檔案,因為 dbf 之 index 設成 unique 時,新增或修改時,很像不會產生exception,其反映在dBGrid上之現象是重複鍵值之資料雖然存在但只出現一筆,這點與 Paradox 現象不同,因為 Paradox 的欄位只要設成 unique key ,新增或修改時若為重複鍵值會產生exception,為確保使用者輸入鍵值時,能多一層檢查,因而post 這個問題,希望各位先進多多指教!
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |