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

DBF 在新增或修改時,如何做到鍵值重複檢查?

答題得分者是:Justmade
MCDU
一般會員


發表:10
回覆:7
積分:3
註冊:2003-06-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-18 11:21:31 IP:211.21.xxx.xxx 未訂閱
問題說明:  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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-18 11:36:45 IP:61.66.xxx.xxx 未訂閱
引言: 問題說明: 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-18 13:50:36 IP:211.21.xxx.xxx 未訂閱
addCh('')我是將> >
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-18 14:32:23 IP:61.30.xxx.xxx 未訂閱
你好: 你該在 BeforePost 事件內檢查是否重複,如果 有重複則下 Abort 指定中斷.希望對你有幫助
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-18 14:47:15 IP:218.16.xxx.xxx 未訂閱
這是因為你 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-18 15:58:45 IP:211.21.xxx.xxx 未訂閱
謝謝版主及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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-18 16:40:11 IP:218.16.xxx.xxx 未訂閱
要辦法當然有但總比兩個 DataSet 煩 , 如 : 1. 用 Edit 不用 DBEdit / DBGrid 來增改,Locate 後才 Insert / Edit (要先用 BookMark 記住再返回)。 2. before post 用變數裝著然後 Cancel, Locate 後才 Insert / Edit 3. 找非 BDE 的第三者元件來試 等等 我覺得始終用兩個 dataset 較易。
系統時間:2024-11-23 12:29:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!