VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

数据库表中字段有效性检查的应用

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
xchtc



註冊時間: 2004-10-10
文章: 1


第 1 樓

發表發表於: 星期日 十月 10, 2004 6:36 pm    文章主題: 数据库表中字段有效性检查的应用 引言回覆

数据库表中字段有效性检查的应用
本文主要通过一个例子来说明数据库中的一个有很有用的功能,那就是在BORWSE中对字段进行有效性检查。数据库中还有很多的其他功能,如:记录规则、插入触发器、删除触发器、更新触发器等等。

字段级规则在字段值改变时发生作用。和触发器不同,即使数据在缓冲区中,字段级规则也可被激活。

要想使用字段级规则,首先必须保证所使用的表在某一数据库中,然后在字段规则中输入条件,当条件不成立时,则进行则会显示错误信息,信息内容可在“有效性规则”之“信息”中输入字符型内容。

本例通过字段级规则来检查用户输入的有效性,如果输入有误,则显示提示内容,并强制其修改。例如:在DDD.DBC之DDD.DBF中有一XMBH字段,字符型,宽度为6。此字段格式为“9A9999”,其第1,3,4,5,6位必须是数字,第2位必须是英语字母。因为通过表达式不能判断,现通过数据库存储过程定义一个自定义函数如下。要编辑此存储过程,先要打开数据库设计器,再在其上点击右键,弹出一快捷菜单,点击“编辑存储过程即可。其内容如下:

FUNC ZDJC(A) && "ZDJC"为字段检查,“A”为函数参数

PD1=ISDIGIT(A) && 判断左左边是不是数字

PD2=ISALPHA(SUBST(A,2,1)) && 判断“A”的第二位是不是字符

PD3=.T.

FOR I=1 TO 4

PD=ISDIGIT(SUBST(A,I+2,1)) && 判断“A”的第二位以后是不是数字

IF PD=.F.

PD3=.F.

ENDIF

ENDFOR

IF PD3=.F. .OR. PD1=.F. .OR. PD2=.F && 第1,3,4,5,6位是数字,第2位是字符

IF ALLT(A)=="" && 允许字段为空格字符

RETURN .T.

ELSE

RETURN .F.

ENDIF

ELSE

RETURN .T.

ENDIF

Endfunc

存储过程编辑完毕后,在字段有效性检查之规则内输入自字义函数“zdjc(xmbh)=.T.”,在信息内输入“"字符格式必须是:9A9999格式!"”

通过试验,在XMBH中只能输入指定格式字符或空格字符,否则不能进行存储和增加记录,包括使用APPEND BLANK、REPLACE等命令。
回頂端
檢視會員個人資料 發送私人訊息
朱育興



註冊時間: 2003-08-25
文章: 661
來自: 台中市大里區

第 2 樓

發表發表於: 星期日 十月 10, 2004 9:22 pm    文章主題: 引言回覆

對不起啊!看繁體還是比較直覺,所以就多此一舉把它轉成繁體了。


資料庫的資料表格中欄位有效性檢查的應用
本文主要通過一個範例來說明資料庫中的一個有很有用的功能,那就是在 BROWSE 中對欄位進行有效性檢查。資料庫中還有很多的其他功能,如:記錄規則、插入觸發器、刪除觸發器、更新觸發器等等。

欄位級規則在欄位值改變時發生作用。和觸發器不同,即使資料在緩衝區中,欄位級規則也可被啟動。

要想使用欄位級規則,首先必須保證所使用的資料表格在某一資料庫中,然後在欄位規則中輸入條件,當條件不成立時,則會顯示錯誤訊息,訊息內容可在「有效性規則」之「訊息」中輸入字元型內容。

本例通過欄位級規則來檢查使用者輸入的有效性,如果輸入有誤,則顯示提示內容,並強制其修改。例如:在 DDD.DBC 之 DDD.DBF 中有一 XMBH 欄位,字元型,寬度為 6。此欄位格式為「9A9999」,其第 1、3、4、5、6 位必須是數字,第 2 位必須是英文字母。因為透過運算式不能判斷,現透過資料庫儲存式程序定義一個自定義函數如下。要編輯此儲存式程序,先要開啟資料庫設計工具,再在其上點擊右鍵,彈出一快捷功能表,點擊「編輯儲存式程序即可。其內容如下:

FUNC ZDJC(A) && "ZDJC"為欄位檢查,「A」為函數參數
PD1 = ISDIGIT(A)        && 判斷左邊是不是數字
PD2 = ISALPHA(SUBST(A,2,1))  && 判斷「A」的第二位是不是字元
PD3 = .T.
FOR I = 1 TO 4
 PD = ISDIGIT(SUBST(A,I+2,1)) && 判斷「A」的第二位以後是不是數字
 IF !PD
  PD3 = .F.
 ENDIF
ENDFOR
IF !PD3 OR !PD1 OR !PD2    && 第1,3,4,5,6位是數字,第2位是字元
 IF ALLT(A) == ""       && 允許欄位為空格字元
  RETURN .T.
 ELSE
  RETURN .F.
 ENDIF
ELSE
 RETURN .T.
ENDIF
Endfunc

儲存式程序編輯完畢後,在欄位有效性檢查之規則內輸入自字義函數「zdjc(xmbh)=.T.」,在訊息內輸入「"字元格式必須是:9A9999格式!"」

通過試驗,在 XMBH 中只能輸入指定格式字元或空格字元,否則不能進行儲存和增加記錄,包括使用 APPEND BLANK、REPLACE 等命令。

_________________
希望有更多人來參與
VFP wiki - 需要大家一起完成的VFP電子書與FAQ
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 MSN Messenger
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作