3.1 VFP6.0表
1. 表的概念
表(數(shù)據(jù)表):
是指存放在磁盤文件中的一張二維表。(相當(dāng)FoxPro 2.x 版本中的數(shù)據(jù)庫(kù))
自由表:不屬于任何數(shù)據(jù)庫(kù)的表。
數(shù)據(jù)庫(kù)表:包含在一個(gè)數(shù)據(jù)庫(kù)中的表。
表文件名:
表名可以由字母、數(shù)字或下劃線組成,系統(tǒng)自動(dòng)給出的擴(kuò)展名為 .DBF。
備注文件名:
當(dāng)表中有備注型或通用型字段時(shí),系統(tǒng)自動(dòng)生成與所屬數(shù)據(jù)表的表名相同、擴(kuò)展名為:.FPT的文件名。
表結(jié)構(gòu):存儲(chǔ)表記錄的公共結(jié)構(gòu)。(就是指一張表的表頭結(jié)構(gòu),即字段的屬性)。
記錄:表中的一行。它是多個(gè)字段的集合,同一張表的每個(gè)記錄都有相同的字段。
字段:表中的一列。它規(guī)定了數(shù)據(jù)的特征。
關(guān)系型數(shù)據(jù)表的特點(diǎn):
(1)每一個(gè)字段不可再分解,也不能有名字相同的字段;
(2)每一列中的數(shù)據(jù)都有相同的數(shù)據(jù)類型;
(3)表中沒有內(nèi)容完全相同的行(記錄)。
2. 字段的基本屬性
字段的屬性:
包括:字段名、數(shù)據(jù)類型、字段寬度、小數(shù)位數(shù)、空值支持
字段名:
即每個(gè)字段的名字,必須以字母開頭,可由字母、數(shù)字、下劃線組合而成,字母大、小寫無(wú)區(qū)別,但其中不許有空格或其它字符。自由表的字段名最多由10個(gè)字符組成,數(shù)據(jù)庫(kù)表的字段名支持長(zhǎng)名,最多可達(dá)128個(gè)字符。如果從數(shù)據(jù)庫(kù)中移去一個(gè)表,那么此表的長(zhǎng)字段名將被截短成 10 個(gè)字符。
VFP允許長(zhǎng)字段名和長(zhǎng)表名,但使用長(zhǎng)名稱對(duì)于跨平臺(tái)的操作可能遇到難以預(yù)料的結(jié)果。
數(shù)據(jù)類型:指該字段的數(shù)據(jù)特征。
字段寬度:指該字段所能容納數(shù)據(jù)的的最大字節(jié)數(shù)。
小數(shù)位數(shù):指數(shù)值型數(shù)據(jù)將保留幾位小數(shù)。此時(shí)的字段寬度 = 整數(shù)位數(shù)+1+小數(shù)位數(shù)。
NULL 值(空值):
無(wú)明確的值。NULL 值不等同于零或空格。一個(gè) NULL 值不能認(rèn)為比某個(gè)值(包括另一個(gè) NULL 值)大或小,相等或不同。
VFP 6.0表中字段的數(shù)據(jù)類型
字段類型
代號(hào) 說(shuō)明
字段寬度
使用示例
字符型 C
字母、漢字和數(shù)字型文本 每個(gè)字符為1個(gè)字節(jié),最多可有 254 個(gè)字符 學(xué)生的學(xué)號(hào)或姓名, "8199101" 或 ‘李立‘
貨幣型 Y
貨幣單位 8 個(gè)字節(jié) 工資, $1246.89
日期型 D
包含有年、月和日的數(shù)據(jù) 8 個(gè)字節(jié) 出生日期,
{02/25/2000}
日期時(shí)間型 T
包含有年、月、日、時(shí)、分、秒的數(shù)據(jù) 8 個(gè)字節(jié) 上班時(shí)間,
{02/25/2000 9:15:15 AM}
邏輯型 L
“真”或“假”的布爾值 1 個(gè)字節(jié) 課程是否為必修課,
.T. 或 .F.
數(shù)值型 N
整數(shù)或小數(shù) 在內(nèi)存中占 8 個(gè)字節(jié);在表中占1 至20個(gè)字節(jié) 考試成績(jī), 83.5
雙精度型 B
雙精度浮點(diǎn)數(shù) 8 個(gè)字節(jié) 實(shí)驗(yàn)要求的高精度數(shù)據(jù)
浮點(diǎn)型 F
與數(shù)值型一樣
整型 I
不帶小數(shù)點(diǎn)的數(shù)值 4 個(gè)字節(jié) 學(xué)生的數(shù)量
通用型 G
OLE 對(duì)象 在表中占 4 個(gè)字節(jié) 圖片或聲音
備注型 M
不定長(zhǎng)度的一段文字 在表中占 4 個(gè)字節(jié) 學(xué)生簡(jiǎn)歷
字符型(二進(jìn)制) C
任意不經(jīng)過(guò)代碼頁(yè)修改而維護(hù)的字符數(shù)據(jù) 每個(gè)字符用1個(gè)字節(jié),最多可有 254 個(gè)字符
備注型(二進(jìn)制) M
任意不經(jīng)過(guò)代碼頁(yè)修改而維護(hù)的備注數(shù)據(jù) 在表中占 4 個(gè)字節(jié)
3. 表的基本操作
表的創(chuàng)建:設(shè)計(jì)表名和表結(jié)構(gòu)、輸入記錄、建立索引
數(shù)據(jù)維護(hù):增加記錄、修改記錄、刪除記錄
創(chuàng)建表的主要步驟: 設(shè)計(jì)表結(jié)構(gòu) → 輸入記錄 → 建立索引 → 數(shù)據(jù)維護(hù)
4.關(guān)于表操作的幾個(gè)基本命令
命令格式
功能
CREATE 表文件名 創(chuàng)建一個(gè)新的自由表的結(jié)構(gòu)
USE 表文件名 打開指定的表文件
USE 關(guān)閉當(dāng)前表文件
LIST ALL 顯示當(dāng)前表的全部記錄內(nèi)容(類似于DOS 命令中的dir)
DISPLAY ALL 分屏式地顯示當(dāng)前表的全部記錄內(nèi)容(類似于DOS中的dir/p)
DISPLAY STRUCTURE 顯示當(dāng)前表的結(jié)構(gòu)(分屏顯示)
LIST STRUCTURE 顯示當(dāng)前表的結(jié)構(gòu)(不分屏顯示)
MODIFY STRUCTURE 調(diào)出表設(shè)計(jì)器,修改當(dāng)前表的結(jié)構(gòu)。
CLEAR 清除主窗口中的所有內(nèi)容
注意:
(1)必須先打開所需的數(shù)據(jù)表才可進(jìn)行以上操作;
(2)當(dāng)帶有命令子句時(shí),只對(duì)指定的記錄進(jìn)行操作;
(3)LIST 命令的默認(rèn)范圍是所有記錄,DISPLAY 命令的默認(rèn)范圍是當(dāng)前記錄。
3.2 表結(jié)構(gòu)的創(chuàng)建和修改
1. 表結(jié)構(gòu)的創(chuàng)建
創(chuàng)建表結(jié)構(gòu)其實(shí)就是設(shè)計(jì)字段的基本屬性??梢允褂帽碓O(shè)計(jì)器、表向?qū)?lái)創(chuàng)建表結(jié)構(gòu)。
(1)使用表設(shè)計(jì)器創(chuàng)建表
步驟:
從文件菜單中單擊新建 → 在新建對(duì)話框中選擇表并單擊新文件 → 在創(chuàng)建對(duì)話框中給出文件名并確定所需的保存位置 → 在表設(shè)計(jì)器對(duì)話框中逐個(gè)輸入所需字段(用↓或鼠標(biāo)換行),全部字段輸入完成后單擊確定。
(2)使用表向?qū)?chuàng)建表
步驟:
從文件菜單中單擊新建 → 在新建對(duì)話框中選擇表并單擊向?qū)?#8594;在表向?qū)е凶龅?步:選取字段,完成后單擊下一步 → 在表向?qū)е凶龅?a步:選擇數(shù)據(jù)庫(kù),完成后單擊下一步 → 在表向?qū)е凶龅?步:修改字段設(shè)置,完成后單擊下一步 → 在表向?qū)е凶龅?步:為表建索引,完成后單擊下一步 → 在表向?qū)е凶龅?步:完成,選擇表的保存方法,完成后單擊完成 → 在另存為對(duì)話框中給出文件名并確定所需的保存位置。
注意:
先選擇一個(gè)與待建數(shù)據(jù)表類似的樣表,再?gòu)闹刑暨x出所需的部分字段,然后在下一步根據(jù)實(shí)際需要修改或直接采用原字段的寬度。
2. 表結(jié)構(gòu)的修改
(1) 用菜單調(diào)出表設(shè)計(jì)器:
打開所需的表文件 → 單擊顯示菜單中的表設(shè)計(jì)器 → 在表設(shè)計(jì)器對(duì)話框中對(duì)字段進(jìn)行修改 → 修改完畢單擊確定并在消息框中選擇是。
(2) 用命令調(diào)出表設(shè)計(jì)器:
USE <表文件名>
MODIFY STRUCTURE
3.3 表記錄的處理
1. 記錄的輸入
(1) 立即輸入方式:
設(shè)計(jì)好表的結(jié)構(gòu)后,系統(tǒng)會(huì)提示是否直接進(jìn)入數(shù)據(jù)輸入狀態(tài)。若選是,則進(jìn)入編輯窗口,輸完后單擊“X”按鈕退出,系統(tǒng)自動(dòng)存盤。需輸入備注型或通用型字段的數(shù)據(jù)時(shí),雙擊“memo” 或“gen”,在新打開的編輯窗口中輸入所需內(nèi)容,輸完后單擊“X”按鈕系統(tǒng)自動(dòng)存盤,退回到原窗口 ,此時(shí)字段中的“memo” 或“gen”變成“Memo” 或“Gen”。
(2) 追加方式:
若設(shè)計(jì)好表的結(jié)構(gòu)后并沒有及時(shí)輸入數(shù)據(jù),則可以用追加方式:
從文件菜單中(或從命令窗口中輸入:USE 表文件名) 打開所需表文件 → 從顯示菜單中選擇瀏覽 → 再?gòu)娘@示菜單中選擇追加方式 → 在瀏覽窗口中輸入所需記錄。
不同追加方式適用的場(chǎng)合
追加記錄的方式
適用的場(chǎng)合
顯示菜單中的追加方式
在現(xiàn)有數(shù)據(jù)表的尾部添加一個(gè)或多個(gè)新記錄
表菜單中的追加新記錄
在現(xiàn)有數(shù)據(jù)表的尾部添加一個(gè)新記錄
表菜單中的追加記錄…
從其它數(shù)據(jù)表中將符合要求(字段名和字段類型相同)的記錄添加在當(dāng)前數(shù)據(jù)表的尾部
APPEND [BLANK]
在當(dāng)前表的末尾自動(dòng)添加一個(gè)或多個(gè)新記錄。相當(dāng)于顯示菜單中的追加方式。有BLANK時(shí)添加一個(gè)空記錄,相當(dāng)于表菜單中的追加新記錄。
APPEND FROM 表文件名 [FIELDS 字段名1,字段名2 …][FOR 條件 ]
從其它數(shù)據(jù)表中將符合要求(字段名和字段類型相同)的記錄添加在當(dāng)前數(shù)據(jù)表的尾部。相當(dāng)于表菜單中的追加記錄…。
APPEND FROM 文本文件名 SDF
將符合要求的文本文件全部追加在當(dāng)前數(shù)據(jù)表的尾部。
注意:文本內(nèi)容要與表中的字段結(jié)構(gòu)相適應(yīng)。
文件菜單中的導(dǎo)入
將其它類型的文件轉(zhuǎn)換成一個(gè)完整的VFP數(shù)據(jù)表。
2. 記錄的瀏覽
(1) 通過(guò)瀏覽窗口
(2) 通過(guò)BROWSE 命令
BROWSE命令用來(lái)打開表的瀏覽窗口,可通過(guò)不同的子句來(lái)實(shí)現(xiàn)對(duì)特定記錄的瀏覽。
VFP命令中的常用子句
1) 范圍子句
子句格式
功能
ALL
表示對(duì)表文件的全部記錄進(jìn)行操作
NEXT n
表示對(duì)從當(dāng)前記錄開始的共n個(gè)記錄進(jìn)行操作, n為正整數(shù)
RECORD n
指明操作對(duì)象是表文件的第n號(hào)記錄
REST
對(duì)從當(dāng)前記錄起到文件結(jié)尾的全部記錄進(jìn)行操作
2) FOR子句
用于指明進(jìn)行操作的條件。
格式: FOR <條件>
指明只對(duì)指定范圍中那些符合給定條件的進(jìn)行當(dāng)前操作。
例如: list NEXT 6 FOR cj < 85
3) WHILE 子句
也用于指明進(jìn)行操作的條件。
格式: WHILE <條件>
例如: list NEXT 6 WHILE cj < 85
4) FIELDS 子句
用于指明當(dāng)前的操作涉及到表文件的哪些字段。
格式:BROWSE [ FIELDS 字段名1,字段名2……]
例如:BROWSE FIELDS xh,xm,cj
3. 記錄的定位
(1) 系統(tǒng)對(duì)記錄的三個(gè)控制標(biāo)志
記錄開始標(biāo)志:位于第一個(gè)記錄之前。其值用函數(shù)BOF()進(jìn)行測(cè)試。
記錄指針標(biāo)志:指向當(dāng)前記錄。其值用函數(shù)RECNO()進(jìn)行測(cè)試。
記錄結(jié)束標(biāo)志:位于最后一個(gè)記錄之后。其值用函數(shù)EOF()進(jìn)行測(cè)試。
記錄指針可以理解為保存當(dāng)前記錄號(hào)的變量,它的初始值總是1,不可能為0或負(fù)數(shù),最大值是表中記錄總數(shù)+1。
剛打開表時(shí)記錄指針的情況
表中記錄情況
BOF()的值
RECNO()的值
EOF()的值
無(wú)記錄
.T.
1
.T.
有記錄
.F.
1
.F.
(2)記錄的定位方式
絕對(duì)定位:是指把指針移到指定的位置。
相對(duì)定位:
是指把指針從當(dāng)前位置開始,相對(duì)于當(dāng)前記錄向前或向后移動(dòng)若干個(gè)記錄位置。
條件定位:
是指按一定的條件在整張表或表的某個(gè)指定范圍中查找符合該條件的記錄。
通過(guò)菜單進(jìn)行定位
從表菜單中選擇轉(zhuǎn)到記錄:記錄號(hào)——實(shí)現(xiàn)絕對(duì)定位
定位… ——實(shí)現(xiàn)條件定位
通過(guò)命令進(jìn)行定位
記錄的定位 命令格式
功能
備注
絕對(duì)定位
GO TOP
將記錄指針定位到表文件之首
或 GOTO TOP
GO BOTTOM
將記錄指針定位到表文件之尾
或GOTO BOTTOM
GO <n>
將記錄指針定位到指定的n號(hào)記錄
相對(duì)定位
SKIP <n>
將記錄指針從當(dāng)前記錄向上或向下移動(dòng)n個(gè)
n為正值則向下移動(dòng)
n為負(fù)值則向上移動(dòng)
無(wú)n向下移動(dòng) 1個(gè)
條件定位
LOCATE FOR <條件> [ 范圍 ]
按順序搜索表, 直到找到滿足指定條件的第一個(gè)記錄
默認(rèn)范圍是所有記錄
4. 記錄的修改和刪除
一張表用非只讀方式打開后,即可通過(guò)菜單在瀏覽窗口(或編輯窗口)中或從命令窗口中用命令直接對(duì)其記錄進(jìn)行編輯、修改和刪除。
(1) 菜單方式
修改記錄:
從表菜單中選擇替換字段… → 在替換字段對(duì)話框中選擇待替換的字段并構(gòu)造出替換表達(dá)式及替換條件 → 替換。
刪除記錄:
從表菜單中選擇刪除記錄 → 在刪除對(duì)話框中選擇刪除范圍和刪除條件 → 單擊刪除按鈕 → 從表菜單中選擇徹底刪除 → 在消息框中單擊是。
刪除記錄包括兩步: 標(biāo)記要?jiǎng)h除的記錄 和 徹底刪除帶刪除標(biāo)記的記錄
恢復(fù)帶刪除標(biāo)記的記錄:
從表菜單中選擇恢復(fù)記錄 → 在恢復(fù)記錄對(duì)話框中選擇作用范圍和條件 → 單擊恢復(fù)記錄按鈕。
(2) 在命令窗口中用VFP命令:
命令格式
功能
備注
插入 INSERT [BLANK][BEFORE]
在當(dāng)前表的指定位置上插入一個(gè)空記錄或若干新記錄
BLANK :在當(dāng)前記錄后插入一個(gè)空記錄
BEFORE :在當(dāng)前記錄之前插入若干新記錄
修改 CHANGE [FIELDS 字段名1,…][FOR 條件] [LEDIT] [REDIT]
在編輯窗口顯示要修改的字段
LEDIT:調(diào)出編輯窗口
REDIT:調(diào)出瀏覽窗口
替換 REPLACE 字段名1 WITH 表達(dá)式1 [ADDITIVE][, 字段名2 WITH 表達(dá)式2[ADDITIVE] …] [范圍] [FOR 條件]
把字段值用指定的表達(dá)式進(jìn)行替換。如: 工資單中給某些人長(zhǎng)工資
默認(rèn)范圍是當(dāng)前記錄
ADDITIVE:把備注字段的替換內(nèi)容添加在原備注內(nèi)容的后面
刪除 DELETE [ 范圍 ][FOR 條件]
對(duì)當(dāng)前表中指定范圍內(nèi)滿足條件的記錄加上刪除標(biāo)記 *
默認(rèn)范圍是當(dāng)前記錄
PACK [MEMO][DBF]
將所有帶刪除標(biāo)記的記錄從表中抹去(不能再恢復(fù))
DBF:不影響備注文件
MEMO:從備注文件中刪除未使用空間
ZAP
刪除當(dāng)前表中所有記錄,只留下表的結(jié)構(gòu)
相當(dāng)于
DELETE ALL + PACK
恢復(fù) RECALL [ 范圍] [FOR 條件]
取消當(dāng)前表中指定記錄上的刪除標(biāo)記
默認(rèn)范圍是當(dāng)前記錄
5. 篩選記錄和字段
(1) 用菜單方式
從表菜單中選擇屬性 → 在工作區(qū)屬性對(duì)話框中單擊數(shù)據(jù)過(guò)濾器框后的按鈕 → 在表達(dá)式生成器對(duì)話框中構(gòu)造所需的條件表達(dá)式并確定 → 單擊字段篩選…按鈕 →在字段篩選器中選擇所需字段并確定 → 單擊選項(xiàng)按鈕:字段篩選指定的字段 → 確定。
(2)用命令方式
命令格式: SET FILTER TO 條件表達(dá)式
例: SET FILTER TO xb =‘男‘
注意:SQL命令對(duì)記錄的訪問(wèn)不受此篩選命令的限制。
3.4 表的使用
1. 工作區(qū)
工作區(qū):
指用來(lái)標(biāo)識(shí)一張打開的表的區(qū)域。一個(gè)工作區(qū)在某一時(shí)刻只能打開一張表,但可以同時(shí)在多個(gè)工作區(qū)打開多張表,一張可以在多個(gè)工作區(qū)中多次被打開。每個(gè)工作區(qū)都有一個(gè)編號(hào)。
表的別名:
在工作區(qū)中打開表時(shí)為該表所定義的名稱??梢宰远x別名,否則系統(tǒng)默認(rèn)就以表名作為別名。若一張表在多個(gè)工作區(qū)中被打開,系統(tǒng)默認(rèn)在表名后依次加_a 、_b…。
自定義別名的格式: USE <表名> ALIAS <別名>
當(dāng)前工作區(qū):
正在使用的工作區(qū)??梢酝ㄟ^(guò)“數(shù)據(jù)工作期窗口”或用 SELECT命令把任何一個(gè)工作區(qū)設(shè)置為當(dāng)前工作區(qū)。
SELECT 命令格式: SELECT <工作區(qū)號(hào)>|<別名>
要操作非當(dāng)前工作區(qū)中的表,可以把其它工作區(qū)選為當(dāng)前工作區(qū),或在命令中強(qiáng)行指定工作區(qū)。
命令格式: IN <工作區(qū)號(hào)>|<別名>
ALIAS([工作區(qū)號(hào)])函數(shù):
測(cè)試指定工作區(qū)中的表的別名,無(wú)參數(shù)時(shí)指當(dāng)前工作區(qū)表的別名。
SELECT([別名])函數(shù):
測(cè)試指定別名的表所在的工作區(qū)號(hào),無(wú)參數(shù)時(shí)指當(dāng)前工作區(qū)的區(qū)號(hào)。
2. 表的打開和關(guān)閉
打開表的途徑
關(guān)閉表的途徑
文件菜單中的打開
工具欄上的打開
數(shù)據(jù)工作期窗口中關(guān)閉
USE
數(shù)據(jù)工作期窗口中打開
USE <表名>
USE IN <別名>|<工作區(qū)號(hào)>
CLOSE ALL
USE <表名> IN <工作區(qū)號(hào)>
USE <表名>AGAIN
CLOSE DATABASE
CLOSE TABLE
USE <表名> ALIAS <別名>
退出VFP系統(tǒng),則關(guān)閉所有的表
3. 表的獨(dú)占與共享使用
獨(dú)占使用: 一張表只能被一個(gè)用戶打開。VFP6.0在默認(rèn)狀態(tài)以獨(dú)占方式打開。
共享使用: 一張表可以被多個(gè)用戶同時(shí)打開。
系統(tǒng)的默認(rèn)打開方式可以通過(guò)工具菜單中的選項(xiàng)…來(lái)設(shè)置,或 用命令:
SET EXCLUSIVE OFF && 默認(rèn)打開方式為共享
SET EXCLUSIVE ON && 默認(rèn)打開方式為獨(dú)占
或強(qiáng)行打開:USE cj SHARED && 以共享方式打開cj表
USE cj EXCLUSIVE && 以獨(dú)占方式打開cj表
3.5 表的索引
1. 基本概念
記錄的順序 :
物理順序:即表中記錄的存儲(chǔ)順序。用記錄號(hào)表示。
邏輯順序:表打開后被使用時(shí)記錄的處理順序。
索 引:
指按表文件中某個(gè)關(guān)鍵字段或表達(dá)式建立記錄的邏輯順序。它是由一系列記錄號(hào)組成的一個(gè)列表,提供對(duì)數(shù)據(jù)的快速訪問(wèn)。索引不改變表中記錄的物理順序。表文件中的記錄被修改或刪除時(shí),索引文件可自動(dòng)更新。
索引關(guān)鍵字(索引表達(dá)式):用來(lái)建立索引的一個(gè)字段或字段表達(dá)式。
注意:1)用多個(gè)字段建立索引表達(dá)式時(shí),表達(dá)式的計(jì)算結(jié)果將影響索引的結(jié)果;
2)不同類型字段構(gòu)成一個(gè)表達(dá)式時(shí),必須轉(zhuǎn)換數(shù)據(jù)類型。
索引標(biāo)識(shí)(索引名):
即索引關(guān)鍵字的名稱。必須以下劃線、字母或漢字開頭,且不可超過(guò)10個(gè)字。
索引類型:主索引、候選索引、普通索引、唯一索引。
主索引:
組成主索引關(guān)鍵字的字段或表達(dá)式,在表的所有記錄中不能有重復(fù)的值。主索引只適用于數(shù)據(jù)庫(kù)表的結(jié)構(gòu)復(fù)合索引中。自由表中不可以建立主索引;數(shù)據(jù)庫(kù)中的每個(gè)表可以且只能建立一個(gè)主索引。
候選索引:
在指定的關(guān)鍵字段或表達(dá)式中不允許有重復(fù)值的索引。在數(shù)據(jù)庫(kù)表和自由表中均可為每個(gè)表建立多個(gè)候選索引。
普通索引:
也可以決定記錄的處理順序,但是允許字段中出現(xiàn)重復(fù)值。在一個(gè)表中可以加入多個(gè)普通索引。
唯一索引:
參加索引的關(guān)鍵字段或表達(dá)式在表中可以有重復(fù)值,但在索引對(duì)照表中,具有重復(fù)值的記錄僅存儲(chǔ)其中的第一個(gè)。
2. 索引的作用
用途
采用的索引類型
排序記錄,以便顯示、查詢或打印
使用普通索引、候選索引或主索引
在字段中控制重復(fù)值的輸入并對(duì)記錄排序
對(duì)數(shù)據(jù)庫(kù)表使用主索引或候選索引,對(duì)自由表使用候選索引
準(zhǔn)備設(shè)置表關(guān)系
依據(jù)表在關(guān)系中所起的作用,使用普通索引、主索引或候選索引
3.索引文件的種類
索引文件種類
特征
關(guān)鍵字?jǐn)?shù)目
限制
結(jié)構(gòu)復(fù)合索引文件
.CDX
使用和表文件名相同的基本名,隨表的打開自動(dòng)打開??梢钥闯杀斫Y(jié)構(gòu)的一部分。
多關(guān)鍵字表達(dá)式,稱為標(biāo)識(shí)。
有效表達(dá)式限制在 240 個(gè)字符之內(nèi)。
非結(jié)構(gòu)復(fù)合索引文件
.CDX
必須明確地打開,使用和表名不同的基本名。其中不能創(chuàng)建主索引
多關(guān)鍵字表達(dá)式,稱為標(biāo)識(shí)。
有效表達(dá)式限制在 符之240 個(gè)字內(nèi)。
獨(dú)立索引文件
.IDX
必須明確地打開,文件的基本名由用戶定義。一般作為臨時(shí)索引文件。
單關(guān)鍵字表達(dá)式。
有效表達(dá)式限制在 100 個(gè)字符之內(nèi)。
結(jié)構(gòu)復(fù)合索引文件(擴(kuò)展名為.CDX)的特點(diǎn):
.在創(chuàng)建索引標(biāo)識(shí)時(shí)自動(dòng)創(chuàng)建。
.在打開表時(shí)自動(dòng)打開。
.在同一索引文件中能包含多個(gè)排序方案,或索引關(guān)鍵字。
.在添加、更改或刪除記錄時(shí)自動(dòng)維護(hù)。
4. 創(chuàng)建結(jié)構(gòu)復(fù)合索引
VFP中創(chuàng)建索引文件有兩種方式:表設(shè)計(jì)器方式和命令方式。
(1)表設(shè)計(jì)器方式
打開表文件 →從顯示菜單中選擇表設(shè)計(jì)器 → 在表設(shè)計(jì)器中單擊索引 → 輸入索引名并選擇索引類型 → 選擇索引的方向(按升序或降序排列記錄) → 在表達(dá)式框中輸入作為排序依據(jù)的索引關(guān)鍵字 → 在篩選框中輸入篩選表達(dá)式 → 單擊確定,完畢。
(2) 命令方式
命令
功能
INDEX ON <索引關(guān)鍵字段> TAG <索引標(biāo)識(shí)>[FOR 條件 ] [ASCENDING | DESCENDING] [CANDIDATE | UNIQUE]
用INDEX ON 命令建立一個(gè)索引文件
ALTER TABLE <表名> ADD PRIMARY KEY <關(guān)鍵字段名> TAG <索引標(biāo)識(shí)名>
用SQL命令創(chuàng)建主索引
ALTER TABLE <表名> ADD UNIQUE <關(guān)鍵字段名>TAG <索引標(biāo)識(shí)名>
用SQL命令創(chuàng)建候選索引
注意:1)備注型字段和通用型字段不能作為索引關(guān)鍵字段;
2)不要建立無(wú)用的索引,以免降低系統(tǒng)性能;
3)及時(shí)清理已無(wú)用索引標(biāo)識(shí),提高系統(tǒng)效率。
4)在復(fù)合索引的多個(gè)索引中,某一時(shí)刻只有一個(gè)索引對(duì)表起作用。
5. 索引的修改和刪除
修改: 打開表設(shè)計(jì)器,在索引對(duì)話框中進(jìn)行所需修改;
或 用命令重新建立一個(gè)相同標(biāo)識(shí)名而索引表達(dá)式不同的索引。
刪除: 打開表設(shè)計(jì)器,在索引對(duì)話框中刪除不需要的索引標(biāo)識(shí)即可;
或 用命令: DELETE TAG ALL | 索引標(biāo)識(shí)1 [, 索引標(biāo)識(shí)2 ] …
刪除不需要的索引標(biāo)識(shí),ALL表示全部標(biāo)識(shí)。
6. 索引的使用
功能
命令格式
打開表的同時(shí)指定主控索引 USE <表名> ORDER <標(biāo)識(shí)名>
為已打開的表確定主控索引 SET ORDER TO <標(biāo)識(shí)名> [ASCENDING | DESCENDING] ]
搜索某張已建立索引的表 FIND <表達(dá)式>
搜索表中首次出現(xiàn)的記錄 SEEK <表達(dá)式> [ <索引標(biāo)識(shí)名>]
SEEK <表達(dá)式>
3.6 VFP數(shù)據(jù)庫(kù)
1. 數(shù)據(jù)庫(kù)的基本組成
數(shù)據(jù)庫(kù)由一個(gè)以上相互關(guān)聯(lián)的數(shù)據(jù)表組成,可以包含一個(gè)或多個(gè)表、視圖、到遠(yuǎn)程數(shù)據(jù)源的連接和存儲(chǔ)過(guò)程。
視圖(view):
一個(gè)保存在數(shù)據(jù)庫(kù)中的、由引用一個(gè)或多個(gè)表、或其他視圖的相關(guān)數(shù)據(jù)組成的虛擬表,可以是本地的、遠(yuǎn)程的或帶參數(shù)的。
存儲(chǔ)過(guò)程(stored procedure):
是保存在數(shù)據(jù)庫(kù)中的一個(gè)過(guò)程。該過(guò)程能包含一個(gè)用戶自定義函數(shù)中的任何命令和函數(shù)。創(chuàng)建數(shù)據(jù)庫(kù)時(shí)系統(tǒng)自動(dòng)生成3個(gè)文件:
數(shù)據(jù)庫(kù)文件: 擴(kuò)展名為 .DBC
數(shù)據(jù)庫(kù)備注文件: 擴(kuò)展名為 .DCT
數(shù)據(jù)庫(kù)索引文件: 擴(kuò)展名為 .DCX
2. 數(shù)據(jù)庫(kù)的設(shè)計(jì)過(guò)程
1)明確建立數(shù)據(jù)庫(kù)的目的和使用方式
2)設(shè)計(jì)所需的數(shù)據(jù)表(包括表結(jié)構(gòu)和表記錄)
3)建立表之間的關(guān)系
4)改進(jìn)設(shè)計(jì)
3.7 數(shù)據(jù)庫(kù)的創(chuàng)建
1. 數(shù)據(jù)庫(kù)的創(chuàng)建過(guò)程
數(shù)據(jù)庫(kù)的創(chuàng)建過(guò)程中一般會(huì)涉及下面一些常用操作:
1)創(chuàng)建新表 → 用表設(shè)計(jì)器 (設(shè)置字段屬性和表屬性)
2)添加表 → 用數(shù)據(jù)庫(kù)設(shè)計(jì)器按鈕或數(shù)據(jù)庫(kù)菜單
3)創(chuàng)建視圖 → 用視圖向?qū)А⒁晥D設(shè)計(jì)器
4)建立關(guān)系 → 用鼠標(biāo)將父表的索引拖到子表的相關(guān)索引上
5)編輯關(guān)系 → 用數(shù)據(jù)庫(kù)菜單或快捷菜單 → 參照完整性生成器
6)移去關(guān)系 → 用快捷菜單或按delete鍵
7)修改表 → 用表設(shè)計(jì)器
8)刪除表或視圖 → 用數(shù)據(jù)庫(kù)設(shè)計(jì)器按鈕或數(shù)據(jù)庫(kù)菜單
2. 數(shù)據(jù)庫(kù)的新建、打開、關(guān)閉
(1)新建數(shù)據(jù)庫(kù):
從文件菜單中單擊新建 → 在新建對(duì)話框中選擇數(shù)據(jù)庫(kù)并單擊新文件 → 在創(chuàng)建對(duì)話框中給出庫(kù)文件名和保存位置 → 在數(shù)據(jù)庫(kù)設(shè)計(jì)器中建立所需的數(shù)據(jù)庫(kù)。
或 從命令窗口中輸入命令: create database 數(shù)據(jù)庫(kù)名
(2)打開數(shù)據(jù)庫(kù):
從文件菜單中單擊打開 → 在打開對(duì)話框中給出庫(kù)文件名和保存位置并確定之。
或 從命令窗口中輸入命令: open database 數(shù)據(jù)庫(kù)名
(3)關(guān)閉數(shù)據(jù)庫(kù):
從命令窗口中輸入命令:
close database && 關(guān)閉當(dāng)前數(shù)據(jù)庫(kù)
或 close all && 關(guān)閉所有被打開的數(shù)據(jù)庫(kù)
注意:1) 關(guān)閉了數(shù)據(jù)庫(kù)表不等于關(guān)閉了數(shù)據(jù)庫(kù),但關(guān)閉了數(shù)據(jù)庫(kù)則其中的數(shù)據(jù)表被同時(shí)關(guān)閉;
2) 用鼠標(biāo)關(guān)閉了數(shù)據(jù)庫(kù)設(shè)計(jì)器窗口并不能代表關(guān)閉數(shù)據(jù)庫(kù)。
3. 用數(shù)據(jù)庫(kù)設(shè)計(jì)器設(shè)計(jì)數(shù)據(jù)庫(kù)
(1) 調(diào)出表設(shè)計(jì)器,建立一個(gè)新數(shù)據(jù)表
方法1:從數(shù)據(jù)庫(kù)菜單中選擇新表。
方法2:右擊數(shù)據(jù)庫(kù)設(shè)計(jì)器窗口,從快捷菜單中選擇新表。
方法3:?jiǎn)螕魯?shù)據(jù)庫(kù)設(shè)計(jì)器工具欄的新表按鈕。
方法4:從文件菜單中單擊新建,在對(duì)話框中選擇表。
注意:
數(shù)據(jù)庫(kù)表的表設(shè)計(jì)器中內(nèi)容比自由表的多,增加了字段屬性和表屬性的設(shè)置。設(shè)置驗(yàn)證規(guī)則目的是為了使輸入的數(shù)據(jù)符合要求,在有矛盾時(shí)發(fā)出錯(cuò)誤提示信息。
(2) 數(shù)據(jù)庫(kù)表的高級(jí)屬性
屬性類別
屬性名稱
作用
字
段
屬
性
字段顯示屬性
格式
確定字段內(nèi)容在被顯示時(shí)的樣式
輸入掩碼
指定字段中輸入數(shù)據(jù)的格式(即所輸入的任何內(nèi)容均顯示成此符號(hào))
標(biāo)題
在瀏覽表時(shí)用此名稱代替意義不夠直觀的字段名
字段驗(yàn)證規(guī)則
規(guī)則
使所輸數(shù)據(jù)符合設(shè)定的條件
信息
當(dāng)所輸數(shù)據(jù)違反規(guī)則時(shí),系統(tǒng)提示錯(cuò)在哪里
默認(rèn)值
減少輸入重復(fù)性數(shù)據(jù)時(shí)的工作量
字段注釋
使字段具有更好的可讀性
表
屬
性
長(zhǎng)表名
與表文件名不同,設(shè)置了長(zhǎng)表名可以一目了然
記錄驗(yàn)證規(guī)則
規(guī)則
使所輸記錄符合設(shè)定的條件
信息
當(dāng)所輸記錄違反規(guī)則時(shí),系統(tǒng)提示錯(cuò)在哪里
觸發(fā)器
插入觸發(fā)器
當(dāng)所插記錄符合此規(guī)則時(shí),才可以插入到表中
更新觸發(fā)器
當(dāng)修改后的記錄符合此規(guī)則時(shí),才可以進(jìn)行修改
刪除觸發(fā)器
當(dāng)待刪記錄符合此規(guī)則時(shí),才可以被刪除掉
表注釋
使表具有更好的可讀性
字段級(jí)規(guī)則:
一種與字段相關(guān)的有效性規(guī)則,在插入或修改字段值時(shí)被激活,多用于數(shù)據(jù)輸入正確性的檢驗(yàn)。
為字段設(shè)置驗(yàn)證規(guī)則的方法:
.在表設(shè)計(jì)器中選定要建立規(guī)則的字段名。
.在“規(guī)則”方框旁邊選擇“…”按鈕。
.在表達(dá)式生成器中設(shè)置有效性表達(dá)式,并選擇“確定”。
.在“信息”框中,鍵入用引號(hào)括起的錯(cuò)誤信息。
.在“默認(rèn)值”框中,鍵入合理的初值。
.注意不同類型數(shù)據(jù)的表示方法。
.選擇“確定”
記錄級(jí)規(guī)則:
一種與記錄相關(guān)的有效性規(guī)則,當(dāng)插入或修改記錄時(shí)激活,常用來(lái)檢驗(yàn)數(shù)據(jù)輸入和正確性。記錄被刪除時(shí)不使用有效性規(guī)則。記錄級(jí)規(guī)則在字段級(jí)規(guī)則之后和觸發(fā)器之前激活,在緩沖更新時(shí)工作。
觸發(fā)器:
在一個(gè)插入、更新或刪除操作之后運(yùn)行的記錄級(jí)事件代碼。不同的事件可以對(duì)應(yīng)不同的動(dòng)作。它們常用于交叉表的完整性。
(3) 在數(shù)據(jù)庫(kù)中添加表
方法1:從數(shù)據(jù)庫(kù)菜單中選擇添加表,從打開對(duì)話框中選擇所需的表并確定之。
方法2:右擊數(shù)據(jù)庫(kù)設(shè)計(jì)器窗口,從快捷菜單中選擇添加表。
方法3:?jiǎn)螕魯?shù)據(jù)庫(kù)設(shè)計(jì)器工具欄的添加按鈕。
注意:
一個(gè)數(shù)據(jù)表在同一時(shí)間內(nèi)只能屬于一個(gè)數(shù)據(jù)庫(kù),已隸屬于其它數(shù)據(jù)庫(kù)的表不能直接被添加進(jìn)來(lái),需先將其移出數(shù)據(jù)庫(kù)還原成自由表。
(4) 創(chuàng)建并添加視圖
視圖用于顯示一個(gè)或多個(gè)表中的記錄,并能夠更新源表中的數(shù)據(jù),視圖只有在數(shù)據(jù)庫(kù)中才能存在。
方法1:從數(shù)據(jù)庫(kù)菜單中選擇新遠(yuǎn)程視圖或新本地視圖
方法2:右擊數(shù)據(jù)庫(kù)設(shè)計(jì)器窗口,從快捷菜單中選擇新遠(yuǎn)程視圖或新本地視圖
方法3:?jiǎn)螕魯?shù)據(jù)庫(kù)設(shè)計(jì)器工具欄的新遠(yuǎn)程視圖或新本地視圖按鈕
(5) 在數(shù)據(jù)庫(kù)中操作表和視圖
可以利用數(shù)據(jù)庫(kù)設(shè)計(jì)器工具欄很方便地進(jìn)行下列操作:
瀏覽: 在瀏覽窗口中顯示表或視圖的內(nèi)容。
修改: 調(diào)出表設(shè)計(jì)器或視圖設(shè)計(jì)器對(duì)表或視圖進(jìn)行修改。
移去:使表從數(shù)據(jù)庫(kù)中還原成自由表。對(duì)視圖移去相當(dāng)于刪除。
刪除:從磁盤上徹底刪除數(shù)據(jù)表和視圖,并且無(wú)法回收。
(6) 在表之間建立永久性關(guān)系
永久關(guān)系:
是數(shù)據(jù)庫(kù)表之間的一種關(guān)系,不僅運(yùn)行時(shí)存在,而且一直保留。表之間的永久關(guān)系是通過(guò)索引建立的。
一對(duì)多關(guān)系:
表之間的一種關(guān)系,在這種關(guān)系中,主表中的每一個(gè)記錄與相關(guān)表中的多個(gè)記錄相關(guān)聯(lián)(每一個(gè)主關(guān)鍵字值在相關(guān)表中可出現(xiàn)多次)。
一對(duì)一關(guān)系:
表之間的一種關(guān)系,在這種關(guān)系中,主表中的每一個(gè)記錄只與相關(guān)表中的一個(gè)記錄相關(guān)聯(lián)。
創(chuàng)建表間的永久關(guān)系:
在數(shù)據(jù)庫(kù)設(shè)計(jì)器中,選擇想要關(guān)聯(lián)的索引名,然后把它拖到相關(guān)表的索引名上,所拖動(dòng)的父表索引必須是一個(gè)主索引或候選索引。建立好關(guān)系后,這種關(guān)系在數(shù)據(jù)庫(kù)設(shè)計(jì)器中會(huì)顯示為一條連接兩個(gè)表的直線。
注意:需先建立索引然后才能建立關(guān)系。
刪除表間的永久關(guān)系:
在數(shù)據(jù)庫(kù)設(shè)計(jì)器中,單擊兩表間的關(guān)系線。關(guān)系線變粗,表明已選擇了該關(guān)系,按下 delete 鍵。
編輯關(guān)系:
單擊所需關(guān)系線,右擊鼠標(biāo),從快捷菜單中選擇編輯關(guān)系,在編輯關(guān)系對(duì)話框中改選其它相關(guān)表索引名或修改參照完整性規(guī)則。
參照完整性(RI):
控制數(shù)據(jù)一致性,尤其是不同表的主關(guān)鍵字和外部關(guān)鍵字之間關(guān)系的規(guī)則。Visual FoxPro 使用用戶自定義的字段級(jí)和記錄級(jí)規(guī)則完成參照完成性規(guī)則。
(7) 在表之間建立臨時(shí)關(guān)系
臨時(shí)關(guān)系:
是在打開的數(shù)據(jù)表之間用 set relation命令建立的臨時(shí)關(guān)系,或是在數(shù)據(jù)工作期窗口建立。建立了臨時(shí)關(guān)系后,子表的指針會(huì)隨主表記錄指針的移動(dòng)。表被關(guān)閉后,關(guān)系自動(dòng)解除。
臨時(shí)關(guān)系與永久關(guān)系的聯(lián)系與區(qū)別:
聯(lián)系:
(1)都必須明確建立關(guān)系的兩張表之間確實(shí)在客觀上存在著一種關(guān)系(一對(duì)多或一對(duì)一關(guān)系)。
(2)永久關(guān)系在許多場(chǎng)合可以作為默認(rèn)的臨時(shí)關(guān)系。
區(qū)別:
(1)臨時(shí)關(guān)系是用來(lái)在打開的兩張表之間控制相關(guān)表之間記錄的訪問(wèn);而永久關(guān)系主要是用來(lái)存儲(chǔ)相關(guān)表之間的參照完整性,附帶地可以作為默認(rèn)的臨時(shí)關(guān)系或查詢中默認(rèn)的聯(lián)接條件。
(2)臨時(shí)關(guān)系在表打開之后使用set relation命令建立,隨表的關(guān)閉而解除;永久關(guān)系永久地保存在數(shù)據(jù)庫(kù)中而不必在每次使用表時(shí)重新創(chuàng)建。
(3)臨時(shí)關(guān)系可以在自由表之間、庫(kù)表之間或自由表與庫(kù)表之間建立,而永久關(guān)系只能在庫(kù)表之間建立。
(4)臨時(shí)關(guān)系中一張表不能有兩張主表(除非這兩張主表是通過(guò)子表的同一個(gè)主控索引建立的臨時(shí)關(guān)系),永久關(guān)系則不然。
4. 用命令方式操作數(shù)據(jù)庫(kù)
常用命令一覽表
命令格式
功能
create database 庫(kù)文件名 創(chuàng)建新的數(shù)據(jù)庫(kù)文件
open database 庫(kù)文件名 打開指定的庫(kù)文件
close database 關(guān)閉當(dāng)前的數(shù)據(jù)庫(kù)和數(shù)據(jù)表
close all 關(guān)閉所有的數(shù)據(jù)庫(kù)和數(shù)據(jù)表,并把工作區(qū)1置為當(dāng)前工作區(qū),同時(shí)還關(guān)閉一些窗口
modify database 修改當(dāng)前庫(kù)文件結(jié)構(gòu)
delete database 庫(kù)文件名 刪除指定的庫(kù)文件
open database 庫(kù)文件名
add table 表名
在數(shù)據(jù)庫(kù)中添加表
open database 庫(kù)文件名
remove table 表名
將表從數(shù)據(jù)庫(kù)中移去
open database 庫(kù)文件名
remove table 表文件名 delete
將表從數(shù)據(jù)庫(kù)中移去并從盤上刪除
use 庫(kù)文件名 !表名
browse
“!”表示引用一個(gè)不在當(dāng)前數(shù)據(jù)庫(kù)中的表
Set relation to 關(guān)系表達(dá)式 into 區(qū)號(hào) | 別名 建立表之間的臨時(shí)關(guān)系
Set relation to 刪除表之間的臨時(shí)關(guān)系
alter table 子表名 add foreign key 索引關(guān)鍵字 tag 索引標(biāo)識(shí) references 父表名 [tag 索引標(biāo)識(shí) ] 創(chuàng)建永久關(guān)系
alter table 子表名 drop foreign key tag 索引標(biāo)識(shí) 刪除永久關(guān)系
5. 數(shù)據(jù)庫(kù)表的約束機(jī)制
約束機(jī)制
級(jí)別
激活時(shí)機(jī)
NULL值 字段
當(dāng)從瀏覽中離開字段,或執(zhí)行INSERT或REPLEASE更改字段值時(shí)
字段級(jí)規(guī)則 字段
當(dāng)從瀏覽中離開字段,或執(zhí)行INSERT或REPLEASE更改字段值時(shí)
主索引/候選索引 記錄
發(fā)生記錄更新時(shí)
記錄級(jí)規(guī)則 記錄
發(fā)生記錄更新時(shí)
觸發(fā)器 表
在INSERT、UPDATE或DELETE事件中,表中值改變時(shí)
VALID子句 表單
移出記錄時(shí)