  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		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  | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |