版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第四章VisualFoxpro
數(shù)據(jù)庫(kù)及其操作
第四章VisualFoxpro
數(shù)據(jù)庫(kù)及其操作1第一節(jié)VisualFoxpro數(shù)據(jù)庫(kù)及其建立在VisualFoxpro中,數(shù)據(jù)庫(kù)是一個(gè)邏輯上的概念和手段,用于將相互聯(lián)系的數(shù)據(jù)表及其相關(guān)的數(shù)據(jù)庫(kù)對(duì)象統(tǒng)一管理和組織。一般的邏輯層次關(guān)系:數(shù)據(jù)庫(kù)——數(shù)據(jù)表——記錄——字段第一節(jié)VisualFoxpro數(shù)據(jù)庫(kù)及其建立2建立VisualFoxpro數(shù)據(jù)庫(kù)時(shí),建立擴(kuò)展名是dbc的數(shù)據(jù)庫(kù)文件,與之相關(guān)自動(dòng)建立擴(kuò)展名為dbt的備注文件和擴(kuò)展名為dcx的數(shù)據(jù)庫(kù)索引文件。建立一個(gè)數(shù)據(jù)庫(kù),對(duì)應(yīng)的文件有三個(gè):DBC、DBT、DCX。一、建立數(shù)據(jù)庫(kù)1、在項(xiàng)目管理器中建立數(shù)據(jù)庫(kù)方法:在“數(shù)據(jù)”選項(xiàng)卡中,選擇“數(shù)據(jù)庫(kù)”,單擊“新建”。建立VisualFoxpro數(shù)據(jù)庫(kù)時(shí),建立擴(kuò)展名是dbc32、通過“新建”對(duì)話框建立數(shù)據(jù)庫(kù)方法:在“文件”菜單中選擇“新建”。(或者在工具欄上單擊“新建”)。3、使用命令交互建立數(shù)據(jù)庫(kù)格式:CREATEDATABASE庫(kù)文件名2、通過“新建”對(duì)話框建立數(shù)據(jù)庫(kù)4二、使用數(shù)據(jù)庫(kù)在對(duì)一個(gè)數(shù)據(jù)庫(kù)中的表進(jìn)行操作時(shí),需要先打開這個(gè)數(shù)據(jù)庫(kù)。在項(xiàng)目管理器中打開數(shù)據(jù)庫(kù)。(選中庫(kù)后,庫(kù)自動(dòng)打開)通過“打開”對(duì)話框打開數(shù)據(jù)庫(kù)。命令法:OPENDATABASE庫(kù)文件名[EXCLUSIVE|SHARED][NOUPDATE][VALIDATE](在工具欄中間顯示打開的庫(kù)名)二、使用數(shù)據(jù)庫(kù)5EXCLUSIVE:以獨(dú)占方式打開,同一時(shí)刻只能由一個(gè)用戶打開操作。SHARED:以共享方式打開,同一時(shí)刻可由多個(gè)用戶打開操作。NOUPDATE:以只讀方式打開,不允許對(duì)庫(kù)進(jìn)行修改。EXCLUSIVE:以獨(dú)占方式打開,同一時(shí)刻只能由一個(gè)用戶打6三、修改數(shù)據(jù)庫(kù)在VISUALFOXPRO中修改數(shù)據(jù)庫(kù)實(shí)際上是打開數(shù)據(jù)庫(kù)設(shè)計(jì)器,用戶可以在數(shù)據(jù)庫(kù)設(shè)計(jì)器中完成各種數(shù)據(jù)庫(kù)對(duì)象的建立、修改和刪除等操作。在項(xiàng)目管理器中,選中庫(kù),再單擊修改。在“文件”菜單中選擇“打開”。MODIFYDATABASE[庫(kù)文件名][NOWAIT][NOEDIT][NOWAIT]只在程序中使用,不在交互命令窗口中使用,即打開庫(kù)設(shè)計(jì)器后,程序繼續(xù)運(yùn)行,不等待。[NOEDIT]打開數(shù)據(jù)庫(kù)設(shè)計(jì)器禁止對(duì)數(shù)據(jù)庫(kù)進(jìn)行修改三、修改數(shù)據(jù)庫(kù)7四、刪除數(shù)據(jù)庫(kù)項(xiàng)目管理器中選擇庫(kù),單擊“移去”。DELETEDATABASE庫(kù)名數(shù)據(jù)庫(kù)文件的刪除,并不刪除所包含的表文件。庫(kù)文件僅僅建立表之間的聯(lián)系。四、刪除數(shù)據(jù)庫(kù)8第二節(jié)建立數(shù)據(jù)庫(kù)表一、在數(shù)據(jù)庫(kù)中建立表建立表時(shí),首先要對(duì)所處理的對(duì)象進(jìn)行調(diào)查分析,再根據(jù)需要設(shè)計(jì)一張二維表。當(dāng)表的行、列個(gè)數(shù)及每列中數(shù)據(jù)的屬性確定后,再把數(shù)據(jù)集合在其中即可。
1.定義表中的數(shù)據(jù)類型
(1)定義二維表名設(shè)計(jì)一張二維表,給表起個(gè)名字。
(2)二維表欄目設(shè)計(jì)第二節(jié)建立數(shù)據(jù)庫(kù)表9編號(hào)姓名家庭地址年齡工資1001張三青海西寧18595.361002……………………10031004100510061007職工基本情況表編號(hào)姓名家庭地址年齡工資1001張三青海西寧18595.3610(3)填寫二維表的內(nèi)容①、表的名字(標(biāo)題)②、表中每一列的欄目標(biāo)題序列為表頭,它標(biāo)明了每一列對(duì)應(yīng)數(shù)據(jù)的屬性。③、表中每一行的數(shù)據(jù)是表的內(nèi)容。(4)定義數(shù)據(jù)表的結(jié)構(gòu)在VisualFoxPro系統(tǒng)中,一張二維表對(duì)應(yīng)一個(gè)數(shù)據(jù)表,稱為表文件(Table)。(3)填寫二維表的內(nèi)容11一張二維表由表名、表頭、表的內(nèi)容三部分組成,一個(gè)數(shù)據(jù)表則由數(shù)據(jù)表名、數(shù)據(jù)表的結(jié)構(gòu)、數(shù)據(jù)表的記錄三要素構(gòu)成。①、數(shù)據(jù)表的文件名相當(dāng)于二維表中的表名,它是數(shù)據(jù)表的主要標(biāo)識(shí),用戶可以依靠數(shù)據(jù)表名在磁盤上存取、使用指定的數(shù)據(jù)表。②、數(shù)據(jù)表的結(jié)構(gòu)相當(dāng)于二維表的表頭,二維表的每一列對(duì)應(yīng)數(shù)據(jù)表中的一個(gè)字段,其屬性決定了字段名、字段類型和字段長(zhǎng)度。一張二維表由表名、表頭、表的內(nèi)容三部分組成,一個(gè)數(shù)據(jù)表則由數(shù)12③、數(shù)據(jù)表中的記錄是數(shù)據(jù)表中不可分割的基本項(xiàng),即二維表中的表的內(nèi)容。2.利用表設(shè)計(jì)器創(chuàng)建表方法1:在“文件”菜單中選擇“新建”;方法2:CREATE[〈表文件名〉]方法3、使用數(shù)據(jù)庫(kù)設(shè)計(jì)器建立數(shù)據(jù)表(1)輸入字段名一般允許由1—10字符(自由表)組成,要求以字母開頭,不含空格;數(shù)據(jù)庫(kù)中的表其字段名最長(zhǎng)可達(dá)到128個(gè)字符。③、數(shù)據(jù)表中的記錄是數(shù)據(jù)表中不可分割的基本項(xiàng),即二維表中的表13(2)輸入字段的類型每一個(gè)字段都反映對(duì)象的一個(gè)方面屬性,根據(jù)其表達(dá)含義,可有不同的數(shù)據(jù)類型。根據(jù)計(jì)算機(jī)處理數(shù)據(jù)的特點(diǎn),必須定義數(shù)據(jù)類型。(3)輸入字段寬度指該字段所能容納數(shù)據(jù)的最大字節(jié)數(shù)。有些類型的數(shù)據(jù)其寬度是固定的。(2)輸入字段的類型14(4)輸入小數(shù)位數(shù)數(shù)值型、浮點(diǎn)型、雙精度型的字段可指定小數(shù)據(jù)位。數(shù)值型字段:字段寬度=整數(shù)部分寬度+小數(shù)點(diǎn)1位+小數(shù)位寬度小數(shù)位至少比整個(gè)字段寬度小2。(4)輸入小數(shù)位數(shù)15空值NULL項(xiàng)允許該字段值為空或使用缺省數(shù)據(jù),被設(shè)為關(guān)鍵字的字段值不允許為空。字段有效性組框:定義字段的有效性規(guī)則、提示信息及設(shè)置缺省值。顯示組框設(shè)置字段的輸入格式、顯示格式、顯示標(biāo)題字段注釋當(dāng)前行前有一個(gè)雙向箭頭。空值NULL項(xiàng)允許該字段值為空或使用缺省數(shù)據(jù),被設(shè)為16二、表文件的打開與關(guān)閉
1、打開表文件命令法:USE表文件名功能:在當(dāng)前工作區(qū)中,打開一指定的表文件。說明:擴(kuò)展名可省略,如果原來(lái)已在該工作區(qū)中打開了一個(gè)表文件,則關(guān)閉它,再打開新的文件;打開后,記錄指針指向第一個(gè)記錄。窗口菜單法:在“窗口”菜單中選擇“數(shù)據(jù)工作期”,單擊“打開”。二、表文件的打開與關(guān)閉172、關(guān)閉表文件格式:USE——關(guān)閉在當(dāng)前工作區(qū)中打開的表文件
CLOSE
DATABASE——關(guān)閉所有工作區(qū)被打開的表文件
CLOSEALL——關(guān)閉所有工作區(qū)中的所有文件;
QUIT——關(guān)閉所有文件,且退出系統(tǒng)窗口菜單法:在“窗口”菜單中選擇“數(shù)據(jù)工作期”,選擇欲關(guān)閉的表,單擊“關(guān)閉”。2、關(guān)閉表文件183、表的獨(dú)占與共享在網(wǎng)絡(luò)環(huán)境下使用時(shí),還要確定是獨(dú)占還是共享。涉及表數(shù)據(jù)的安全性問題。獨(dú)占打開:一張表只能被一個(gè)用戶打開。共享打開:一張表可被多個(gè)用戶同時(shí)打開。USE表名SHARED:以共享方式打表。USE表名EXCLUSIVED:以獨(dú)占方式打開表。3、表的獨(dú)占與共享19三、修改表結(jié)構(gòu)1、菜單操作法方法:打開欲修改的表,執(zhí)行“顯示”菜單中的“表設(shè)計(jì)器”。在“表設(shè)計(jì)器”窗口,修改表中所有字段的名字、類型、寬度和是否建立索引,完成對(duì)數(shù)據(jù)表結(jié)構(gòu)的修改。
2、命令法格式:MODIFYSTRUCTURE[〈表文件名〉]三、修改表結(jié)構(gòu)20四、記錄指針在向表輸入數(shù)據(jù)時(shí),系統(tǒng)按照其輸入的前后順序,給每一個(gè)記錄賦予一個(gè)記錄號(hào)。記錄指針是VFP系統(tǒng)內(nèi)部的一個(gè)指示器,用于確定當(dāng)前正在操作的記錄。(表中的數(shù)據(jù)以記錄為單位操作)每當(dāng)打開一個(gè)表文件時(shí),指針總是指向第一條記錄。記錄指針指向的記錄叫當(dāng)前記錄,記錄指針指向哪一個(gè)記錄,這一個(gè)記錄就是當(dāng)前操作的記錄,即當(dāng)前記錄。四、記錄指針21測(cè)試當(dāng)前記錄用函數(shù)RECNO()。最小值為1,最大值為RECCOUNT()+1。打開表時(shí)記錄指針情況:表中無(wú)記錄:BOF()=.T.EOF()=.T.RECNO()=1表中有記錄:BOF()=.F.EOF()=.F.RECNO()=1測(cè)試當(dāng)前記錄用函數(shù)RECNO()。22五、表中輸入數(shù)據(jù)1.創(chuàng)建表時(shí)立即輸入數(shù)據(jù)在創(chuàng)建表時(shí),如果表中所有字段的屬性已定義完成,可按“確定”按鈕保存表結(jié)構(gòu),同時(shí)打開“系統(tǒng)”窗口,顯示“現(xiàn)在輸入數(shù)據(jù)嗎?”的對(duì)話。五、表中輸入數(shù)據(jù)23選擇“是”按鈕,可以立即進(jìn)入表“瀏覽”窗口,進(jìn)行表中數(shù)據(jù)的輸入。2.以追加方式輸入數(shù)據(jù)方法:打開欲輸入數(shù)據(jù)的表,執(zhí)行“顯示”菜單中的“瀏覽”,再執(zhí)行“顯示”菜單下的“追加方式”。選擇“是”按鈕,可以立即進(jìn)入表“瀏覽”窗口,進(jìn)行表中數(shù)據(jù)的輸243、命令法追加1)append命令在表的尾部增加記錄,有兩種格式:append——表尾增加一條記錄,并輸入數(shù)據(jù)。appendblank——表尾增加一條空記錄。2)insert可在表的任何位置插入新的記錄命令:INSERT[BEFORE][BLANK]功能:在當(dāng)前庫(kù)文件中當(dāng)前記錄的前或后邊插入一條記錄,并輸入數(shù)據(jù)。3、命令法追加25BEFORE:表示在當(dāng)前記錄前插入新記錄,否則在當(dāng)前記錄后插入;BLANK:表示插入一條空記錄,不進(jìn)入全屏幕輸入狀態(tài),反之則進(jìn)入全屏幕輸入狀態(tài)輸入數(shù)據(jù)。如:在第5條記錄后插入一條記錄:GO5INSERT在第10條記錄前插入一條空記錄:GO5INSERTBEFOREBLANKBEFORE:表示在當(dāng)前記錄前插入新記錄,否則在當(dāng)前記錄后插264、數(shù)據(jù)的輸入要點(diǎn)備注型數(shù)據(jù)輸入方法:把光標(biāo)移到備注型字段下雙擊,即可進(jìn)入備注字段的編輯窗口。(輸入完memo變成Memo)通用型數(shù)據(jù)的輸入方法:把光標(biāo)移到通用型字段下雙擊,進(jìn)入通用型字段的數(shù)據(jù)編輯窗口。在“編輯”菜單中選擇“插入對(duì)象”。確定對(duì)象后,該字段中的gen變成Gen。4、數(shù)據(jù)的輸入要點(diǎn)27六、使用瀏覽窗口操作表1、打開瀏覽器窗口項(xiàng)目管理器:列表中選擇表,單擊“瀏覽”。數(shù)據(jù)庫(kù)設(shè)計(jì)器:選中表,單擊“瀏覽”,或者右擊表,選擇“瀏覽”。使用命令:打開表以后,Browse。六、使用瀏覽窗口操作表28瀏覽器窗口有兩種顯示方式:編輯方式和瀏覽方式切換:在“顯示”菜單中,選擇“瀏覽”或者“編輯”。瀏覽窗口的分割:拖動(dòng)“分割”按鈕。(在瀏覽器窗口左下角)2、瀏覽操作調(diào)整字段顯示寬度,調(diào)整字段的顯示順序(拖動(dòng)),但表結(jié)構(gòu)不變。注意:執(zhí)行瀏覽或者編輯命令后,菜單中出現(xiàn)“表”菜單項(xiàng)。瀏覽器窗口有兩種顯示方式:編輯方式和瀏覽方式29在同一記錄中選擇字段:鼠標(biāo)或enter左箭頭右箭頭tabshift+table在上下記錄間的切換:鼠標(biāo)或上下箭頭翻頁(yè):pageuppagedown3、增加記錄ctrl+y,以表尾增加一條新記錄。4、修改記錄移動(dòng)插入點(diǎn)到欲修改的記錄上,直接修改。5、刪除記錄ctrl+t,刪除當(dāng)前記錄。在同一記錄中選擇字段:鼠標(biāo)或enter左箭頭右箭頭ta30七、刪除記錄命令(邏輯刪除和物理刪除)刪除記錄分兩步:做刪除標(biāo)記(邏輯刪除)、徹底刪除帶標(biāo)記的記錄(物理刪除)。1、置刪除標(biāo)記的命令
方法1:在表“瀏覽”窗口,單擊欲刪除記錄的刪除標(biāo)記。方法2:在“瀏覽”窗口,執(zhí)行“表”菜單中的“刪除記錄”命令。方法3:delete[for條件表達(dá)式]七、刪除記錄命令(邏輯刪除和物理刪除)31刪除標(biāo)記在存貯時(shí),占一個(gè)字節(jié)。相關(guān)函數(shù):DELETE()如:判斷當(dāng)前記錄是否被設(shè)置刪除標(biāo)志:GO6?DELETE()又如:顯示當(dāng)前庫(kù)中所有設(shè)置了刪除標(biāo)志的記錄:DISPALLFORDELETE()刪除標(biāo)記在存貯時(shí),占一個(gè)字節(jié)。322、恢復(fù)記錄的命令對(duì)加上邏輯刪除標(biāo)記的記錄,取消其刪除標(biāo)記,可對(duì)其進(jìn)行恢復(fù)操作。方法1:在表“瀏覽”窗口,單擊欲恢復(fù)記錄的刪除標(biāo)記。(開關(guān)性質(zhì))方法2:在“瀏覽”窗口中,執(zhí)行“表”菜單中“恢復(fù)記錄”命令;2、恢復(fù)記錄的命令33方法3:recall[for條件表達(dá)式]操作:將當(dāng)前表中已經(jīng)邏輯刪除的男生記錄恢復(fù)。Recallfor性別=”男”3、物理刪除有刪除標(biāo)記的記錄物理刪除就是把無(wú)效的記錄徹底從磁盤中刪除掉。方法1:在“瀏覽”窗口中,執(zhí)行“表”菜單中“徹底刪除記錄”命令;方法3:recall[for條件表達(dá)式]34方法2:pack。4、物理刪除表中的全部記錄zap——一次刪除所有記錄。注:不管是否有刪除標(biāo)記,但表本身未被刪除,表結(jié)構(gòu)依然存在。八、修改記錄命令1、EDIT或CHANGE命令交互式修改。格式:EDIT/change方法2:pack。352、REPLACE成批替換數(shù)據(jù)(重點(diǎn))格式:REPLACE[〈范圍〉]〈字段1〉WITH〈表達(dá)式1〉[,〈字段2〉WITH〈表達(dá)式2〉……][FOR/WHILE〈條件〉]功能:對(duì)當(dāng)前表文件中指定范圍內(nèi)滿足條件的所有記錄,用〈表達(dá)式〉的值替換〈字段〉中原有的值。如:REPLACEALL總分WITH數(shù)學(xué)+語(yǔ)文REPLACEALL基本工資WITH基本工資+100FOR職稱=“教授”2、REPLACE成批替換數(shù)據(jù)(重點(diǎn))36九、顯示記錄命令(foxbase中更實(shí)用)格式1:LIST[〈范圍〉][〈字段名表達(dá)式〉][FOR/WHILE〈條件〉][OFF][TOPRINT|TOFILE文件名]格式2:DISPLAY[〈范圍〉][〈字段名表達(dá)式〉][FOR/WHILE〈條件〉][OFF][TOPRINT|TOFILE文件名]功能:把滿足條件的記錄的指定字段的內(nèi)容顯示出來(lái)。后者可以分屏顯示輸出;如果不指定范圍和條件,前者默認(rèn)地輸出全部記錄,而后者只輸出當(dāng)前記錄。九、顯示記錄命令(foxbase中更實(shí)用)37十、查詢定位命令1、窗口操作方式方法:打開要使用的表,在“顯示”菜單下,選擇“瀏覽”;在“表”菜單中,選擇“轉(zhuǎn)到記錄”,子菜單中不同的選項(xiàng),可以將記錄指針移動(dòng)到相應(yīng)的記錄上。十、查詢定位命令38(1)選擇“第一個(gè)”,確定第一個(gè)記錄為當(dāng)前記錄;(2)選擇“最后一個(gè)”,確定最后一個(gè)記錄為當(dāng)前記錄;(3)選擇“下一個(gè)”,確定當(dāng)前記錄的下一個(gè)記錄為當(dāng)前記錄;(4)選擇“前一個(gè)”,確定當(dāng)前記錄的前一個(gè)記錄為當(dāng)前記錄;(1)選擇“第一個(gè)”,確定第一個(gè)記錄為當(dāng)前記錄;39(5)選擇“記錄號(hào)”,便進(jìn)入“轉(zhuǎn)到記錄”對(duì)話窗口,在“轉(zhuǎn)到記錄”對(duì)話框內(nèi),可以選擇記錄號(hào),確定該記錄號(hào)指定的記錄為當(dāng)前記錄;(6)選擇“定位”,進(jìn)入“定位記錄”窗口,在“定位記錄”對(duì)話框內(nèi),輸入定位條件表達(dá)式,確定滿足定位條件表達(dá)式的第一個(gè)記錄為當(dāng)前記錄。(5)選擇“記錄號(hào)”,便進(jìn)入“轉(zhuǎn)到記錄”對(duì)話窗口,在“轉(zhuǎn)到402、絕對(duì)定位命令格式:GO〈數(shù)值表達(dá)式〉 GOTOP GOBOTTOM功能:將記錄指針定位于首記錄、尾記錄或〈數(shù)值表達(dá)式〉的值所指定的記錄。當(dāng)前記錄是誰(shuí),可以從狀態(tài)行看出來(lái);2、絕對(duì)定位命令413、相對(duì)定位命令格式:SKIP[±〈數(shù)值表達(dá)式〉]功能:將記錄指針相對(duì)當(dāng)前記錄向下(正方向)或向上(負(fù)方向)移動(dòng)數(shù)值表達(dá)式的值所指定的記錄數(shù)。3、相對(duì)定位命令424、按條件定位①、條件定位命令LOCATE格式:LOCATE[〈范圍〉][FOR/WHILE〈條件〉]功能:在指定范圍內(nèi)將指針定位于滿足條件的第一條記錄,如果沒找到滿足條件的記錄,則記錄指針定位于表尾,EOF()函數(shù)為邏輯真。缺省范圍選擇時(shí),取all,即在所有記錄中查找。如:LOCATEALLFOR姓名=“王”DISPLAY4、按條件定位43②、繼續(xù)查找命令CONTINUE格式:CONTINUE功能:繼續(xù)查找滿足條件的下一條記錄;重復(fù)多次使用CONTINUE命令,可找到滿足條件的所有記錄;②、繼續(xù)查找命令CONTINUE44③、查詢測(cè)試函數(shù)FOUND格式:FOUND()功能:如果找到了滿足條件的記錄,則返回邏輯真,反之則返回邏輯假;③、查詢測(cè)試函數(shù)FOUND45通常的操作模式如下:Locatefor條件DOWHILEFOUND()處理CONTINUEENDDO用循環(huán)對(duì)滿足條件的所有記錄進(jìn)行操作。通常的操作模式如下:46第四節(jié)索引
一、基本概念什么是索引呢?如一本書,有很多內(nèi)容,為了快速找到我們需要的章節(jié),借助于目錄。那么在數(shù)據(jù)庫(kù)中,也有類似于目錄的信息,稱之為索引。書中的目錄是一份頁(yè)碼的列表,指向書中的書頁(yè),但數(shù)據(jù)庫(kù)中的索引是一個(gè)記錄號(hào)的列表,指向表中待處理的記錄,并表示記錄的處理順序。第四節(jié)索引47索引是按著索引表達(dá)式的值使數(shù)據(jù)表中的記錄有序排列的一種技術(shù),在VisualFoxPro系統(tǒng)中是借助于索引文件實(shí)現(xiàn)的。一般情況下,表中記錄的順序是由數(shù)據(jù)輸入的前后順序決定的,并用記錄號(hào)予以標(biāo)識(shí)。除非有記錄插入或者有記錄刪除,否則表中的記錄順序總是不變的。索引實(shí)際上是一種排序,但是它不改變數(shù)據(jù)表中數(shù)據(jù)的物理順序,而是另外建立一個(gè)記錄號(hào)列表。索引是按著索引表達(dá)式的值使數(shù)據(jù)表中的記錄有序排列的一種技術(shù),48一個(gè)表可以建立多個(gè)索引,每一個(gè)索引代表一種處理記錄的順序。即不同的索引,決定了讀取記錄的不同順序。二、索引類型在數(shù)據(jù)庫(kù)容器中的數(shù)據(jù)表可以建立主索引(PrimaryIndex)。索引表達(dá)式的值是唯一能夠標(biāo)識(shí)每個(gè)記錄處理順序的值。即作為主索引的關(guān)鍵字是不允許重復(fù)出現(xiàn)的,也不允許取空值。一個(gè)表可以建立多個(gè)索引,每一個(gè)索引代表一種處理記錄的順序。即492.候選索引候選索引(CandidateIndex)像主索引一樣,它的索引表達(dá)式的值是唯一能夠標(biāo)識(shí)每個(gè)記錄處理順序的值。但是,一個(gè)數(shù)據(jù)表可以建立多個(gè)候選索引,它在特定環(huán)境下可以視為主索引。2.候選索引503.普通索引普通索引(RegularIndex)表示把由索引表達(dá)式為每個(gè)記錄產(chǎn)生的值,存入索引文件中。如果多個(gè)記錄的索引表達(dá)式值相同,則可以重復(fù)存儲(chǔ),并用獨(dú)立的指針指向各個(gè)記錄。3.普通索引51
4.唯一索引唯一索引(UniqueIndex)表示把由索引表達(dá)式為每個(gè)記錄產(chǎn)生的唯一值,存入索引文件中,如果數(shù)據(jù)表中記錄的索引表達(dá)式值相同,則只存儲(chǔ)第一個(gè)索引表達(dá)式值。它允許數(shù)據(jù)表中各記錄的索引字段或字段組合表達(dá)式的值相同,但在索引文件中只保留數(shù)據(jù)表中與索引字段值相同的第一條記錄。4.唯一索引52三、在表設(shè)計(jì)器中建立索引1、單項(xiàng)索引的建立基于一個(gè)字段的索引叫單項(xiàng)索引。單項(xiàng)索引的建立有兩種方式:普通索引的建立:使用表設(shè)計(jì)器的字段標(biāo)簽或索引標(biāo)簽。在表設(shè)計(jì)器中,字段標(biāo)簽中,索引的下拉列表框中,選擇索引方向,升序(↑)或降序(↓);建立的索引就是一個(gè)普通索引。其他索引的建立:必須使用表設(shè)計(jì)器的索引標(biāo)簽。在表設(shè)計(jì)器中,索引標(biāo)簽中,選擇字段和索引類型。三、在表設(shè)計(jì)器中建立索引532、復(fù)合字段索引的建立基于多個(gè)字段的索引叫復(fù)合字段索引使用表設(shè)計(jì)器的索引標(biāo)簽,選擇確定索引名和類型后,單擊“表達(dá)式”右側(cè)的按鈕,在表達(dá)式生成器中確定索引表達(dá)式。2、復(fù)合字段索引的建立54四、用命令建立索引Indexon索引表達(dá)式to簡(jiǎn)單索引文件名|tag結(jié)構(gòu)復(fù)合索引文件名[ofcdxfilename][ascending|descending][unique|candidate][additive](關(guān)閉以前索引,使建立的索引成為當(dāng)前索引)to簡(jiǎn)單索引文件名:則表示建立一個(gè)簡(jiǎn)單索引文件。tag結(jié)構(gòu)復(fù)合索引名:則表示建立一個(gè)與表同名的結(jié)構(gòu)復(fù)合索引。of非結(jié)構(gòu)復(fù)合索引文件名:建立一個(gè)非結(jié)構(gòu)復(fù)合索引文件名。四、用命令建立索引55即可以建立在三種類型的索引。[ascending|descending]:升降序。[unique|candidate]:是唯一索引還是候選索引。Additive:是否關(guān)閉以前索引,使建立的索引成為當(dāng)前索引。默認(rèn)為關(guān)閉以前的索引。例:indexon年齡tag年齡即可以建立在三種類型的索引。56五、使用索引1.打開索引文件與表名相同的結(jié)構(gòu)索引在打開表時(shí)都能夠自動(dòng)打開,但是對(duì)于非結(jié)構(gòu)索引必須在使用之前打開索引文件。命令格式:
SETINDEXTO索引文件1,索引文件2,……可以打開多個(gè)索引文件,但第一個(gè)索引文件成為主控索引文件。五、使用索引572.設(shè)置當(dāng)前索引若數(shù)據(jù)表中建立了許多索引,其中總有一個(gè)為主,數(shù)據(jù)表記錄總是以該索引的要求排序,這個(gè)索引就叫主控索引或者當(dāng)前索引。結(jié)構(gòu)復(fù)合索引文件隨著數(shù)據(jù)表打開后,其中的索引標(biāo)識(shí)(tag)并不起作用,數(shù)據(jù)表記錄順序仍然保持原始的數(shù)據(jù)排列,必須指定某個(gè)索引標(biāo)識(shí)為主控索引后,數(shù)據(jù)表記錄的排列順序才會(huì)跟著這個(gè)標(biāo)識(shí)的索引順序變化。2.設(shè)置當(dāng)前索引58設(shè)置主控索引的兩種方法:①、命令法:SERORDERTO[索引號(hào)|[TAG]索引名][ASCENDING、DESCENDING]功能:將指定索引號(hào)或者索引名的索引作為主控索引。例:將結(jié)構(gòu)索引文件中的“訂購(gòu)單號(hào)”設(shè)置為當(dāng)前索引。SETORDERTOTAG訂購(gòu)單號(hào)或SETORDERTO訂購(gòu)單號(hào)設(shè)置主控索引的兩種方法:59例:將結(jié)構(gòu)索引文件中的“學(xué)號(hào)”設(shè)置為前索引。Setordertotag學(xué)號(hào)操作:將學(xué)生表中的所在系設(shè)為主控索引,并瀏覽該表。②、交互方式:瀏覽表→表菜單→屬性如:將學(xué)生表中的學(xué)生號(hào)設(shè)為主控索引,并瀏覽該表。例:將結(jié)構(gòu)索引文件中的“學(xué)號(hào)”設(shè)置為前索引。603.使用索引快速定位用SEEK命令定位。格式:SEEK索引關(guān)鍵字值[ORDER索引號(hào)|[TAG]索引名][ASCENDING、DESCENDING]功能:以主控索引為序,找索引關(guān)鍵字的值為指定指的記錄。例。假設(shè)當(dāng)前正在使用的學(xué)生表,將記錄指針定位到學(xué)號(hào)為9921105的記錄上。SEEK‘9921105’ORDER學(xué)號(hào)3.使用索引快速定位614.刪除索引(1)在表設(shè)計(jì)器中使用“索引”選項(xiàng)卡選擇并刪除(2)使用命令
DELETETAGTagName1DELETETAGALL4.刪除索引62第五節(jié)數(shù)據(jù)完整性
數(shù)據(jù)完整性是保證數(shù)據(jù)正確的特性,數(shù)據(jù)完整性一般包括實(shí)體完整性、域完整性和參照完整性。一、實(shí)體完整性與主關(guān)鍵字實(shí)體完整性是保證表中記錄唯一的特性,即在一個(gè)表中不允許有重復(fù)的記錄。利用主關(guān)鍵字或侯選關(guān)鍵字來(lái)保證表中的記錄唯一,即保證實(shí)體唯一性。第五節(jié)數(shù)據(jù)完整性63二、域完整性與約束規(guī)則數(shù)據(jù)類型的定義屬于域完整性的范疇。因?yàn)閿?shù)據(jù)類型的定義本身已經(jīng)包含了數(shù)據(jù)的取值范圍。域約束規(guī)則也稱做字段的有效性規(guī)則,在插入或修改字段值時(shí)被激活,主要用于檢驗(yàn)數(shù)據(jù)的正確性。在表設(shè)計(jì)器中建立字段有效性規(guī)則。二、域完整性與約束規(guī)則64例:以“教師”數(shù)據(jù)庫(kù)中的“教師”表為例,設(shè)置年齡的有效性規(guī)則在20至60之間,當(dāng)輸入的教師年齡不在此范圍時(shí)給出出錯(cuò)信息,教師的默認(rèn)年齡為32。在“規(guī)則”框中(或表達(dá)式生成器)輸入表達(dá)式:年齡>=20.and.年齡<=60在“信息”框中輸入表達(dá)式:“年齡輸入錯(cuò)誤,應(yīng)該在20-60之間”在“默認(rèn)值”框中,輸入表達(dá)式:32注意:規(guī)則是邏輯表達(dá)式,信息是字符表達(dá)式,默認(rèn)值類型根據(jù)字段類型決定。例:以“教師”數(shù)據(jù)庫(kù)中的“教師”表為例,設(shè)置年齡的有效性規(guī)則65三、參照完整性與表之間的關(guān)聯(lián)參照完整性與表之間的關(guān)聯(lián)有關(guān),其含義是:當(dāng)插入、刪除或修改一個(gè)表中的數(shù)據(jù)時(shí),通過參照引用相互關(guān)聯(lián)的另一個(gè)表中的數(shù)據(jù),來(lái)檢查對(duì)表操作是否正確。在VisualFoxpro中為了建立參照完整性,必須首先建立表之間的聯(lián)系。三、參照完整性與表之間的關(guān)聯(lián)661、建立表之間的聯(lián)系在父表中建立主索引,在子表中建立普通索引,然后通過父表的主索引和子表的普通索引建立兩個(gè)表之間的聯(lián)系。將“學(xué)生”數(shù)據(jù)庫(kù)中的“學(xué)生”的“學(xué)號(hào)”字段設(shè)為主索引,“選課”表中的“學(xué)號(hào)”字段設(shè)為普通索引,建立兩表之間的關(guān)聯(lián)。方法:在數(shù)據(jù)庫(kù)設(shè)計(jì)器中,將父表中的主索引拖動(dòng)到子表的普通索引上。1、建立表之間的聯(lián)系672、設(shè)置參照完整性約束建立參照完整性之前必須首先清理數(shù)據(jù)庫(kù)。清理數(shù)據(jù)庫(kù)是物理刪除數(shù)據(jù)庫(kù)中所有帶刪除標(biāo)記的記錄。清理方法:打開數(shù)據(jù)庫(kù)管理器,執(zhí)行“數(shù)據(jù)庫(kù)”中的“清理數(shù)據(jù)庫(kù)”。設(shè)置參照完整性:右鍵單擊連線→編輯參照完整性,分別設(shè)置:更新規(guī)則、刪除規(guī)則、插入規(guī)則。2、設(shè)置參照完整性約束68在“參照完整性生成器”窗口,有三個(gè)選項(xiàng)卡供用戶選擇。其中:當(dāng)選擇“更新規(guī)則”選項(xiàng)卡,可以利用三個(gè)選擇按鈕,設(shè)置關(guān)聯(lián)表間的更新規(guī)則,即如何更新對(duì)父表。級(jí)聯(lián):用新的關(guān)鍵字值更新子表中的所有相關(guān)記錄;限制:若子表中有相關(guān)記錄則禁止更新;忽略:允許更新,不管子表中的相關(guān)記錄。在“參照完整性生成器”窗口,有三個(gè)選項(xiàng)卡供用戶選擇。其中:69當(dāng)選擇“刪除規(guī)則”選項(xiàng)卡,可以利用三個(gè)選擇按鈕,設(shè)置關(guān)聯(lián)表間的刪除規(guī)則。如何刪除父表中的內(nèi)容。級(jí)聯(lián):刪除子表中的所有相關(guān)記錄;限制:若子表中有相關(guān)記錄,則禁止刪除;忽略:允許刪除,不管子表中的相關(guān)記錄。當(dāng)選擇“刪除規(guī)則”選項(xiàng)卡,可以利用三個(gè)選擇按鈕,設(shè)置關(guān)聯(lián)表間70選擇“插入規(guī)則”選項(xiàng)卡,可以利用二個(gè)選擇按鈕,設(shè)置關(guān)聯(lián)表間的插入規(guī)則。即如何在子表中插入記錄:限制:若父表中沒有匹配的關(guān)鍵字值,則禁止插入;忽略:允許插入。選擇“插入規(guī)則”選項(xiàng)卡,可以利用二個(gè)選擇按鈕,設(shè)置關(guān)聯(lián)表間的71例如:學(xué)生情況表(一個(gè)學(xué)生一個(gè)記錄,以學(xué)號(hào)建立主索引)和學(xué)生考試成績(jī)表(一門課的成績(jī)是一個(gè)記錄,以學(xué)號(hào)建立普通索引)。設(shè)置“學(xué)生”數(shù)據(jù)庫(kù)中三個(gè)表的參照完整性:更新和刪除規(guī)則為“級(jí)聯(lián)”,插入規(guī)則為“限制”。并驗(yàn)證其結(jié)果。例如:學(xué)生情況表(一個(gè)學(xué)生一個(gè)記錄,以學(xué)號(hào)建立主索引)和學(xué)生72第六節(jié)自由表一、數(shù)據(jù)庫(kù)表與自由表自由表:不屬于任何數(shù)據(jù)庫(kù)的表,其擴(kuò)展名為dbf。以一個(gè)獨(dú)立的文件形式存在,不具備數(shù)據(jù)庫(kù)中的表所擁有的部分特性:如長(zhǎng)文件名,有效性規(guī)則等。可以將自由表添加到數(shù)據(jù)庫(kù)中,成為數(shù)據(jù)庫(kù)表;也可以將數(shù)據(jù)庫(kù)表從數(shù)據(jù)庫(kù)中移出,成為自由表。當(dāng)沒有打開數(shù)據(jù)庫(kù)時(shí)建立的表就是自由表。第六節(jié)自由表73建立自由表的方法:從“項(xiàng)目管理器”中選擇“自由表”,然后建立。在無(wú)數(shù)據(jù)庫(kù)打開時(shí),從文件菜單選擇“新建”。在無(wú)數(shù)據(jù)庫(kù)打開時(shí),使用CREAT命令建立。建立自由表的方法:74二、將自由表添加到數(shù)據(jù)庫(kù)
在項(xiàng)目管理器中,單擊添加,或數(shù)據(jù)庫(kù)設(shè)計(jì)器中,右擊選“添加”,可將自由表添加到數(shù)據(jù)庫(kù)中。命令法:ADDTABLE表名[表的長(zhǎng)文件名]例如:把自由表TTT添加到當(dāng)前數(shù)據(jù)庫(kù),并給出具有說明意義的長(zhǎng)表名。ADDTABLEtttNAME2001級(jí)學(xué)生軍訓(xùn)表二、將自由表添加到數(shù)據(jù)庫(kù)75三、從數(shù)據(jù)庫(kù)中移出表
當(dāng)數(shù)據(jù)庫(kù)不再使用某個(gè)表,而其他數(shù)據(jù)庫(kù)要使用該表時(shí),必須將該表從當(dāng)前數(shù)據(jù)庫(kù)中移出,使之成為自由表。在項(xiàng)目管理器和數(shù)據(jù)庫(kù)設(shè)計(jì)器中都可以方便地將數(shù)據(jù)庫(kù)表移出數(shù)據(jù)庫(kù)。命令法:REMOVETABLE表名[DELETE][RECYCLE]如果命令中帶一個(gè)問號(hào),則顯示對(duì)話框。三、從數(shù)據(jù)庫(kù)中移出表76“移去”是從數(shù)據(jù)庫(kù)中移出表,使被移出的表成為自由表?!皠h除”是不僅從數(shù)據(jù)庫(kù)中將表移出,而且還從磁盤上刪除該表。一旦某個(gè)表從數(shù)據(jù)庫(kù)中移出,那么與之關(guān)聯(lián)的所有主索引、默認(rèn)值及有關(guān)的規(guī)則都隨之消失,因此,將某個(gè)表移出的操作會(huì)影響到當(dāng)前數(shù)據(jù)庫(kù)中與該表有聯(lián)系的其它表。“移去”是從數(shù)據(jù)庫(kù)中移出表,使被移出的表成為自由表。77第七節(jié)多個(gè)表的同時(shí)使用一、工作區(qū)的概念
數(shù)據(jù)庫(kù)系統(tǒng)中,有時(shí)要求幾個(gè)表同時(shí)處于打開狀態(tài),以便于表間內(nèi)容的相互補(bǔ)充,數(shù)據(jù)表之間進(jìn)行互訪,進(jìn)行信息資源的共享;為此VF系統(tǒng)設(shè)置了分工作區(qū)操作的功能。VFP允許用戶最多同時(shí)打開32767個(gè)數(shù)據(jù)表,但是每次只能對(duì)其中的一個(gè)表進(jìn)行操作。這個(gè)被選中的數(shù)據(jù)表叫當(dāng)前數(shù)據(jù)表。工作區(qū):內(nèi)存中開辟的專門用于存貯數(shù)據(jù)表及相關(guān)文件的區(qū)域。每個(gè)工作區(qū)只能打開一個(gè)工作表,最多可以建立32767個(gè)工作區(qū)。第七節(jié)多個(gè)表的同時(shí)使用78每個(gè)工作區(qū)都有自己的編號(hào)和名稱:1~32767或者A~J,W11~W32767每次啟動(dòng)VFP后,系統(tǒng)默認(rèn)1號(hào)工作區(qū)為當(dāng)前工作區(qū)。每個(gè)表打開后都有兩個(gè)默認(rèn)的別名,一個(gè)是表名,另一個(gè)是工作區(qū)所對(duì)應(yīng)的別名。在前10個(gè)工作區(qū)中指定的默認(rèn)別名是工作區(qū)字母A到J,工作區(qū)11到32767中指定的別名是W11到W32767。每個(gè)工作區(qū)都有自己的編號(hào)和名稱:1~32767或者A~79說明:同一個(gè)數(shù)據(jù)表文件不允許在兩個(gè)工作區(qū)上同時(shí)打開,一個(gè)工作區(qū)中只能打開一個(gè)表。二、當(dāng)前工作區(qū)的選擇格式:SELECT〈工作區(qū)名〉/〈數(shù)據(jù)表別名〉/0功能:指定工作區(qū)號(hào)(1、2、3……A、B、C)或別名的工作區(qū)為當(dāng)前工作區(qū)。如用:SELECT0則:讓系統(tǒng)自動(dòng)選擇區(qū)號(hào)最小的空閑工作區(qū)為當(dāng)前工作區(qū)。說明:同一個(gè)數(shù)據(jù)表文件不允許在兩個(gè)工作區(qū)上同時(shí)打開,一個(gè)工作80一個(gè)表除了前述的兩個(gè)名稱外,還可在use命令中用alias指定的別名:use學(xué)生in1aliasstudent一個(gè)表除了前述的兩個(gè)名稱外,還可在use命令中用alias指81例:分別在第1、2、3工作區(qū)打開學(xué)生,課程和成績(jī)?nèi)齻€(gè)表,并選擇當(dāng)前的工作區(qū)。OPENDATABASE學(xué)生管理SELECT1USE學(xué)生SELECT2USE課程SELECT3USE成績(jī)例:分別在第1、2、3工作區(qū)打開學(xué)生,課程和成績(jī)?nèi)齻€(gè)表,并選82如果到第一個(gè)工作區(qū)操作學(xué)生表,則命令:
SELECT學(xué)生和SELECT1是等價(jià)的三、表之間的關(guān)聯(lián)
參照數(shù)據(jù)數(shù)據(jù)完整性介紹了表之間的關(guān)聯(lián)或聯(lián)系,它們是基于索引建立的一種“永久聯(lián)系”,這種聯(lián)系存在于數(shù)據(jù)庫(kù)中,可以在“查詢?cè)O(shè)計(jì)器”或“視圖設(shè)計(jì)器”中自動(dòng)作為默認(rèn)聯(lián)系條件保持?jǐn)?shù)據(jù)庫(kù)表之間的聯(lián)系。如果到第一個(gè)工作區(qū)操作學(xué)生表,則命令:83永久連接不能控制不同工作區(qū)中記錄指針的聯(lián)動(dòng)。
需要能夠控制表間記錄指針關(guān)系的臨時(shí)聯(lián)系,稱之為“關(guān)聯(lián)”關(guān)聯(lián):建立多個(gè)表文件的記錄之間按某個(gè)關(guān)鍵字表達(dá)式建立對(duì)應(yīng)聯(lián)系,當(dāng)主表文件的當(dāng)前記錄改變后,有聯(lián)系的輔表文件的當(dāng)前記錄也按關(guān)聯(lián)關(guān)系發(fā)生變化。又稱為表文件之間的邏輯關(guān)聯(lián)。永久連接不能控制不同工作區(qū)中記錄指針的聯(lián)動(dòng)。841、設(shè)置關(guān)聯(lián)格式:SETRELATIONTO[關(guān)鍵字表達(dá)式/RECNO()]INTO工作區(qū)名[ADDITIVE]功能:使當(dāng)前工作區(qū)上當(dāng)前數(shù)據(jù)表的記錄指針重新定位時(shí),別名表文件記錄指針也做相關(guān)聯(lián)的移動(dòng)。當(dāng)前工作區(qū)上的當(dāng)前表文件稱關(guān)聯(lián)表文件,其它工作區(qū)上打開的表文件稱被關(guān)聯(lián)表文件;1、設(shè)置關(guān)聯(lián)85關(guān)聯(lián)表被關(guān)聯(lián)表關(guān)聯(lián)依據(jù)關(guān)聯(lián)表被關(guān)聯(lián)表關(guān)聯(lián)依據(jù)86關(guān)聯(lián)的兩種形式:關(guān)鍵字表達(dá)式:當(dāng)前表文件記錄指針移到某一記錄上,被關(guān)聯(lián)的表文件的記錄指針也自動(dòng)指向關(guān)鍵字段值與當(dāng)前表文件相同的第一個(gè)記錄。若被關(guān)聯(lián)表文件無(wú)關(guān)鍵字段值相同的記錄,則指針指向文件尾。要求:被關(guān)聯(lián)表文件使用關(guān)鍵字表達(dá)式建立索引并打開此索引文件。RECNO():數(shù)據(jù)表文件間按記錄號(hào)進(jìn)行關(guān)聯(lián),關(guān)聯(lián)與被關(guān)聯(lián)表文件之間當(dāng)前記錄號(hào)保持相等。關(guān)聯(lián)的兩種形式:87又如:基本情況表和成績(jī)表之間的關(guān)聯(lián)。2、取消關(guān)聯(lián)①、用新的關(guān)聯(lián)替代舊關(guān)聯(lián)②、取消關(guān)聯(lián),但表保持打開狀態(tài)命令:SETRELATIONTO③、關(guān)閉數(shù)據(jù)表又如:基本情況表和成績(jī)表之間的關(guān)聯(lián)。88例:學(xué)生基本情況表與成績(jī)表之間按學(xué)號(hào)建立關(guān)聯(lián)。OPENDATABASE學(xué)生管理USE學(xué)生IN1ORDER學(xué)號(hào)USE成績(jī)IN2ORDER學(xué)號(hào)Sele1SETRELATIONTO學(xué)號(hào)INTO成績(jī)一般為了減少數(shù)據(jù)庫(kù)的存貯容量,類似政治面貌、民族等信息可以借助于關(guān)聯(lián)實(shí)現(xiàn)代碼化。例:學(xué)生基本情況表與成績(jī)表之間按學(xué)號(hào)建立關(guān)聯(lián)。89第八節(jié)排序索引可以使用戶按照某中順序?yàn)g覽或查找表中的記錄,這時(shí)的順序是邏輯的,是通過索引關(guān)鍵字實(shí)現(xiàn)的。另外還有一個(gè)物理排序的命令。排序也稱分類,即按照數(shù)據(jù)表文件中某個(gè)指定字段(稱為關(guān)鍵字段)的值,將所有指定的記錄重新排列,并生成新的表文件。第八節(jié)排序90格式:SORTTO〈文件名〉ON〈關(guān)鍵字段名1〉[/A][/C][/D][,〈關(guān)鍵字段名2〉[/A][/C][/D]…][〈范圍〉][FOR/WHILE〈表達(dá)式〉][FIELDS〈字段名表〉]功能:對(duì)已打開的數(shù)據(jù)庫(kù)文件按指定的關(guān)鍵字段名排序。[/A]表示按遞增順序排序;[/D]表示按遞減順序排序;[/C]表示不區(qū)分大小寫字母,可與[/A]或[/D]連用。格式:SORTTO〈文件名〉ON〈關(guān)鍵字段名1〉[/91二級(jí)VFP程序設(shè)計(jì)教程課件92第四章VisualFoxpro
數(shù)據(jù)庫(kù)及其操作
第四章VisualFoxpro
數(shù)據(jù)庫(kù)及其操作93第一節(jié)VisualFoxpro數(shù)據(jù)庫(kù)及其建立在VisualFoxpro中,數(shù)據(jù)庫(kù)是一個(gè)邏輯上的概念和手段,用于將相互聯(lián)系的數(shù)據(jù)表及其相關(guān)的數(shù)據(jù)庫(kù)對(duì)象統(tǒng)一管理和組織。一般的邏輯層次關(guān)系:數(shù)據(jù)庫(kù)——數(shù)據(jù)表——記錄——字段第一節(jié)VisualFoxpro數(shù)據(jù)庫(kù)及其建立94建立VisualFoxpro數(shù)據(jù)庫(kù)時(shí),建立擴(kuò)展名是dbc的數(shù)據(jù)庫(kù)文件,與之相關(guān)自動(dòng)建立擴(kuò)展名為dbt的備注文件和擴(kuò)展名為dcx的數(shù)據(jù)庫(kù)索引文件。建立一個(gè)數(shù)據(jù)庫(kù),對(duì)應(yīng)的文件有三個(gè):DBC、DBT、DCX。一、建立數(shù)據(jù)庫(kù)1、在項(xiàng)目管理器中建立數(shù)據(jù)庫(kù)方法:在“數(shù)據(jù)”選項(xiàng)卡中,選擇“數(shù)據(jù)庫(kù)”,單擊“新建”。建立VisualFoxpro數(shù)據(jù)庫(kù)時(shí),建立擴(kuò)展名是dbc952、通過“新建”對(duì)話框建立數(shù)據(jù)庫(kù)方法:在“文件”菜單中選擇“新建”。(或者在工具欄上單擊“新建”)。3、使用命令交互建立數(shù)據(jù)庫(kù)格式:CREATEDATABASE庫(kù)文件名2、通過“新建”對(duì)話框建立數(shù)據(jù)庫(kù)96二、使用數(shù)據(jù)庫(kù)在對(duì)一個(gè)數(shù)據(jù)庫(kù)中的表進(jìn)行操作時(shí),需要先打開這個(gè)數(shù)據(jù)庫(kù)。在項(xiàng)目管理器中打開數(shù)據(jù)庫(kù)。(選中庫(kù)后,庫(kù)自動(dòng)打開)通過“打開”對(duì)話框打開數(shù)據(jù)庫(kù)。命令法:OPENDATABASE庫(kù)文件名[EXCLUSIVE|SHARED][NOUPDATE][VALIDATE](在工具欄中間顯示打開的庫(kù)名)二、使用數(shù)據(jù)庫(kù)97EXCLUSIVE:以獨(dú)占方式打開,同一時(shí)刻只能由一個(gè)用戶打開操作。SHARED:以共享方式打開,同一時(shí)刻可由多個(gè)用戶打開操作。NOUPDATE:以只讀方式打開,不允許對(duì)庫(kù)進(jìn)行修改。EXCLUSIVE:以獨(dú)占方式打開,同一時(shí)刻只能由一個(gè)用戶打98三、修改數(shù)據(jù)庫(kù)在VISUALFOXPRO中修改數(shù)據(jù)庫(kù)實(shí)際上是打開數(shù)據(jù)庫(kù)設(shè)計(jì)器,用戶可以在數(shù)據(jù)庫(kù)設(shè)計(jì)器中完成各種數(shù)據(jù)庫(kù)對(duì)象的建立、修改和刪除等操作。在項(xiàng)目管理器中,選中庫(kù),再單擊修改。在“文件”菜單中選擇“打開”。MODIFYDATABASE[庫(kù)文件名][NOWAIT][NOEDIT][NOWAIT]只在程序中使用,不在交互命令窗口中使用,即打開庫(kù)設(shè)計(jì)器后,程序繼續(xù)運(yùn)行,不等待。[NOEDIT]打開數(shù)據(jù)庫(kù)設(shè)計(jì)器禁止對(duì)數(shù)據(jù)庫(kù)進(jìn)行修改三、修改數(shù)據(jù)庫(kù)99四、刪除數(shù)據(jù)庫(kù)項(xiàng)目管理器中選擇庫(kù),單擊“移去”。DELETEDATABASE庫(kù)名數(shù)據(jù)庫(kù)文件的刪除,并不刪除所包含的表文件。庫(kù)文件僅僅建立表之間的聯(lián)系。四、刪除數(shù)據(jù)庫(kù)100第二節(jié)建立數(shù)據(jù)庫(kù)表一、在數(shù)據(jù)庫(kù)中建立表建立表時(shí),首先要對(duì)所處理的對(duì)象進(jìn)行調(diào)查分析,再根據(jù)需要設(shè)計(jì)一張二維表。當(dāng)表的行、列個(gè)數(shù)及每列中數(shù)據(jù)的屬性確定后,再把數(shù)據(jù)集合在其中即可。
1.定義表中的數(shù)據(jù)類型
(1)定義二維表名設(shè)計(jì)一張二維表,給表起個(gè)名字。
(2)二維表欄目設(shè)計(jì)第二節(jié)建立數(shù)據(jù)庫(kù)表101編號(hào)姓名家庭地址年齡工資1001張三青海西寧18595.361002……………………10031004100510061007職工基本情況表編號(hào)姓名家庭地址年齡工資1001張三青海西寧18595.36102(3)填寫二維表的內(nèi)容①、表的名字(標(biāo)題)②、表中每一列的欄目標(biāo)題序列為表頭,它標(biāo)明了每一列對(duì)應(yīng)數(shù)據(jù)的屬性。③、表中每一行的數(shù)據(jù)是表的內(nèi)容。(4)定義數(shù)據(jù)表的結(jié)構(gòu)在VisualFoxPro系統(tǒng)中,一張二維表對(duì)應(yīng)一個(gè)數(shù)據(jù)表,稱為表文件(Table)。(3)填寫二維表的內(nèi)容103一張二維表由表名、表頭、表的內(nèi)容三部分組成,一個(gè)數(shù)據(jù)表則由數(shù)據(jù)表名、數(shù)據(jù)表的結(jié)構(gòu)、數(shù)據(jù)表的記錄三要素構(gòu)成。①、數(shù)據(jù)表的文件名相當(dāng)于二維表中的表名,它是數(shù)據(jù)表的主要標(biāo)識(shí),用戶可以依靠數(shù)據(jù)表名在磁盤上存取、使用指定的數(shù)據(jù)表。②、數(shù)據(jù)表的結(jié)構(gòu)相當(dāng)于二維表的表頭,二維表的每一列對(duì)應(yīng)數(shù)據(jù)表中的一個(gè)字段,其屬性決定了字段名、字段類型和字段長(zhǎng)度。一張二維表由表名、表頭、表的內(nèi)容三部分組成,一個(gè)數(shù)據(jù)表則由數(shù)104③、數(shù)據(jù)表中的記錄是數(shù)據(jù)表中不可分割的基本項(xiàng),即二維表中的表的內(nèi)容。2.利用表設(shè)計(jì)器創(chuàng)建表方法1:在“文件”菜單中選擇“新建”;方法2:CREATE[〈表文件名〉]方法3、使用數(shù)據(jù)庫(kù)設(shè)計(jì)器建立數(shù)據(jù)表(1)輸入字段名一般允許由1—10字符(自由表)組成,要求以字母開頭,不含空格;數(shù)據(jù)庫(kù)中的表其字段名最長(zhǎng)可達(dá)到128個(gè)字符。③、數(shù)據(jù)表中的記錄是數(shù)據(jù)表中不可分割的基本項(xiàng),即二維表中的表105(2)輸入字段的類型每一個(gè)字段都反映對(duì)象的一個(gè)方面屬性,根據(jù)其表達(dá)含義,可有不同的數(shù)據(jù)類型。根據(jù)計(jì)算機(jī)處理數(shù)據(jù)的特點(diǎn),必須定義數(shù)據(jù)類型。(3)輸入字段寬度指該字段所能容納數(shù)據(jù)的最大字節(jié)數(shù)。有些類型的數(shù)據(jù)其寬度是固定的。(2)輸入字段的類型106(4)輸入小數(shù)位數(shù)數(shù)值型、浮點(diǎn)型、雙精度型的字段可指定小數(shù)據(jù)位。數(shù)值型字段:字段寬度=整數(shù)部分寬度+小數(shù)點(diǎn)1位+小數(shù)位寬度小數(shù)位至少比整個(gè)字段寬度小2。(4)輸入小數(shù)位數(shù)107空值NULL項(xiàng)允許該字段值為空或使用缺省數(shù)據(jù),被設(shè)為關(guān)鍵字的字段值不允許為空。字段有效性組框:定義字段的有效性規(guī)則、提示信息及設(shè)置缺省值。顯示組框設(shè)置字段的輸入格式、顯示格式、顯示標(biāo)題字段注釋當(dāng)前行前有一個(gè)雙向箭頭??罩礜ULL項(xiàng)允許該字段值為空或使用缺省數(shù)據(jù),被設(shè)為108二、表文件的打開與關(guān)閉
1、打開表文件命令法:USE表文件名功能:在當(dāng)前工作區(qū)中,打開一指定的表文件。說明:擴(kuò)展名可省略,如果原來(lái)已在該工作區(qū)中打開了一個(gè)表文件,則關(guān)閉它,再打開新的文件;打開后,記錄指針指向第一個(gè)記錄。窗口菜單法:在“窗口”菜單中選擇“數(shù)據(jù)工作期”,單擊“打開”。二、表文件的打開與關(guān)閉1092、關(guān)閉表文件格式:USE——關(guān)閉在當(dāng)前工作區(qū)中打開的表文件
CLOSE
DATABASE——關(guān)閉所有工作區(qū)被打開的表文件
CLOSEALL——關(guān)閉所有工作區(qū)中的所有文件;
QUIT——關(guān)閉所有文件,且退出系統(tǒng)窗口菜單法:在“窗口”菜單中選擇“數(shù)據(jù)工作期”,選擇欲關(guān)閉的表,單擊“關(guān)閉”。2、關(guān)閉表文件1103、表的獨(dú)占與共享在網(wǎng)絡(luò)環(huán)境下使用時(shí),還要確定是獨(dú)占還是共享。涉及表數(shù)據(jù)的安全性問題。獨(dú)占打開:一張表只能被一個(gè)用戶打開。共享打開:一張表可被多個(gè)用戶同時(shí)打開。USE表名SHARED:以共享方式打表。USE表名EXCLUSIVED:以獨(dú)占方式打開表。3、表的獨(dú)占與共享111三、修改表結(jié)構(gòu)1、菜單操作法方法:打開欲修改的表,執(zhí)行“顯示”菜單中的“表設(shè)計(jì)器”。在“表設(shè)計(jì)器”窗口,修改表中所有字段的名字、類型、寬度和是否建立索引,完成對(duì)數(shù)據(jù)表結(jié)構(gòu)的修改。
2、命令法格式:MODIFYSTRUCTURE[〈表文件名〉]三、修改表結(jié)構(gòu)112四、記錄指針在向表輸入數(shù)據(jù)時(shí),系統(tǒng)按照其輸入的前后順序,給每一個(gè)記錄賦予一個(gè)記錄號(hào)。記錄指針是VFP系統(tǒng)內(nèi)部的一個(gè)指示器,用于確定當(dāng)前正在操作的記錄。(表中的數(shù)據(jù)以記錄為單位操作)每當(dāng)打開一個(gè)表文件時(shí),指針總是指向第一條記錄。記錄指針指向的記錄叫當(dāng)前記錄,記錄指針指向哪一個(gè)記錄,這一個(gè)記錄就是當(dāng)前操作的記錄,即當(dāng)前記錄。四、記錄指針113測(cè)試當(dāng)前記錄用函數(shù)RECNO()。最小值為1,最大值為RECCOUNT()+1。打開表時(shí)記錄指針情況:表中無(wú)記錄:BOF()=.T.EOF()=.T.RECNO()=1表中有記錄:BOF()=.F.EOF()=.F.RECNO()=1測(cè)試當(dāng)前記錄用函數(shù)RECNO()。114五、表中輸入數(shù)據(jù)1.創(chuàng)建表時(shí)立即輸入數(shù)據(jù)在創(chuàng)建表時(shí),如果表中所有字段的屬性已定義完成,可按“確定”按鈕保存表結(jié)構(gòu),同時(shí)打開“系統(tǒng)”窗口,顯示“現(xiàn)在輸入數(shù)據(jù)嗎?”的對(duì)話。五、表中輸入數(shù)據(jù)115選擇“是”按鈕,可以立即進(jìn)入表“瀏覽”窗口,進(jìn)行表中數(shù)據(jù)的輸入。2.以追加方式輸入數(shù)據(jù)方法:打開欲輸入數(shù)據(jù)的表,執(zhí)行“顯示”菜單中的“瀏覽”,再執(zhí)行“顯示”菜單下的“追加方式”。選擇“是”按鈕,可以立即進(jìn)入表“瀏覽”窗口,進(jìn)行表中數(shù)據(jù)的輸1163、命令法追加1)append命令在表的尾部增加記錄,有兩種格式:append——表尾增加一條記錄,并輸入數(shù)據(jù)。appendblank——表尾增加一條空記錄。2)insert可在表的任何位置插入新的記錄命令:INSERT[BEFORE][BLANK]功能:在當(dāng)前庫(kù)文件中當(dāng)前記錄的前或后邊插入一條記錄,并輸入數(shù)據(jù)。3、命令法追加117BEFORE:表示在當(dāng)前記錄前插入新記錄,否則在當(dāng)前記錄后插入;BLANK:表示插入一條空記錄,不進(jìn)入全屏幕輸入狀態(tài),反之則進(jìn)入全屏幕輸入狀態(tài)輸入數(shù)據(jù)。如:在第5條記錄后插入一條記錄:GO5INSERT在第10條記錄前插入一條空記錄:GO5INSERTBEFOREBLANKBEFORE:表示在當(dāng)前記錄前插入新記錄,否則在當(dāng)前記錄后插1184、數(shù)據(jù)的輸入要點(diǎn)備注型數(shù)據(jù)輸入方法:把光標(biāo)移到備注型字段下雙擊,即可進(jìn)入備注字段的編輯窗口。(輸入完memo變成Memo)通用型數(shù)據(jù)的輸入方法:把光標(biāo)移到通用型字段下雙擊,進(jìn)入通用型字段的數(shù)據(jù)編輯窗口。在“編輯”菜單中選擇“插入對(duì)象”。確定對(duì)象后,該字段中的gen變成Gen。4、數(shù)據(jù)的輸入要點(diǎn)119六、使用瀏覽窗口操作表1、打開瀏覽器窗口項(xiàng)目管理器:列表中選擇表,單擊“瀏覽”。數(shù)據(jù)庫(kù)設(shè)計(jì)器:選中表,單擊“瀏覽”,或者右擊表,選擇“瀏覽”。使用命令:打開表以后,Browse。六、使用瀏覽窗口操作表120瀏覽器窗口有兩種顯示方式:編輯方式和瀏覽方式切換:在“顯示”菜單中,選擇“瀏覽”或者“編輯”。瀏覽窗口的分割:拖動(dòng)“分割”按鈕。(在瀏覽器窗口左下角)2、瀏覽操作調(diào)整字段顯示寬度,調(diào)整字段的顯示順序(拖動(dòng)),但表結(jié)構(gòu)不變。注意:執(zhí)行瀏覽或者編輯命令后,菜單中出現(xiàn)“表”菜單項(xiàng)。瀏覽器窗口有兩種顯示方式:編輯方式和瀏覽方式121在同一記錄中選擇字段:鼠標(biāo)或enter左箭頭右箭頭tabshift+table在上下記錄間的切換:鼠標(biāo)或上下箭頭翻頁(yè):pageuppagedown3、增加記錄ctrl+y,以表尾增加一條新記錄。4、修改記錄移動(dòng)插入點(diǎn)到欲修改的記錄上,直接修改。5、刪除記錄ctrl+t,刪除當(dāng)前記錄。在同一記錄中選擇字段:鼠標(biāo)或enter左箭頭右箭頭ta122七、刪除記錄命令(邏輯刪除和物理刪除)刪除記錄分兩步:做刪除標(biāo)記(邏輯刪除)、徹底刪除帶標(biāo)記的記錄(物理刪除)。1、置刪除標(biāo)記的命令
方法1:在表“瀏覽”窗口,單擊欲刪除記錄的刪除標(biāo)記。方法2:在“瀏覽”窗口,執(zhí)行“表”菜單中的“刪除記錄”命令。方法3:delete[for條件表達(dá)式]七、刪除記錄命令(邏輯刪除和物理刪除)123刪除標(biāo)記在存貯時(shí),占一個(gè)字節(jié)。相關(guān)函數(shù):DELETE()如:判斷當(dāng)前記錄是否被設(shè)置刪除標(biāo)志:GO6?DELETE()又如:顯示當(dāng)前庫(kù)中所有設(shè)置了刪除標(biāo)志的記錄:DISPALLFORDELETE()刪除標(biāo)記在存貯時(shí),占一個(gè)字節(jié)。1242、恢復(fù)記錄的命令對(duì)加上邏輯刪除標(biāo)記的記錄,取消其刪除標(biāo)記,可對(duì)其進(jìn)行恢復(fù)操作。方法1:在表“瀏覽”窗口,單擊欲恢復(fù)記錄的刪除標(biāo)記。(開關(guān)性質(zhì))方法2:在“瀏覽”窗口中,執(zhí)行“表”菜單中“恢復(fù)記錄”命令;2、恢復(fù)記錄的命令125方法3:recall[for條件表達(dá)式]操作:將當(dāng)前表中已經(jīng)邏輯刪除的男生記錄恢復(fù)。Recallfor性別=”男”3、物理刪除有刪除標(biāo)記的記錄物理刪除就是把無(wú)效的記錄徹底從磁盤中刪除掉。方法1:在“瀏覽”窗口中,執(zhí)行“表”菜單中“徹底刪除記錄”命令;方法3:recall[for條件表達(dá)式]126方法2:pack。4、物理刪除表中的全部記錄zap——一次刪除所有記錄。注:不管是否有刪除標(biāo)記,但表本身未被刪除,表結(jié)構(gòu)依然存在。八、修改記錄命令1、EDIT或CHANGE命令交互式修改。格式:EDIT/change方法2:pack。1272、REPLACE成批替換數(shù)據(jù)(重點(diǎn))格式:REPLACE[〈范圍〉]〈字段1〉WITH〈表達(dá)式1〉[,〈字段2〉WITH〈表達(dá)式2〉……][FOR/WHILE〈條件〉]功能:對(duì)當(dāng)前表文件中指定范圍內(nèi)滿足條件的所有記錄,用〈表達(dá)式〉的值替換〈字段〉中原有的值。如:REPLACEALL總分WITH數(shù)學(xué)+語(yǔ)文REPLACEALL基本工資WITH基本工資+100FOR職稱=“教授”2、REPLACE成批替換數(shù)據(jù)(重點(diǎn))128九、顯示記錄命令(foxbase中更實(shí)用)格式1:LIST[〈范圍〉][〈字段名表達(dá)式〉][FOR/WHILE〈條件〉][OFF][TOPRINT|TOFILE文件名]格式2:DISPLAY[〈范圍〉][〈字段名表達(dá)式〉][FOR/WHILE〈條件〉][OFF][TOPRINT|TOFILE文件名]功能:把滿足條件的記錄的指定字段的內(nèi)容顯示出來(lái)。后者可以分屏顯示輸出;如果不指定范圍和條件,前者默認(rèn)地輸出全部記錄,而后者只輸出當(dāng)前記錄。九、顯示記錄命令(foxbase中更實(shí)用)129十、查詢定位命令1、窗口操作方式方法:打開要使用的表,在“顯示”菜單下,選擇“瀏覽”;在“表”菜單中,選擇“轉(zhuǎn)到記錄”,子菜單中不同的選項(xiàng),可以將記錄指針移動(dòng)到相應(yīng)的記錄上。十、查詢定位命令130(1)選擇“第一個(gè)”,確定第一個(gè)記錄為當(dāng)前記錄;(2)選擇“最后一個(gè)”,確定最后一個(gè)記錄為當(dāng)前記錄;(3)選擇“下一個(gè)”,確定當(dāng)前記錄的下一個(gè)記錄為當(dāng)前記錄;(4)選擇“前一個(gè)”,確定當(dāng)前記錄的前一個(gè)記錄為當(dāng)前記錄;(1)選擇“第一個(gè)”,確定第一個(gè)記錄為當(dāng)前記錄;131(5)選擇“記錄號(hào)”,便進(jìn)入“轉(zhuǎn)到記錄”對(duì)話窗口,在“轉(zhuǎn)到記錄”對(duì)話框內(nèi),可以選擇記錄號(hào),確定該記錄號(hào)指定的記錄為當(dāng)前記錄;(6)選擇“定位”,進(jìn)入“定位記錄”窗口,在“定位記錄”對(duì)話框內(nèi),輸入定位條件表達(dá)式,確定滿足定位條件表達(dá)式的第一個(gè)記錄為當(dāng)前記錄。(5)選擇“記錄號(hào)”,便進(jìn)入“轉(zhuǎn)到記錄”對(duì)話窗口,在“轉(zhuǎn)到1322、絕對(duì)定位命令格式:GO〈數(shù)值表達(dá)式〉 GOTOP GOBOTTOM功能:將記錄指針定位于首記錄、尾記錄或〈數(shù)值表達(dá)式〉的值所指定的記錄。當(dāng)前記錄是誰(shuí),可以從狀態(tài)行看出來(lái);2、絕對(duì)定位命令1333、相對(duì)定位命令格式:SKIP[±〈數(shù)值表達(dá)式〉]功能:將記錄指針相對(duì)當(dāng)前記錄向下(正方向)或向上(負(fù)方向)移動(dòng)數(shù)值表達(dá)式的值所指定的記錄數(shù)。3、相對(duì)定位命令1344、按條件定位①、條件定位命令LOCATE格式:LOCATE[〈范圍〉][FOR/WHILE〈條件〉]功能:在指定范圍內(nèi)將指針定位于滿足條件的第一條記錄,如果沒找到滿足條件的記錄,則記錄指針定位于表尾,EOF()函數(shù)為邏輯真。缺省范圍選擇時(shí),取all,即在所有記錄中查找。如:LOCATEALLFOR姓名=“王”DISPLAY4、按條件定位135②、繼續(xù)查找命令CONTINUE格式:CONTINUE功能:繼續(xù)查找滿足條件的下一條記錄;重復(fù)多次使用CONTINUE命令,可找到滿足條件的所有記錄;②、繼續(xù)查找命令CONTINUE136③、查詢測(cè)試函數(shù)FOUND格式:FOUND()功能:如果找到了滿足條件的記錄,則返回邏輯真,反之則返回邏輯假;③、查詢測(cè)試函數(shù)FOUND137通常的操作模式如下:Locatefor條件DOWHILEFOUND()處理CONTINUEENDDO用循環(huán)對(duì)滿足條件的所有記錄進(jìn)行操作。通常的操作模式如下:138第四節(jié)索引
一、基本概念什么是索引呢?如一本書,有很多內(nèi)容,為了快速找到我們需要的章節(jié),借助于目錄。那么在數(shù)據(jù)庫(kù)中,也有類似于目錄的信息,稱之為索引。書中的目錄是一份頁(yè)碼的列表,指向書中的書頁(yè),但數(shù)據(jù)庫(kù)中的索引是一個(gè)記錄號(hào)的列表,指向表中待處理的記錄,并表示記錄的處理順序。第四節(jié)索引139索引是按著索引表達(dá)式的值使數(shù)據(jù)表中的記錄有序排列的一種技術(shù),在VisualFoxPro系統(tǒng)中是借助于索引文件實(shí)現(xiàn)的。一般情況下,表中記錄的順序是由數(shù)據(jù)輸入的前后順序決定的,并用記錄號(hào)予以標(biāo)識(shí)。除非有記錄插入或者有記錄刪除,否則表中的記錄順序總是不變的。索引實(shí)際上是一種排序,但是它不改變數(shù)據(jù)表中數(shù)據(jù)的物理順序,而是另外建立一個(gè)記錄號(hào)列表。索引是按著索引表達(dá)式的值使數(shù)據(jù)表中的記錄有序排列的一種技術(shù),140一個(gè)表可以建立多個(gè)索引,每一個(gè)索引代表一種處理記錄的順序。即不同的索引,決定了讀取記錄的不同順序。二、索引類型在數(shù)據(jù)庫(kù)容器中的數(shù)據(jù)表可以建立主索引(PrimaryIndex)。索引表達(dá)式的值是唯一能夠標(biāo)識(shí)每個(gè)記錄處理順序的值。即作為主索引的關(guān)鍵字是不允許重復(fù)出現(xiàn)的,也不允許取空值。一個(gè)表可以建立多個(gè)索引,每一個(gè)索引代表一種處理記錄的順序。即1412.候選索引候選索引(CandidateIndex)像主索引一樣,它的索引表達(dá)式的值是唯一能夠標(biāo)識(shí)每個(gè)記錄處理順序的值。但是,一個(gè)數(shù)據(jù)表可以建立多個(gè)候選索引,它在特定環(huán)境下可以視為主索引。2.候選索引1423.普通索引普通索引(RegularIndex)表示把由索引表達(dá)式為每個(gè)記錄產(chǎn)生的值,存入索引文件中。如果多個(gè)記錄的索引表達(dá)式值相同,則可以重復(fù)存儲(chǔ),并用獨(dú)立的指針指向各個(gè)記錄。3.普通索引143
4.唯一索引唯一索引(UniqueIndex)表示把由索引表達(dá)式為每個(gè)記錄產(chǎn)生的唯一值,存入索引文件中,如果數(shù)據(jù)表中記錄的索引表達(dá)式值相同,則只存儲(chǔ)第一個(gè)索引表達(dá)式值。它允許數(shù)據(jù)表中各記錄的索引字段或字段組合表達(dá)式的值相同,但在索引文件中只保留數(shù)據(jù)表中與索引字段值相同的第一條記錄。4.唯一索引144三、在表設(shè)計(jì)器中建立索引1、單項(xiàng)索引的建立基于一個(gè)字段的索引叫單項(xiàng)索引。單項(xiàng)索引的建立有兩種方式:普通索引的建立:使用表設(shè)計(jì)器的字段標(biāo)簽或索引標(biāo)簽。在表設(shè)計(jì)器中,字段標(biāo)簽中,索引的下拉列表框中,選擇索引方向,升序(↑)或降序(↓);建立的索引就是一個(gè)普通索引。其他索引的建立:必須使用表設(shè)計(jì)器的索引標(biāo)簽。在表設(shè)計(jì)器中,索引標(biāo)簽中,選擇字段和索引類型。三、在表設(shè)計(jì)器中建立索引1452、復(fù)合字段索引的建立基于多個(gè)字段的索引叫復(fù)合字段索引使用表設(shè)計(jì)器的索引標(biāo)簽,選擇確定索引名和類型后,單擊“表達(dá)式”右側(cè)的按鈕,在表達(dá)式生成器中確定索引表達(dá)式。2、復(fù)合字段索引的建立146四、用命令建立索引Indexon索引表達(dá)式to簡(jiǎn)單索引文件名|tag結(jié)構(gòu)復(fù)合索引文件名[ofcdxfilename][ascending|descending][unique|candidate][additive](關(guān)閉以前索引,使建立的索引成為當(dāng)前索引)to簡(jiǎn)單索引文件名:則表示建立一個(gè)簡(jiǎn)單索引文件。tag結(jié)構(gòu)復(fù)合索引名:則表示建立一個(gè)與表同名的結(jié)構(gòu)復(fù)合索引。of非結(jié)構(gòu)復(fù)合索引文件名:建立一個(gè)非結(jié)構(gòu)復(fù)合索引文件名。四、用命令建立索引147即可以建立在三種類型的索引。[ascending|descending]:升降序。[unique|candidate]:是唯一索引還是候選索引。Additive:是否關(guān)閉以前索引,使建立的索引成為當(dāng)前索引。默認(rèn)為關(guān)閉以前的索引。例:indexon年齡tag年齡即可以建立在三種類型的索引。148五、使用索引1.打開索引文件與表名相同的結(jié)構(gòu)索引在打開表時(shí)都能夠自動(dòng)打開,但是對(duì)于非結(jié)構(gòu)索引必須在使用之前打開索引文件。命令格式:
SETINDEXTO索引文件1,索引文件2,……可以打開多個(gè)索引文件,但第一個(gè)索引文件成為主控索引文件。五、使用索引1492.設(shè)置當(dāng)前索引若數(shù)據(jù)表中建立了許多索引,其中總有一個(gè)為主,數(shù)據(jù)表記錄總是以該索引的要求排序,這個(gè)索引就叫主控索引或者當(dāng)前索引。結(jié)構(gòu)復(fù)合索引文件隨著數(shù)據(jù)表打開后,其中的索引標(biāo)識(shí)(tag)并不起作用,數(shù)據(jù)表記錄順序仍然保持原始的數(shù)據(jù)排列,必須指定某個(gè)索引標(biāo)識(shí)為主控索引后,數(shù)據(jù)表記錄的排列順序才會(huì)跟著這個(gè)標(biāo)識(shí)的索引順序變化。2.設(shè)置當(dāng)前索引150設(shè)置主控索引的兩種方法:①、命令法:SERORDERTO[索引號(hào)|[TAG]索引名][ASCENDING、DESCENDING]功能:將指定索引號(hào)或者索引名的索引作為主控索引。例:將結(jié)構(gòu)索引文件中的“訂購(gòu)單號(hào)”設(shè)置為當(dāng)前索引。SETORDERTOTAG訂購(gòu)單號(hào)或SETORDERTO訂購(gòu)單號(hào)設(shè)置主控索引的兩種方法:151例:將結(jié)構(gòu)索引文件中的“學(xué)號(hào)”設(shè)置為前索引。Setordertotag學(xué)號(hào)操作:將學(xué)生表中的所在系設(shè)為主控索引,并瀏覽該表。②、交互方式:瀏覽表→表菜單→屬性如:將學(xué)生表中的學(xué)生號(hào)設(shè)為主控索引,并瀏覽該表。例:將結(jié)構(gòu)索引文件中的“學(xué)號(hào)”設(shè)置為前索引。1523.使用索引快速定位用SEEK命令定位。格式:SEEK索引關(guān)鍵字值[ORDER索引號(hào)|[TAG]索引名][ASCENDING、DESCENDING]功能:以主控索引為序,找索引關(guān)鍵字的值為指定指的記錄。例。假設(shè)當(dāng)前正在使用的學(xué)生表,將記錄指針定位到學(xué)號(hào)為9921105的記錄上。SEEK‘9921105’ORDER學(xué)號(hào)3.使用索引快速定位1534.刪除索引(1)在表設(shè)計(jì)器中使用“索引”選項(xiàng)卡選擇并刪除(2)使用命令
DELETETAGTagName1DELETETAGALL4.刪除索引154第五節(jié)數(shù)據(jù)完整性
數(shù)據(jù)完整性是保證數(shù)據(jù)正確的特性,數(shù)據(jù)完整性一般包括實(shí)體完整性、域完整性和參照完整性。一、實(shí)體完整性與主關(guān)鍵字實(shí)體完整性是保證表中記錄唯一的特性,即在一個(gè)表中不允許有重復(fù)的記錄。利用主關(guān)鍵字或侯選關(guān)鍵字來(lái)保證表中的記錄唯一,即保證實(shí)體唯一性。第五節(jié)數(shù)據(jù)完整性155二、域完整性與約束規(guī)則數(shù)據(jù)類型的定義屬于域完整性的范疇。因?yàn)閿?shù)據(jù)類型的定義本身已經(jīng)包含了數(shù)據(jù)的取值范圍。域約束規(guī)則也稱做字段的有效性規(guī)則,在插入或修改字段值時(shí)被激活,主要用于檢驗(yàn)數(shù)據(jù)的正確性。在表設(shè)計(jì)器中建立字段有效性規(guī)則。二、域完整性與約束規(guī)則156例:以“教師”數(shù)據(jù)庫(kù)中的“教師”表為例,設(shè)置年齡的有效性規(guī)則在20至60之間,當(dāng)輸入的教師年齡不在此范圍時(shí)給出出錯(cuò)信息,教師的默認(rèn)年齡為32。在“規(guī)則”框中(或表達(dá)式生成器)輸入表達(dá)式:年齡>=20.and.年齡<=60在“信息”框中輸入表達(dá)式:“年齡輸入錯(cuò)誤,應(yīng)該在20-60之間”在“默認(rèn)值”框中,輸入表達(dá)式:32注意:規(guī)則是邏輯表達(dá)式,信息是字符表達(dá)式,默認(rèn)值類型根據(jù)字段類型決定。例:以“教師”數(shù)據(jù)庫(kù)中的“教師”表為例,設(shè)置年齡的有效性規(guī)則157三、參照完整性與表之間的關(guān)聯(lián)參照完整性與表之間的關(guān)聯(lián)有關(guān),其含義是:當(dāng)插入、刪除或修改一個(gè)表中的數(shù)據(jù)時(shí),通過參照引用相互關(guān)聯(lián)的另一個(gè)表中的數(shù)據(jù),來(lái)檢查對(duì)表操作是否正確。在VisualFoxpro中為了建立參照完整性,必須首先建立表之間的聯(lián)系。三、參照完整性與表之間的關(guān)聯(lián)1581、建立表之間的聯(lián)系在父表中建立主索引,在子表中建立普通索引,然后通過父表的主索引和子表的普通索引建立兩個(gè)表之間的聯(lián)系。將“學(xué)生”數(shù)據(jù)庫(kù)中的“學(xué)生”的“學(xué)號(hào)”字段設(shè)為主索引,“選課”表中的“學(xué)號(hào)”字段設(shè)為普通索引,建立兩表之間的關(guān)聯(lián)。方法:在數(shù)據(jù)庫(kù)設(shè)計(jì)器中,將父表中的主索引拖動(dòng)到子表的普通索引上。1、建立表之間的聯(lián)系1592、設(shè)置參照完整性約束建立參照完整性之前必須首先清理數(shù)據(jù)庫(kù)。清理數(shù)據(jù)庫(kù)是物理刪除數(shù)據(jù)庫(kù)中所有帶刪除標(biāo)記的記錄。清理方法:打開數(shù)據(jù)庫(kù)管理器,執(zhí)行“數(shù)據(jù)庫(kù)”中的“清理數(shù)據(jù)庫(kù)”。設(shè)置參照完整性:右鍵單擊連線→編輯參照完整性,分別設(shè)置:更新規(guī)則、刪除規(guī)則、插入規(guī)則。2、設(shè)置參照完整性約束160在“參照完整性生成器”窗口,有三個(gè)選項(xiàng)卡供用戶選擇。其中:當(dāng)選擇“更新規(guī)則”選項(xiàng)卡,可以利用三個(gè)選擇按鈕,設(shè)置關(guān)聯(lián)表間的更新規(guī)則,即如何更新對(duì)父表。級(jí)聯(lián):用新的關(guān)鍵字值更新子表中的所有相關(guān)記錄;限制:若子表中有相關(guān)記錄則禁止更新;忽略:允許更新,不管子表中的相關(guān)記錄。在“參照完整性生成器”窗口,有三個(gè)選項(xiàng)卡供用戶選擇。其中:161當(dāng)選擇“刪除規(guī)則”選項(xiàng)卡,可以利用三個(gè)選擇按鈕,設(shè)置關(guān)聯(lián)表間的刪除規(guī)則。如何刪除父表中的內(nèi)容。級(jí)聯(lián):刪除子表中的所有相關(guān)記錄;限制:若子表中有相關(guān)記錄,則禁止刪除;忽略:允許刪除,不管子表中的相關(guān)記錄。當(dāng)選擇“刪除規(guī)則”選項(xiàng)卡,可以利用三個(gè)選擇按鈕,設(shè)置關(guān)聯(lián)表間162選擇“插入規(guī)則”選項(xiàng)卡,可以利用二個(gè)選擇按鈕,設(shè)置關(guān)聯(lián)表間的插入規(guī)則。即如何在子表中插入記錄:限制:若父表中沒有匹配的關(guān)鍵字值,則禁止插入;忽略:允許插入。選擇“插入規(guī)則”選項(xiàng)卡,可以利用二個(gè)選擇按鈕,設(shè)置關(guān)聯(lián)表間的163例如:學(xué)生情況表(一個(gè)學(xué)生一個(gè)記錄,以學(xué)號(hào)建立主索引)和學(xué)生考試成績(jī)表(一門課的成績(jī)是一個(gè)記錄,以學(xué)號(hào)建立普通索引)。設(shè)置“學(xué)生”數(shù)據(jù)庫(kù)中三個(gè)表的參照完整性:更新和刪除規(guī)則為“級(jí)聯(lián)”,插入規(guī)則為“限制”。并驗(yàn)證其結(jié)果。例如:學(xué)生情況表(一個(gè)學(xué)生一個(gè)記錄,以學(xué)號(hào)建立主索引)和學(xué)生164第六節(jié)自由表一、數(shù)據(jù)庫(kù)表與自由表自由表:不屬于任何數(shù)據(jù)庫(kù)的表,其擴(kuò)展名為dbf。以一個(gè)獨(dú)立的文件形式存在,不具備數(shù)據(jù)庫(kù)中的表所擁有的部分特性:如長(zhǎng)文件名,有效性規(guī)則等??梢詫⒆杂杀硖砑拥綌?shù)據(jù)庫(kù)中,成為數(shù)據(jù)庫(kù)表;也可以將數(shù)據(jù)庫(kù)表從數(shù)據(jù)庫(kù)中移出,成為自由表。當(dāng)沒有打開數(shù)據(jù)庫(kù)時(shí)建立的表就是自由表。第六節(jié)自由表165建立自由表的方法:從“項(xiàng)目管理器”中選擇“自由表”,然后建立。在無(wú)數(shù)據(jù)庫(kù)打開時(shí),從文件菜單選擇“新建”。在無(wú)數(shù)據(jù)庫(kù)打開時(shí),使用CREAT命令建立。建立自由表的方法:166二、將自由表添加到數(shù)據(jù)庫(kù)
在項(xiàng)目管理器中,單擊添加,或數(shù)據(jù)庫(kù)設(shè)計(jì)器中,右擊選“添加”,可將自由表添加
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 酒店線上服務(wù)平臺(tái)建設(shè)合同
- 主持人兼職勞務(wù)合同范本
- 倉(cāng)儲(chǔ)運(yùn)輸合同范文
- 高考數(shù)學(xué)(理)一輪復(fù)習(xí)教案:第十三篇 推理證明、算法、復(fù)數(shù)第2講 直接證明與間接證明
- 2025年濟(jì)南道路運(yùn)輸從業(yè)人員資格考試內(nèi)容有哪些
- 2025年西安考貨運(yùn)從業(yè)資格證題庫(kù)答案
- 孔隙結(jié)構(gòu)對(duì)大氣等離子噴涂熱障涂層沖蝕失效行為的影響
- 2025年滬教版選修4歷史下冊(cè)階段測(cè)試試卷含答案
- 2025年人教B版高三歷史下冊(cè)月考試卷含答案
- 2025年中圖版選修4地理上冊(cè)階段測(cè)試試卷含答案
- 正大天虹方矩管鍍鋅方矩管材質(zhì)書
- 2024年山東魯商集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 山東省泰安市2022年初中學(xué)業(yè)水平考試生物試題
- 受賄案例心得體會(huì)
- 人教A版高中數(shù)學(xué)選擇性必修第一冊(cè)第二章直線和圓的方程-經(jīng)典例題及配套練習(xí)題含答案解析
- 圖書館學(xué)基礎(chǔ)簡(jiǎn)明教程
- 畢業(yè)設(shè)計(jì)(論文)-液體藥品灌裝機(jī)的設(shè)計(jì)與制造
- 二年級(jí)下冊(cè)數(shù)學(xué)教案 -《數(shù)一數(shù)(二)》 北師大版
- 銀行內(nèi)部舉報(bào)管理規(guī)定
- 平面幾何強(qiáng)化訓(xùn)練題集:初中分冊(cè)數(shù)學(xué)練習(xí)題
- 項(xiàng)目獎(jiǎng)金分配獎(jiǎng)勵(lì)制度和方案完整版
評(píng)論
0/150
提交評(píng)論