Database 版 (精华区)
发信人: sleep (休息休息), 信区: Database
标 题: 3.在 row bufferring mode下,如何在Primary key 欄
发信站: 哈工大紫丁香 (2000年12月04日13:51:51 星期一), 站内信件
3.在 row bufferring mode下,如何在Primary key 欄位輸完後,立即進行重覆性檢查 ?
VFP提供的buffer mode能夠提供開發人員無比的彈性,如果您為某一個Table建立了Primary key,在資料存檔時,VFP便會自動替您進行重覆性的檢查。但在實務開發上,開發人員都希望能夠在使用者一輸入主鍵時,立即進行重覆性的檢查。
例如:在客戶主檔中,客戶編號為其Primary key,所以在FORM上,希望使用者一輸入客戶編號時,要立即進行代碼的重覆性檢查。為了維護上的方便,大多數人都會把客戶主檔設成為row bufferring ,這是一個明智的做法,但是會遇到幾個難題:
把代碼重覆性檢查的程式碼放在FORM上的客戶代碼欄位的Valid event中,那麼您可能會這樣來撰寫:
SELECT <客戶主檔>
SEEK THIS.VALUE
IF FOUND()
=MESSAGEBOX("客戶代碼重覆!")
RETURN 0
ENDIF
RETURN .T.
由於row bufferring的關係,
當您的記錄指標一移動時,VFP會自動幫您COMMIT(把Buffer中的資料存入table)。所以,如果使用者所輸入的代碼是合法,則不會出現錯誤訊息,但是因為SEEK命令會已把您的記錄指標移動,VFP自動COMMIT的關係,資料已經存入檔案中,此時使用者如果選擇取消,就算您執行了
TABLEREVERT(.T.),也會發現它並沒有作用(因為並無資料在 row buffer中)。
把代碼重覆性檢查的程式碼放在table的Insert Trigger 。
這是一個較正規的做法,不過因為Insert Trigger是在資料存檔(Commit)時才會被觸發,所以如果使用者輸入的客戶代碼是重覆的,那麼他在存檔之前是不會知道,一直到他按下存檔按鈕時,VFP才會觸發Insert Trigger,然後才去執行您的處理程式。
技巧說明:
為了要能夠讓使用者一輸完客戶代碼後,立即進行重覆性檢查,這段程式碼勢必要放在Valid Event中,另外,要避免row buffer情況下,SEEK指令會移動記錄指標,而導致VFP會自動COMMIT,筆者利用USE <table>
AGAIN的方式,在另一個工作區開啟相同的檔案,如此便能夠利用SEEK命令來搜尋,又能解決上述的問題。
程式範例
此處所列的為一範例,希望各位會員能夠融會貫通,自行來運用。
FORM1.custom_id.VALID
LOCAL lValid
lValid = .T.
USE <custom> AGAIN ALIAS custom2
SELECT custom2
SEEK THIS.VALUE
IF FOUND()
= MESSAGEBOX("客戶代碼重覆 !",48)
lValid = 0
ENDIF
SELECT custom2
USE
SELECT custom
RETURN lValid
--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.227.121]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.174毫秒