




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第 4 章,表與數(shù)據(jù)庫的基本操作,本 章 要 點(diǎn),1、建立數(shù)據(jù)庫與表 (1)基本概念(項目、數(shù)據(jù)庫、數(shù)據(jù)庫表及其之間的關(guān)系,自由表與數(shù)據(jù)庫表的異同) (2)數(shù)據(jù)庫的建立與操作 (3)表的建立與基本操作 (4)排序與索引 (5)查詢,2、數(shù)據(jù)完整性 3、數(shù)據(jù)統(tǒng)計與計算 4、多表的操作,4.1 概述,4.1.1 VFP中表、數(shù)據(jù)庫、項目之間的關(guān)系,在VFP中數(shù)據(jù)庫不僅存儲表,而且也存儲表與表之間的關(guān)聯(lián)、基于表的視圖和查詢以及有效管理數(shù)據(jù)庫的存儲過程。數(shù)據(jù)庫對應(yīng)磁盤上一個擴(kuò)展名為.DBC的文件,并且在建立數(shù)據(jù)庫的同時,系統(tǒng)自動生成一個與數(shù)據(jù)庫同名的.DCT數(shù)據(jù)庫備注文件和.DCX的數(shù)據(jù)庫索引文件。作
2、為一個數(shù)據(jù)庫既可以獨(dú)立管理,也可以和與其相關(guān)的表單文件、報表文件、程序文件等組織成為一個項目,由這個項目來統(tǒng)一管理。VFP中的表、數(shù)據(jù)庫、項目之間的關(guān)系如下圖所示。,1、項目、數(shù)據(jù)庫、數(shù)據(jù)庫表之間的關(guān)系,什么是項目? 項目管理器的功能作用?,2、數(shù)據(jù)庫表、自由表之間的關(guān)系,自由表,思考題 對于一個自由表,能否添加到多個數(shù)據(jù)庫中?,3、數(shù)據(jù)庫的概念,數(shù)據(jù)庫是表的集合。 數(shù)據(jù)庫文件具有.dbc擴(kuò)展名,其中可以包含一個或多個表、關(guān)系、視圖和存儲過程等。 注意:.dct,.dcx文件的特點(diǎn),一個Visual FoxPro表或.dbf文件,能夠存在以下兩種狀態(tài)之一: 與數(shù)據(jù)庫相關(guān)聯(lián)的數(shù)據(jù)庫表; 與數(shù)據(jù)庫
3、不關(guān)聯(lián)的自由表。 二者的絕大多數(shù)操作相同且可以相互轉(zhuǎn)換。相比之下,數(shù)據(jù)庫表的優(yōu)點(diǎn)要多一些,具有以下優(yōu)點(diǎn):,、數(shù)據(jù)庫表與自由表的異同與特點(diǎn),表中的長字段名 表中字段的標(biāo)題和注釋 默認(rèn)值、輸入掩碼和表中字段格式化 建立字段級規(guī)則和記錄級規(guī)則 支持參照完整性的主關(guān)鍵字索引和表間關(guān)系 設(shè)置INSERT、UPDATE或DELETE事件的觸發(fā)器,1)命令格式 VFP命令通常由2部分組成。第1部分是命令動詞,指明了該命令的功能。第2部分是跟隨在命令動詞后面的短語,這些短語通常用來對所要執(zhí)行的命令進(jìn)行某些限制性的說明。 一般情況下,命令動詞表示了命令的功能,命令短語提供執(zhí)行命令所需要的各種參數(shù)。命令短語本身可
4、分為兩類,一類是必選短語,另一類是可選短語。 通常,命令動詞后面一般都有幾個可選短語,用戶根據(jù)需要選擇不同的短語,使得同一個命令可實(shí)現(xiàn)多種任務(wù),從而可以大大地豐富命令的功能。 VFP命令格式為: ,4.1.2 VFP命令格式及使用規(guī)則,【例4.1】 USE 和DISPLAY的命令格式。 USE DISPLAY FIELDS FOR|WHILE TO PRINTER PROMPT|TO FILE 第1條命令是打開數(shù)據(jù)表,命令動詞是USE,命令短語可缺省;第2條命令是顯示當(dāng)前表中記錄,命令動詞是DISPLAY,其余部分為命令短語。,2)命令短語 命令動詞規(guī)定要執(zhí)行的操作,而命令短語指出操作的范圍、
5、條件、字段、結(jié)果輸出位置等內(nèi)容。命令短語又稱為子句。常用子句的含義如下表所示。,說明: FOR 的作用是:在規(guī)定的范圍中,按條件檢查全部記錄,即從第一條記錄開始,滿足條件的記錄就執(zhí)行該命令,不滿足就跳過該記錄,繼續(xù)搜索下一條記錄,直到最后一條記錄。若省略則默認(rèn)為ALL。 WHILE 的作用是:在規(guī)定的范圍中,只要條件成立,就對當(dāng)前記錄執(zhí)行該命令,并把記錄指針指向下一條記錄,一旦遇到使條件不滿足的記錄,就停止搜索并結(jié)束該命令的執(zhí)行。即遇到第一個不滿足條件的記錄時,就停止執(zhí)行該命令,即使后面還有滿足條件的記錄也不執(zhí)行。若省略范圍則默認(rèn)為REST。,3)命令及子句的使用規(guī)則 VFP的命令有的比較短,
6、而有的則相當(dāng)長,書寫時應(yīng)遵循如下規(guī)則: 任何命令必須以命令動詞開頭,命令中的各個子句可以按任意次序排列,各個子句以一個或多個空格隔開。 一條命令的最大長度為254個字符,一行寫不下時,可以使用“;”續(xù)行。 命令動詞和子句的動詞可以用其前4個字母縮寫表示,例如,DISPLAY可寫成DISP。但從程序的可讀性來考慮,不提倡略寫命令動詞。 命令中的字符大小寫可以混合使用,系統(tǒng)不區(qū)分大小寫,為了美觀可以將命令關(guān)鍵字大寫,而其他內(nèi)容小寫。,4.2 數(shù)據(jù)表的創(chuàng)建及其基本操作,在VFP中,存儲數(shù)據(jù)的表和經(jīng)常使用的表格基本相似,表中的列代表記錄中的字段(Field),字段包含字段名和字段值。所有字段名的集合構(gòu)
7、成了表的第1行(表頭),即數(shù)據(jù)表的結(jié)構(gòu)(Structure);所有字段值的集合分別構(gòu)成了表的每一行,即表的記錄(Record)。 要創(chuàng)建一個存儲數(shù)據(jù)的新表,首先必須對有關(guān)用戶的需求進(jìn)行分析,也就是應(yīng)清楚表中存儲的數(shù)據(jù)的用途,以便明確如何使用表中的數(shù)據(jù)、該收集什么樣的數(shù)據(jù)以及如何收集這些數(shù)據(jù)等。然后根據(jù)存儲這些數(shù)據(jù)的要求來設(shè)計表的結(jié)構(gòu)。,4.2.1 表結(jié)構(gòu)及字段的基本要素,1)表的結(jié)構(gòu),2)表中存儲數(shù)據(jù)的數(shù)據(jù)類型 為了正確存儲數(shù)據(jù)、處理數(shù)據(jù)和有效利用存儲空間,創(chuàng)建表時必須定義字段的數(shù)據(jù)類型。 對于要存儲的數(shù)據(jù),有2點(diǎn)必須清楚,一是它們的數(shù)據(jù)類型(如字符數(shù)據(jù),數(shù)值數(shù)據(jù)、日期數(shù)據(jù)等);二是數(shù)據(jù)的范圍
8、(大小),以及存儲這些數(shù)據(jù)的有效數(shù)據(jù)空間的最小值和最大值,這是表結(jié)構(gòu)設(shè)計的關(guān)鍵。 字段的數(shù)據(jù)類型決定了:該字段可以存放哪種類型的值。例如,不能在數(shù)值型字段存放文本數(shù)據(jù)。該字段存放數(shù)據(jù)占用的存儲空間大小。例如,貨幣型數(shù)據(jù)的值都用8個字節(jié)存儲。該字段可進(jìn)行哪些操作。例如,對于備注型和通用型數(shù)據(jù)不能進(jìn)行排序和建立索引。 字段的數(shù)據(jù)類型有13種,見書上表4.3,3)字段的基本要素 (1)字段名 字段名是表中列的名稱,是數(shù)據(jù)庫的變量,即字段變量。對表和數(shù)據(jù)庫操作時,可根據(jù)字段名引用表中數(shù)據(jù)。字段的命名應(yīng)滿足以下要求: 字段名由字母、漢字、數(shù)字及下劃線組成,但必須以字母或漢字開頭,中間不能有空格。 數(shù)據(jù)庫
9、表的字段名最長為128個字符(自由表字段名長度不得超過10個字符)。,(2)字段類型和寬度 字段類型決定存儲在字段中的值的數(shù)據(jù)類型,字段寬度決定存儲數(shù)據(jù)的寬度和取值范圍。VFP中可使用的字段類型如表4.3中所示,常用的有字符型、數(shù)值型、日期型、邏輯型、備注型、通用型等幾種。 (3)空值(NULL) 選擇是否允許字段為空。字段空值與空字符串、數(shù)值0具有不同的含義,是指尚未輸入具體數(shù)值的數(shù)據(jù)。如果字段不允許為空,則輸入數(shù)據(jù)時必須輸入相應(yīng)的數(shù)據(jù),否則被設(shè)置為默認(rèn)值(例如,數(shù)值型被默認(rèn)為0)。允許字段為空時,可暫時不輸入數(shù)據(jù),而且不會出錯。,(4)顯示控制(數(shù)據(jù)庫表所具有的屬性) 用來定義字段的顯示格
10、式、輸入掩碼和字段標(biāo)題。格式為字段在表單、瀏覽窗口等界面中的顯示格式;輸入掩碼用來限制或控制用戶輸入的格式,以避免一些錯誤格式的輸入;而標(biāo)題可以設(shè)定字段名顯示時的文字內(nèi)容,默認(rèn)為字段名。 (5)字段有效性檢驗(yàn)(數(shù)據(jù)庫表所具有的屬性) 用來定義字段的有效性規(guī)則、違反規(guī)則的提示信息和字段的默認(rèn)值。有效性檢驗(yàn)可以防止用戶輸入錯誤數(shù)據(jù)。 (6)字段注釋(數(shù)據(jù)庫表所具有的屬性) 為字段添加注釋便于數(shù)據(jù)庫維護(hù)。注釋只起提示作用,不會對具體操作帶來任何影響。,4.2.2 表的創(chuàng)建,在VFP中數(shù)據(jù)表的建立有2種方法:一種方法是使用表設(shè)計器;另一種方法是使用表向?qū)?。無論是使用表設(shè)計器,還是用表向?qū)?,都必須按照?/p>
11、下步驟進(jìn)行: 創(chuàng)建表結(jié)構(gòu)。 輸入記錄。 1)創(chuàng)建表結(jié)構(gòu) 表結(jié)構(gòu)的設(shè)計可以通過VFP提供的【表設(shè)計向?qū)А亢汀颈碓O(shè)計器】來實(shí)現(xiàn),也可以用SQL命令來建立。這里主要介紹用【表設(shè)計器】來創(chuàng)建表結(jié)構(gòu)的步驟。,(1)啟動表設(shè)計器 可以用下述方法啟動表設(shè)計器: 用菜單方式啟動表設(shè)計器 VFP啟動后,選擇【文件】菜單中的【新建】命令,則彈出【新建】對話框。 在該對話框中選擇【表】,再單擊【新建文件】按鈕,彈出【創(chuàng)建】對話框。在【輸入表名】文本框中輸入新建數(shù)據(jù)表的表名(例如輸入dab),選擇保存類型為“表/DBF(.dbf)”,單擊【保存】按鈕,即啟動表設(shè)計器對話框。表設(shè)計器對話框如下圖所示。 ,表設(shè)計器對話框
12、:,用Create命令啟動表設(shè)計器 格式:Create 功能:啟動表設(shè)計器并創(chuàng)建表。 說明:為指定要創(chuàng)建的表名,包括路徑信息。例如,在命令窗口中輸入“Create c:dab.dbf”,按回車鍵就可啟動表設(shè)計器。創(chuàng)建的表(dab.dbf)將保存在C盤根目錄下。,(2)創(chuàng)建表結(jié)構(gòu) 啟動表設(shè)計器后,通過表設(shè)計器能方便地設(shè)計出符合自己需要的表結(jié)構(gòu)。 2)輸入記錄 數(shù)據(jù)表結(jié)構(gòu)建立好后,就可以向數(shù)據(jù)表中輸入記錄了。VFP提供了兩種記錄輸入方式: 立即輸入方式。 追加輸入方式。,立即輸入方式:是指用表設(shè)計器建立好表結(jié)構(gòu)后,當(dāng)出現(xiàn)如圖4.4所示的對話框時選擇【是】按鈕,,即進(jìn)入如圖4.5所示的畫面,光標(biāo)停留
13、在第一個字段上,表示可以開始輸入數(shù)據(jù)。, 追加輸入方式:是向已存在的表的末尾追加記錄。要向打開的數(shù)據(jù)表中追加新記錄,可以用菜單操作方式或命令操作方式。 用菜單命令追加記錄 追加單個記錄:選擇【表】菜單下的【追加新記錄】命令,則只能在表的末尾添加一個空記錄,該記錄成為當(dāng)前記錄,用戶即可輸入記錄數(shù)據(jù)。 追加多個記錄:選擇【顯示】菜單下的【追加方式】命令,則在表的末尾添加一個空記錄,用戶即可輸入記錄數(shù)據(jù);當(dāng)向該記錄輸完數(shù)據(jù)時,其后又出現(xiàn)一空記錄,即可進(jìn)行多條記錄的追加。,用APPEND命令來追加記錄 格式:APPEND BLANK 功能:在當(dāng)前表的末尾追加新記錄。 說明: 如果無BLANK選項,則進(jìn)
14、入全屏幕編輯窗口,在該窗口可以輸入多條記錄。 若有BLANK選項,則直接在數(shù)據(jù)表末尾增加一條空記錄,而不進(jìn)入全屏幕編輯窗口。,特別指出的是:備注型和通用型字段的內(nèi)容不能直接輸入到表中。備注型字段數(shù)據(jù)的輸入方法是在該記錄的備注字段(memo)處雙擊鼠標(biāo),或當(dāng)光標(biāo)移到備注字段后按Ctrl+PgDnCtrl+PgUp/Ctrl+Home組合鍵,系統(tǒng)打開一文本編輯窗口,在該窗口即可輸入相應(yīng)的備注字段的內(nèi)容。輸入結(jié)束可單擊窗口關(guān)閉按鈕,或使用Ctrl+W組合鍵保存內(nèi)容,系統(tǒng)返回到記錄輸入界面。這時備注字段將變?yōu)镸emo(第一個字母為大寫),表示該記錄的備注字段已有數(shù)據(jù)。如果按Esc鍵,則放棄存盤并返回到
15、記錄輸入界面。,在該記錄的備注字段(memo)處雙擊鼠標(biāo); 或當(dāng)光標(biāo)移到備注字段后按Ctrl+PgDn Ctrl+PgUp Ctrl+Home組合鍵; 系統(tǒng)打開一文本編輯窗口,在該窗口即可輸入相應(yīng)的備注字段的內(nèi)容。 輸入結(jié)束可單擊窗口關(guān)閉按鈕,或使用Ctrl+W組合鍵保存內(nèi)容,系統(tǒng)返回到記錄輸入界面。這時備注字段將變?yōu)镸emo(第一個字母為大寫),,備注型和通用型字段的輸入 備注型字段和通用型字段的內(nèi)容不能直接輸入到表中。 備注型字段數(shù)據(jù)的輸入方法:,通用型字段接受的數(shù)據(jù)是一個嵌入或鏈接的OLE對象。其鏈接方法是先將鏈接的對象放入剪貼板中,然后用鼠標(biāo)雙擊該通用型字段,即進(jìn)入通用型字段編輯窗口,
16、再選擇【編輯】菜單下的【選擇性粘貼】選項,即進(jìn)入“鏈接”對話框。 嵌入方法的操作同上,只是選擇【編輯】菜單下的【插入對象】選項,進(jìn)入【插入對象】對話框,選擇要插入的對象,如下圖所示。,通用型字段數(shù)據(jù)的輸入方法,再通過word插入菜單的插入圖片操作方法進(jìn)行: 要清除備注型字段或通用型字段的內(nèi)容,方法是在該記錄的備注型字段或通用型字段處雙擊鼠標(biāo),然后選擇【編輯】菜單下的【清除】命令即可。,插入word圖片 選擇【編輯】菜單下的【插入對象】選項,進(jìn)入【插入對象】對話框,如圖:,4.2.3 表的打開與關(guān)閉,在VFP中,使用表時都必須先打開它,操作完成后都要關(guān)閉。表的打開實(shí)質(zhì)上就是將存儲在外部存儲器上的
17、表文件調(diào)入內(nèi)存;表的關(guān)閉就是將表文件從內(nèi)存保存到外部存儲器上,同時釋放占用的內(nèi)存和工作區(qū)。 1)表的打開 可以通過下述方法來打開表文件: (1)用菜單打開表 選擇【文件】菜單中的【打開】命令,彈出【打開】對話框,在【文件類型】列表中選取“表(*.dbf)”項,再選擇所要打開的表文件,單擊【確定】按鈕后就打開選中的表。表文件打開后,就可以對其進(jìn)行操作,如瀏覽表中的記錄、向表中追加新記錄、修改表結(jié)構(gòu)等操作。,(2)用USE命令打開表 格式:USE IN 工作區(qū)號 Alias 功能:打開一個表文件。 說明: USE命令的用法相當(dāng)靈活,這里給出的僅是USE命令的一種基本形式。 一個工作區(qū)同時只能打開一
18、個表,所以使用USE命令在一個工作區(qū)打開一個表時,該工作區(qū)中先前打開的表自動關(guān)閉。工作區(qū)與別名的概念參看4.7節(jié)。,如果表中含有備注型字段,則打開表時,相應(yīng)的備注文件(FPT)同時打開。 剛建立的表自動處于打開狀態(tài),不需再用USE命令打開。 例如,假設(shè)在當(dāng)前目錄下有文件名為“dab.dbf”的數(shù)據(jù)表,在命令窗口中輸入如下命令就能將該表打開。 USE dab.dbf &打開表文件時,擴(kuò)展名可以缺省,2)表的關(guān)閉 對數(shù)據(jù)表的操作完成后,應(yīng)將表關(guān)閉,關(guān)閉表有多種命令。 (1)關(guān)閉當(dāng)前工作區(qū)打開的表 格式:USE 功能:關(guān)閉當(dāng)前工作區(qū)打開的表。 (2)關(guān)閉當(dāng)前打開的所有表 格式1:CLOSE ALL
19、功能:關(guān)閉所有打開的數(shù)據(jù)庫;關(guān)閉所有工作區(qū)中的表和索引,并選擇1號工作區(qū)為當(dāng)前工作區(qū)。 格式2:CLEAR ALL 功能:關(guān)閉所有工作區(qū)中打開的表,選擇1號工作區(qū)為當(dāng)前工作區(qū),同時釋放所有內(nèi)存變量。,當(dāng)數(shù)據(jù)表建立好后,必要時需要顯示(查看)數(shù)據(jù)表中的內(nèi)容,顯示數(shù)據(jù)表中的記錄可通過下列操作完成。 1)菜單操作 (1)瀏覽顯示 選擇【文件】菜單中的【打開】命令,打開要瀏覽顯示的數(shù)據(jù)表。 選擇【顯示】菜單中的【瀏覽】命令。 數(shù)據(jù)表中的記錄顯示在瀏覽窗口上,如下圖所示。,4.2.4 表中記錄的顯示,(2)編輯顯示 第一步與瀏覽顯示操作相同;第二步是從【顯示】菜單中選擇【編輯】菜單命令。此時,屏幕上就以
20、編輯方式顯示數(shù)據(jù)表的內(nèi)容。編輯顯示窗口如下圖所示。,瀏覽和編輯顯示數(shù)據(jù)表中的記錄時,屬于全屏幕編輯操作,用戶可以任意移動光標(biāo)到需要的記錄、字段上,并可直接對記錄數(shù)據(jù)進(jìn)行修改,也可向表中追加新記錄。,格式: LIST|DISPLAY FIELDS FOR|WHILE OFF TO PRINTER PROMPT TO FILE ,2、命令操作 DISPLAY命令和LIST命令用于將當(dāng)前表中的記錄顯示到VF的主窗口。,LIST FIELDS FOR DISPLAY FIELDS FOR ,【例4.2】在VFP主窗口中顯示學(xué)生檔案表(dab.dbf)中的全部記錄。在命令窗口中輸入下列命令序列: USE
21、 dab &打開dab.dbf表 LIST USE &關(guān)閉dab.dbf表 在主窗口中顯示結(jié)果如下圖所示。,【例4.3】顯示學(xué)生檔案表(dab.dbf)中機(jī)械制造4班的所有女學(xué)生的記錄,且只顯示學(xué)號、姓名、性別、出生日期和專業(yè)班級字段,不顯示記錄號。 在命令窗口中輸入如下命令序列: USE dab DISP ALL FOR 專業(yè)班級=機(jī)械制造4班 AND 性別=女 FIELDS 學(xué)號,姓名,性別,出生日期,專業(yè)班級OFF USE 在主窗口中顯示結(jié)果如下圖所示。,通過對xsmd中的記錄按照要求顯示,掌握范圍子句,條件子句,字段子句的使用,命令使用演示,問題1:顯示表中所有王姓同學(xué)的基本信息? 問
22、題2:顯示表中所有王姓女同學(xué)的基本信息? 問題3:顯示表中會計專業(yè)所有王姓女同學(xué)的基本信息?,條件表示方法1 disp all for like(王,left(姓名,2) disp all for like(王,left(姓名,2) and 性別=女 disp all for like(王,left(姓名,2) and 性別=女 and 專業(yè)=會計學(xué),條件表示方法2 disp all for left(姓名,2)=王“and 性別=女 disp all for left(姓名,2)=王and 性別=女 disp all for left(姓名,2)=王and 性別=女a(chǎn)nd 專業(yè)=會計學(xué),顯示
23、單名的所有同學(xué) disp all for len(substr(姓名,1)=4-能顯示嗎?如果不能,什么原因 disp all for len(substr(alltrim(姓名),1)=4 disp all for len(substr(alltrim(姓名),1)=4 and left(姓名,2)=王,1、記錄指針的概念,4.2.5 記錄指針的定位,1)當(dāng)前記錄: 記錄指針指向的記錄稱為當(dāng)前記錄。剛打開的數(shù)據(jù)表,記錄指針總是指向第一條記錄(首記錄) 2)記錄指針的改變: 對數(shù)據(jù)表的操作將改變記錄指針的位置,每一個數(shù)據(jù)表都有開始和結(jié)尾標(biāo)志,可以用BOF()函數(shù)和EOF()函數(shù)來測試,根據(jù)函數(shù)
24、的返回值“.T.”或“.F.”判斷記錄指針的位置。,一個數(shù)據(jù)表文件中可能包含成千上萬條記錄,要對哪一條記錄操作,就存在記錄定位的問題。在VF中,對任何打開的數(shù)據(jù)表文件,都提供了一個記錄指針,用于完成記錄的定位。,2)記錄指針的定位(移動) 在建立數(shù)據(jù)表時,每條記錄都有一個編號,稱為記錄號,記錄號依據(jù)輸入記錄的順序從1開始編號。對記錄指針的定位,實(shí)際上就是將記錄指針移到相應(yīng)的記錄號上。移動記錄指針的方法有菜單操作方式和命令操作方式2種。 (1)菜單操作方式 在瀏覽窗口或編輯窗口顯示數(shù)據(jù)記錄時,選擇【表】菜單中的【轉(zhuǎn)到記錄】命令,出現(xiàn)移動記錄指針的下級菜單命令選項,如下圖所示,根據(jù)這些選項可迅速移
25、動記錄指針到需要的記錄位置。 命令選項的具體含義如下: 第一個:將記錄指針移到第1條記錄。 最后一個:將記錄指針移到最后一條記錄。 下一個:將記錄指針移到當(dāng)前記錄的下一條記錄。 上一個:將記錄指針移到當(dāng)前記錄的上一條記錄。 記錄號:將記錄指針移到指定記錄號的記錄上。 定位:將記錄指針移到符合條件的記錄上。當(dāng)選擇此菜單命令時將出現(xiàn)如圖4.11所示的對話框。,(2)命令操作方式 記錄指針的絕對移動 絕對移動是將記錄指針直接定位到指定的記錄上。 格式:GOTO |TOP|BOTTOM 功能:將記錄指針定位到指定的記錄上。 說明: 的值指明記錄號,即直接按給定的記錄號定位。 選擇TOP或BOTTOM則
26、分別將記錄指針定位到表文件的首、尾記錄上。,【例4.4】 用GO命令移動學(xué)生檔案表(dab.dbf)中的記錄指針。在【命令】窗口輸入如下命令序列: USE dab GO 5 &記錄指針指向記錄號為5的記錄 GO TOP &記錄指針指向首記錄 GO BOTTOM &記錄指針指向尾記錄 USE,記錄指針的相對移動 格式:SKIP 功能:以當(dāng)前記錄為基準(zhǔn)向上或向下移動記錄指針。 說明:的值指明記錄指針移動的相對記錄數(shù);若為負(fù)數(shù)時,則表示記錄指針向上移動,否則向下移動。缺省,則記錄指針向下移動1條記錄。,【例4.5】用SKIP命令移動學(xué)生檔案表(dab.dbf)中的記錄指針。 在命令窗口輸入如下命令序
27、列: USE dab GO 5 SKIP 3 &指針從當(dāng)前記錄開始向下移動3條記錄 SKIP &指針從當(dāng)前記錄開始向下移動1條記錄 SKIP -2 &指針從當(dāng)前記錄向上移動2條記錄 USE,按條件定位記錄位置 Locate For 與命令聯(lián)合使用 Continue,use xsmd locate for 姓名=王芳 disp conti disp,43 表的編輯與維護(hù),1)表結(jié)構(gòu)的修改 在創(chuàng)建數(shù)據(jù)表結(jié)構(gòu)時,難免會考慮不周或出錯,在使用過程中如果發(fā)現(xiàn)某些字段設(shè)計不符合要求等問題,就要對表結(jié)構(gòu)進(jìn)行必要的修改。在VFP中,利用表設(shè)計器來修改表結(jié)構(gòu)。具體操作如下: 打開需要修改結(jié)構(gòu)的表文件。 選擇【顯
28、示】菜單中的【表設(shè)計器】命令,彈出【表設(shè)計器】對話框。 在【表設(shè)計器】對話框中修改表的各字段要素的值(如字段名、數(shù)據(jù)類型等)。 也可以在【命令】窗口中輸入MODIFY STRUCTURE命令來啟動表設(shè)計器,然后對表結(jié)構(gòu)進(jìn)行修改。,431 數(shù)據(jù)表的修改,說明: 對表結(jié)構(gòu)可做的更改包括添加和刪除字段;修改字段名稱、大小和數(shù)據(jù)類型;添加、刪除或修改索引標(biāo)識等。 在更改表結(jié)構(gòu)之前,VFP自動備份當(dāng)前表。當(dāng)修改完之后,將備份表中包含的數(shù)據(jù)追加到新修改的表結(jié)構(gòu)中。如果表有一個備注字段,也將創(chuàng)建一個備注備份文件。 表備份文件的擴(kuò)展名為 .BAK,備注備份文件的擴(kuò)展名是 .TBK。VFP為原表文件創(chuàng)建一個 .
29、BAK文件,并且為原備注文件(如果存在)創(chuàng)建一個 .TBK備份文件。如果使用 MODIFY STRUCTURE命令時出現(xiàn)問題,可以刪除新文件,并把 .BAK文件和 .TBK文件改回原文件擴(kuò)展名(.DBF和 .FPT)。,2)記錄數(shù)據(jù)的修改 (1)使用菜單命令修改記錄 首先打開數(shù)據(jù)表文件,再選擇【顯示】菜單中的【瀏覽】或【編輯】命令,這時當(dāng)前數(shù)據(jù)表的記錄顯示在瀏覽窗口或編輯窗口中,再將光標(biāo)移到需要修改的記錄字段上進(jìn)行修改即可,修改完成后使用Ctrl+W存盤。 (2)用BROWSE命令修改記錄 該命令有許多控制記錄顯示的子句,這里僅介紹它的常用命令格式。 格式:BROWSE FIELDS FOR
30、功能:在瀏覽窗口顯示記錄,同時也可以修改記錄。,【例4.6】用BROWSE命令對學(xué)生檔案表(dab.dbf)中的記錄進(jìn)行修改。要求按指定的姓名、性別、專業(yè)班級、學(xué)號字段順序顯示。 USE dab BROWSE FIELDS 姓名,性別,專業(yè)班級,學(xué)號 顯示結(jié)果如下圖所示。,【說明】: 1)該命令適合對當(dāng)前庫進(jìn)行成批地、有規(guī)律地修改。 2)缺省范圍、條件時,僅替換當(dāng)前記錄 3)ADDITIVE,只對備注型字段修改有效。 選擇ADDITIVE :表示添加內(nèi)容 不選擇ADDITIVE :表示替換內(nèi) 4)表達(dá)式的值不能超出字段寬度,否則,數(shù)據(jù)無效。,(3)替換修改 1)命令方式 【格式】 REPLAC
31、E WITH ADDITIVE, WITH ADDITIVE . FOR ,【功能】用指定表達(dá)式的值替換當(dāng)前表中滿足條件記錄的指定字段的值。,應(yīng)用事例,int(date()-出生日期)/365),ADDITIVE把對備注字段的替代內(nèi)容追加到備注字段的后面。ADDITIVE只對替換備注字段有用。如果省略 ADDITIVE,則用表達(dá)式的值改寫備注字段原有內(nèi)容。,【例4.7】用REPLACE命令對學(xué)生檔案表(dab.dbf)進(jìn)行如下操作:將機(jī)械制造4班所有同學(xué)的“專業(yè)班級”字段的數(shù)據(jù)清空。 USE dab REPLACE ALL 專業(yè)班級 WITH FOR 專業(yè)班級=機(jī)械制造4班 LIST,前面介紹
32、的APPEND命令是將記錄追加到數(shù)據(jù)表末尾,如果想在2條記錄之間插入記錄,只能在命令窗口中用插入記錄命令來實(shí)現(xiàn)。 格式:INSERT BLANK BEFORE 功能:在當(dāng)前記錄之后或之前插入一條記錄。,4.3.2 插入記錄,說明: BLANK:表示插入一條空白記錄,無此選項時,進(jìn)入全屏幕編輯狀態(tài)。 BEFORE:表示在當(dāng)前記錄之前插入,否則在當(dāng)前記錄之后插入。,【例4.8】 在學(xué)生檔案表(dab.dbf)中,要求在3號與4號記錄之間插入1條空白記錄。在命令窗口中輸入如下命令: USE dab GO 4 INSERT BLANK BEFORE 表示在3號記錄之后插入了一條空白記錄,其記錄號為4,
33、原表中之后記錄的記錄號均依次增加1。,在VFP中,刪除記錄是經(jīng)過2步完成的。第1步是給要刪除的記錄加上刪除標(biāo)記,稱為邏輯刪除,做了邏輯刪除標(biāo)記的記錄并沒有真正從數(shù)據(jù)表中刪除,以后還可以恢復(fù);要真正刪除表中的記錄,則執(zhí)行第2步,刪除帶有刪除標(biāo)記的記錄,稱為物理刪除。 1)記錄的邏輯刪除 (1)使用菜單命令對記錄作邏輯刪除標(biāo)記 首先打開要操作的數(shù)據(jù)表,用瀏覽方式或編輯方式顯示該數(shù)據(jù)表中的記錄,例如用瀏覽顯示學(xué)生檔案表(dab.dbf)中的記錄;,4.3.3 記錄的刪除與恢復(fù),再用鼠標(biāo)單擊記錄左邊的邏輯刪除標(biāo)記塊,標(biāo)記塊顏色變成黑色,代表此記錄已作了邏輯刪除標(biāo)記,如下圖中學(xué)號為20050015和20
34、050020的記錄已作了邏輯刪除。,另外,也可以選擇【表】菜單中的【切換刪除標(biāo)記】命令來設(shè)置刪除標(biāo)記。,【例4.9】對學(xué)生檔案表(dab.dbf)中專業(yè)班級是“英語3班”的所有學(xué)生記錄作邏輯刪除。操作過程如下: 打開學(xué)生檔案表。 用瀏覽或編輯方式顯示該數(shù)據(jù)表。 選擇【表】菜單中的【刪除記錄】命令,彈出【刪除】記錄對話框,如下圖所示。,將【作用范圍】選項設(shè)定為“All”。 單擊【For】選項右邊的 按鈕,顯示【表達(dá)式生成器】對話框,如下圖所示。,利用圖4.15所示的對話框來建立條件表達(dá)式。先雙擊【字段】列表框中“專業(yè)班級”字段,選取該字段;再在【邏輯】下拉列表框中選擇“=”;然后輸入“英語3班”
35、,則在【表達(dá)式】列表框中顯示建立的條件表達(dá)式,再單擊【確定】按鈕,將在【刪除記錄】對話框的【For】文本框中顯示同樣的條件表達(dá)式。 確認(rèn)無誤后,單擊【刪除】按鈕,即將所有英語3班的學(xué)生記錄作了邏輯刪除。如下圖所示,共有4條記錄作了邏輯刪除標(biāo)記。,(2)用命令對記錄作邏輯刪除 格式:DELETE 范圍 FOR|WHILE 功能:對當(dāng)前數(shù)據(jù)表中在指定范圍內(nèi)滿足條件的記錄作邏輯刪除。若缺省范圍和FOR|WHILE 選項,則只對當(dāng)前記錄作邏輯刪除。,【例4.10】 對學(xué)生檔案表(dab.dbf)中的記錄做如下操作: 對姓名為“那措央中”的記錄作邏輯刪除。命令序列為: USE dab DELE FOR
36、姓名=那措央中 LIST &查看刪除效果 USE &關(guān)閉表,對學(xué)生檔案表(dab.dbf)中專業(yè)班級是“計算機(jī)1班”和“機(jī)械制造4班”的所有記錄作邏輯刪除。命令序列為: USE dab DELE FOR 專業(yè)班級=計算機(jī)1班 OR 專業(yè)班級=機(jī)械制造4班 ALL LIST & 查看刪除效果 USE,從圖上顯示的結(jié)果可以看出,作了邏輯刪除的記錄號后面有一個“*”,即邏輯刪除標(biāo)記。,(3)顯示、隱藏邏輯刪除記錄 【格式】SET DELETED ON | OFF 【功能】將表文件中已邏輯刪除的記錄隱藏或顯示。 說明3點(diǎn),1)、邏輯刪除是在該記錄上加一個刪除標(biāo)記,當(dāng)SET DELETED設(shè)置為OFF時
37、,對該表文件的各種操作,對被刪除的記錄同樣有效。 2)、當(dāng)SET DELETED ON時,對表文件中數(shù)據(jù)的各種操作,一般均不包括有刪除標(biāo)記的記錄 3)、SET DELETED的缺省狀態(tài)是OFF。,set dele off count to x ? x,set dele on count to y ? y,2)恢復(fù)邏輯刪除記錄 恢復(fù)邏輯刪除是將被邏輯刪除的記錄恢復(fù)為正常記錄。即去掉“*”號。,(1)命令方式 RECALL FOR ,功能: 將當(dāng)前表文件中指定范圍內(nèi)滿足條件的已作刪除標(biāo)記“*”的記錄恢復(fù),即去掉這些刪除記錄的刪除標(biāo)記,使之成為正常記錄。,說明: ,F(xiàn)OR、WHILE等各項選項意義同
38、前;如果同時缺省和 子句,則僅僅恢復(fù)當(dāng)前記錄 事例演示操作,【例4.11】 恢復(fù)學(xué)生檔案表(dab.dbf)中機(jī)械制造4班所有作了邏輯刪除的記錄。命令序列為: USE dab RECALL ALL FOR 專業(yè)班級=機(jī)械制造4班 LIST USE,3)記錄的物理刪除 邏輯刪除記錄只是為記錄加上一刪除標(biāo)記,并未真正從數(shù)據(jù)表中刪除該記錄。要將這些記錄真正從數(shù)據(jù)表中刪除稱為物理刪除。 (1)使用菜單命令刪除作了邏輯刪除標(biāo)記的記錄 其具體操作步驟如下: 打開要刪除記錄的表。 用瀏覽或編輯方式顯示該數(shù)據(jù)表。 選擇【表】菜單中的【徹底刪除】命令。,3)物理刪除記錄 物理刪除是將當(dāng)前表文件中被邏輯刪除的記錄
39、全部清除。 (1)命令方式 PACK MEMODBF 【功能】將當(dāng)前表文件中所有帶刪除標(biāo)記(*)的記錄全部真正地刪除掉。 PACK命令將刪除數(shù)據(jù)庫文件中作了刪除標(biāo)記的記錄,同時壓縮相應(yīng)的備注文件。,說明: MEMO子句:從備注文件中刪除未使用空間,但不從表中刪除標(biāo)有刪除標(biāo)記的記錄。備注字段的信息保存在一個相關(guān)的備注文件內(nèi)。備注文件的文件名與表相同,擴(kuò)展名 .FPT。 DBF子句:從表中刪除帶刪除標(biāo)記的記錄,但不影響備注文件。 當(dāng)使用 PACK命令時,VFP把所有沒作刪除標(biāo)記的記錄復(fù)制到一個臨時表(Temporary Table)中。執(zhí)行完 PACK命令后,VFP把原表從磁盤上刪除,同時用原表名
40、命名臨時表。,【例4.12】 對學(xué)生檔案表(dab.dbf)進(jìn)行如下操作,邏輯刪除專業(yè)班級是“英語3班”的所有記錄,再從表中物理刪除這些記錄,并查看結(jié)果。命令序列如下: USE dab DELETE ALL FOR 專業(yè)班級=“英語3班” &邏輯刪除 PACK &物理刪除表中作了邏輯刪除的記錄 BROWSE &查看結(jié)果 USE,4)清空數(shù)據(jù)表命令 格式:ZAP 功能:從表中刪除所有記錄,只保留表的結(jié)構(gòu)。,說明: ZAP命令等價于 DELETE ALL和 PACK聯(lián)用,但 ZAP速度更快。 如果SET SAFETY為 ON,VFP會提示是否要從當(dāng)前表中刪除記錄。 發(fā)出ZAP命令,不會引發(fā)刪除觸發(fā)
41、器。有關(guān)為表創(chuàng)建觸發(fā)器的詳細(xì)內(nèi)容,將在后面介紹。,【例4.13】刪除dab.dbf數(shù)據(jù)表文件中的全部記錄。 USE dab ZAP 這時,數(shù)據(jù)表dab.dbf中全部記錄被徹底刪除,記錄數(shù)為0,但該數(shù)據(jù)表的結(jié)構(gòu)仍存在。,4.3.4 表的復(fù)制,1)表結(jié)構(gòu)的復(fù)制 格式:COPY STRUCTURE TO FIELDS 功能:將當(dāng)前數(shù)據(jù)表的結(jié)構(gòu)復(fù)制到指定的數(shù)據(jù)表文件中,新表的字段數(shù)和字段順序由“FIELDS ”子句決定。,【例4.14】 把學(xué)生檔案表(dab.dbf)中的學(xué)號、姓名、性別、專業(yè)班級字段復(fù)制成一個新表XSXX.DBF,新表中只包含結(jié)構(gòu)定義,而不包含記錄數(shù)據(jù)。命令序列為:,USE dab
42、COPY STRU TO XSXX FIEL 學(xué)號,姓名,性別,專業(yè)班級 USE XSXX &打開XSXX表 LIST STRU &顯示XSXX表的結(jié)構(gòu),2)表記錄的復(fù)制 格式: COPY TO FIELDS FOR 功能:將當(dāng)前表中在指定范圍內(nèi)滿足條件的記錄,按指定的字段復(fù)制生成一新表文件。,【例4.15】將dab表中專業(yè)班級為“計算機(jī)1班”的所有學(xué)生的記錄按學(xué)號、姓名、性別、專業(yè)班級字段順序復(fù)制到一新數(shù)據(jù)表文件xsda.DBF中。,USE dab COPY TO xsda FOR 專業(yè)班級=計算機(jī)1班 FIELDS 學(xué)號,姓名,性別,專業(yè)班級 USE xsda BROW,新表xsda.db
43、f中的記錄數(shù)如下圖所示。,4.4 數(shù)據(jù)表的排序、索引與查詢,表中數(shù)據(jù)記錄的排列順序是按記錄輸入的先后順序排列的。而在實(shí)際應(yīng)用中往往需要將記錄按某些條件重新排序,以提高數(shù)據(jù)的處理速度。VFP是通過數(shù)據(jù)表的分類排序或索引排序來實(shí)現(xiàn)的。,4.4.1 數(shù)據(jù)表的分類排序(物理排序),格式: SORT TO ON /A/D/C,/A/D/C ASCENDING|DESCENDING范圍FIELDS FOR|WHILE 功能:將當(dāng)前數(shù)據(jù)表中指定范圍內(nèi)滿足條件的記錄,按字段名1、字段名2、關(guān)鍵字段的值的大小重新排列,并將排序結(jié)果放到指定的新表文件中。,排序是指根據(jù)數(shù)據(jù)表文件中某個或多個字段(稱為關(guān)鍵字段)的值
44、將表中的記錄重新排列生成一個新的數(shù)據(jù)表文件。,說明: 排序的結(jié)果放入由“”指定的表中,產(chǎn)生的新表是關(guān)閉的。,缺省“范圍”和“FOR|WHILE ”時,則對當(dāng)前表中的所有記錄排序。,排序字段可以是字符型、數(shù)字型、日期型、邏輯型等字段,不能是備注型和通用型字段。,“A”表示按字段值升序排序,為缺省方式;“D”表示按字段值降序排序;“C”對于字符型字段不區(qū)分大小寫字母。,“ASCENDINGDESCENDING”決定除用“/A”或“/D”指明了排序方式的字段外的所有字段的排序方式,前者為升序,后者為降序。,【例4.16】對數(shù)據(jù)表文件dab.dbf中的記錄按下列要求排序: 將數(shù)據(jù)表文件dab.dbf中
45、的記錄按“出生日期”升序排列。排序后的文件名為dab_sor1.dbf,命令序列如下:,USE dab SORT TO dab_sor1 ON 出生日期/A USE dab_sor1 &打開生成的新表文件 BROWSE 排序后dab_sor1.dbf表中的記錄順序如下圖所示。,將數(shù)據(jù)表文件dab.dbf中的記錄按“專業(yè)班級”升序排列,專業(yè)班級相同時按“出生日期”降序排列,排序后的文件名為dab_sor2.dbf。命令序列如下:,USE dab SORT TO dab_sor2 ON 專業(yè)班級/A,出生日期/D USE dab_sor2 &打開生成的新表文件 BROWSE 排序后dab_sor2
46、.dbf表中的記錄順序如下圖所示。,由于排序要產(chǎn)生一個新的數(shù)據(jù)表文件,且其內(nèi)容與原數(shù)據(jù)表完全相同,只是記錄的排列順序改變了,這樣將占用較大的磁盤空間。例如:在例4.16中,采用不同的排序方式后產(chǎn)生了兩個新數(shù)據(jù)表文件dab_sor1和dab_sor2,并且當(dāng)修改了原數(shù)據(jù)表(dab.dbf)的數(shù)據(jù)后,排序文件不能自動更新,這樣就造成了這3個數(shù)據(jù)表的數(shù)據(jù)不一致。因此,在實(shí)際應(yīng)用中,一般較少使用排序命令,而是使用索引來建立記錄的排序機(jī)制。,4.4.2 數(shù)據(jù)表索引的概念,1).索引的概念 所謂索引就是按照索引表達(dá)式(數(shù)據(jù)表的某個字段或字段的組合)的值使表中的記錄有序排列的一種技術(shù)。 一般情況下,標(biāo)中記錄
47、的順序是由數(shù)據(jù)輸入的前后次序決定的,并用記錄號予以標(biāo)識。除非有記錄插入或記錄刪除,否則表中的記錄順序總是不變的。 索引實(shí)際就是一種排序,但是他不改變表中數(shù)據(jù)的物理順序,而是另外建立一個數(shù)據(jù)號列表。索引文件不能單獨(dú)使用,必須同源數(shù)據(jù)表文件一起使用。 索引一旦建立后,就產(chǎn)生了一個相應(yīng)的索引文件。索引文件中只包含兩項信息:一是每條記錄索引關(guān)鍵字表達(dá)式的值,另一項是與其對應(yīng)的記錄號。既在索引文件中只保留索引關(guān)鍵字和記錄號信息,并不存在記錄的字段數(shù)據(jù),因此它不能單獨(dú)使用,必須同時打開原數(shù)據(jù)文件,才能使索引文件有效。 在VF中,同一個數(shù)據(jù)庫中的多個表以相同屬性字段建立索引后,可根據(jù)索引表達(dá)式的值建立數(shù)據(jù)庫
48、中多個表間的關(guān)聯(lián)關(guān)系。,2)索引的類型 根據(jù)索引功能的不同,可將索引分為下列4種類型: 主索引:是一種只能在數(shù)據(jù)庫表中而不能在自由表中建立的索引。在指定的字段或表達(dá)式中,主索引的關(guān)鍵字絕對不允許有重復(fù)值。主索引主要用來在永久關(guān)系中的父表與子表之間建立參照完整性設(shè)置。一個表只能創(chuàng)建一個主索引。如果在任何已經(jīng)包含了重復(fù)數(shù)據(jù)的字段中指定主索引,VFP將產(chǎn)生錯誤信息。 候選索引:和主索引類似,候選索引的值也不允許在指定的字段或表達(dá)式中重復(fù)。候選一詞是指索引的狀態(tài)。因?yàn)楹蜻x索引禁止重復(fù)值,因此它們在表中有資格被選做主索引,即主索引的候選,一個表中可以有多個候選索引。,唯一索引:允許索引關(guān)鍵字在表中的記錄
49、有重復(fù)的值。但在創(chuàng)建的索引文件里不允許包含有索引關(guān)鍵字的重復(fù)值,若表有重復(fù)的字段值,索引文件只保留該關(guān)鍵字段值前面的第1條記錄。 普通索引:除主索引、候選索引、唯一索引之外的索引便是普通索引,普通索引允許索引關(guān)鍵字段有相同值。 對于以上不同功能的索引類型,需特別說明以下兩點(diǎn): 普通索引、唯一索引、候選索引既可以在自由表中建立,也可以在數(shù)據(jù)庫表中建立。主索引則只能在數(shù)據(jù)庫表中建立。 一個自由表或數(shù)據(jù)庫表可同時建立多個普通索引、唯一索引、候選索引,但一個數(shù)據(jù)庫表只能建立一個主索引。,3)索引文件的種類 單索引文件(獨(dú)立索引文件):該類索引文件中只包含一個索引,索引文件的擴(kuò)展名為.idx。使用時必須
50、先打開。 非結(jié)構(gòu)復(fù)合索引文件:該類索引文件可以包含不同索引標(biāo)識的多個索引,也可以為一個表建立多個非結(jié)構(gòu)復(fù)合索引文件。非結(jié)構(gòu)復(fù)合索引文件的文件名由用戶指定,擴(kuò)展名為.cdx。使用時必須打開。 結(jié)構(gòu)復(fù)合索引文件:該類索引文件可以包含不同索引標(biāo)識的多個索引。一個表只有一個結(jié)構(gòu)復(fù)合索引文件,其索引文件名與表名同名,擴(kuò)展名為.cdx。結(jié)構(gòu)復(fù)合索引文件隨表的打開而打開,隨表的修改而更新。在VFP中,主要使用結(jié)構(gòu)復(fù)合索引文件。,1)建立單索引文件 格式:INDEX ON TO For ADDITIVE 功能:根據(jù)的值建立一個索引文件,其擴(kuò)展名為.idx。 說明: 只能是字符型、數(shù)字型、日期型和邏輯型數(shù)據(jù)。
51、可以是表中的一個字段或多個字段組成的表達(dá)式,當(dāng)表達(dá)式中各字段的數(shù)據(jù)類型不同時,必須轉(zhuǎn)換為相同的數(shù)據(jù)類型,且必須轉(zhuǎn)換成字符型。,4.4.3 索引的建立,FOR選項是只對滿足條件的記錄建立索引文件。 若選擇了ADDITIVE可選項,則執(zhí)行該命令前不關(guān)閉已打開的索引文件;否則,將關(guān)閉已打開的索引文件。 單索引文件只能按的值升序排列。,【例4.17】 對dab.dbf數(shù)據(jù)表按“性別”字段升序建立單索引文件,索引文件名為xbsy。命令序列如下: USE dab INDEX ON 性別 TO xbsy LIST,用LIST命令查看表中的記錄順序如下圖所示??梢钥闯鍪褂盟饕龑τ诒碇杏涗浀奈锢眄樞虿]有改變,
52、因?yàn)橄鄳?yīng)記錄的記錄號并沒有因?yàn)榻⑺饕淖儯皇禽敵鲇涗浀捻樞蚋淖兞恕?【例4.18】對dab.dbf數(shù)據(jù)表按“專業(yè)班級”升序,專業(yè)班級相同時按“出生日期”升序建立單索引文件。索引文件名為 zysy,命令序列如下:,USE dab INDEX ON 專業(yè)班級+DTOC(出生日期) TO zysy LIST 該索引順序如下圖所示,2)建立結(jié)構(gòu)復(fù)合索引文件 (1)用表設(shè)計器建立結(jié)構(gòu)復(fù)合索引文件 在表設(shè)計器中,只要設(shè)置了索引就自動創(chuàng)建了結(jié)構(gòu)復(fù)合索引文件。建立結(jié)構(gòu)復(fù)合索引文件的方法如下: 打開數(shù)據(jù)表,然后打開表設(shè)計器。選擇【字段】選項卡,在需要索引的字段右邊對應(yīng)的【索引】下拉列表中選擇升序或降序,建
53、立的索引為單個字段的普通索引。,選擇【索引】選項卡,如下圖所示,則可建立主索引、候選索引、唯一索引和普通索引4種類型的結(jié)構(gòu)復(fù)合索引文件。,說明:上述方法建立的索引為結(jié)構(gòu)復(fù)合索引,結(jié)構(gòu)復(fù)合索引文件名與表同名,而擴(kuò)展名為.cdx。,(2)命令方式建立結(jié)構(gòu)復(fù)合索引文件 格式: INDEX ON TAG FOR ASCENDING|DESCENDING,說明: 第一次建立索引時,將產(chǎn)生一個與數(shù)據(jù)表同名而其擴(kuò)展名為.cdx的結(jié)構(gòu)復(fù)合索引文件。結(jié)構(gòu)一詞是指:VFP把該文件當(dāng)作表的固有部分來處理,并在使用表時自動打開。如果結(jié)構(gòu)復(fù)合索引文件丟失了,數(shù)據(jù)表文件就不能打開。 結(jié)構(gòu)復(fù)合索引文件一旦建立,將隨著數(shù)據(jù)表
54、文件的打開而同時自動打開,但對記錄的操作順序不影響。 “索引標(biāo)識名”作為索引的標(biāo)識,存放在.cdx文件中。一個.cdx文件可以包含多個標(biāo)識名,但各標(biāo)識名應(yīng)不相同。 “ASCENDING|DESCENDING”指定記錄的排序方式,前者為升序,后者為降序。,【例4.19】 對學(xué)生檔案表(dab.dbf)按“性別”升序排列,性別相同時按“專業(yè)班級”建立結(jié)構(gòu)復(fù)合索引,其標(biāo)識名為BJ。,USE dab INDEX ON 性別+專業(yè)班級 TAG BJ LIST 顯示結(jié)果如下圖所示。,4.4.4 索引的使用,索引的作用和功能是多方面的,其中最主要的一個作用就是利用索引進(jìn)行索引查詢。要實(shí)現(xiàn)索引查詢,必須滿足一
55、定的條件。具體地講,除表和相應(yīng)的索引文件必須打開外,還必須確定相應(yīng)的主控索引文件。若主控索引文件為結(jié)構(gòu)復(fù)合索引文件,還必須進(jìn)一步指定主控索引標(biāo)識。 一個表可以同時打開多個索引,但任何時刻只能有一個索引起作用。所謂主控索引文件,是指同時打開的多個索引文件中當(dāng)前正起作用的索引文件。所謂主控索引標(biāo)識,是指結(jié)構(gòu)復(fù)合索引文件所包含的多個索引標(biāo)識中當(dāng)前正起作用的索引標(biāo)識。通常情況下,將主控索引文件或主控索引標(biāo)識簡稱為主控索引。,1)打開單索引文件或非結(jié)構(gòu)復(fù)合索引文件 單索引文件在使用時必須先打開。通常使用相應(yīng)的命令打開索引文件。 (1)打開數(shù)據(jù)表的同時打開索引文件 格式:USE INDEX 功能:在打開指
56、定表的同時打開與其相關(guān)的1個或多個索引文件。 說明:INDEX子句用于指定要打開的索引文件(最多7個)。打開多個索引文件時,索引文件之間用逗號分隔,第1個索引文件自動成為主控索引文件。,【例4.20】 假設(shè)已為學(xué)生檔案表(dab.dbf)建立了2個單索引文件xbsy.idx和zysy.idx,打開學(xué)生檔案表(dab.dbf)的同時打開這2個索引文件。命令為: USE dab INDEX xbsy,zysy & xbsy.idx為主控索引 LIST & 顯示結(jié)果如下圖所示 USE,(2)索引文件的單獨(dú)打開 如果一個表建立了多個單索引文件,要使用這些索引文件,可以用下列命令打開它們。 格式:SET
57、 INDEX TO ADDITIVE 功能:為當(dāng)前表打開指定的一個或多個索引文件。 說明: 索引文件列表用于指定要打開的一個或多個索引文件(最多7個),索引文件列表中,第一個索引文件將自動成為主控索引文件。 ADDITIVE選項確保以前打開的索引文件仍然保持打開狀態(tài)。,【例4.21】假設(shè)已為學(xué)生檔案表(dab.dbf)建立了2個索引文件xbsy.idx和zysy.idx,先打開學(xué)生檔案表(dab.dbf),再打開這2個索引文件。命令為: USE dab SET INDEX TO xbsy,zysy & xbsy.idx為主控索引 LIST & 顯示結(jié)果如下圖所示 USE,2)關(guān)閉索引文件 索引
58、文件使用完后應(yīng)關(guān)閉。由于索引文件是依賴于數(shù)據(jù)表而存在的,所以關(guān)閉數(shù)據(jù)表文件時,索引文件也將關(guān)閉。另外,專門關(guān)閉索引文件的命令有: SET INDEX TO 功能:關(guān)閉當(dāng)前工作區(qū)中打開的索引文件。 CLOSE INDEX 功能:關(guān)閉所有工作區(qū)中打開的索引文件。 說明: 索引創(chuàng)建時自動處于打開狀態(tài),并且自動成為主控索引。 結(jié)構(gòu)復(fù)合索引文件隨表的打開而自動打開。 表關(guān)閉時,與該表相關(guān)的所有打開的索引文件也自動關(guān)閉。,3)設(shè)置主控索引 當(dāng)打開了多個獨(dú)立索引文件或結(jié)構(gòu)復(fù)合索引文件中包含多個索引標(biāo)識時,需要指定當(dāng)前起作用的索引。 格式:SET ORDER TO | TAG 功能:指定相應(yīng)的索引為主控索引。
59、,【例4.22】 對學(xué)生檔案表(dab.dbf)分別以字段“專業(yè)班級”,“出生日期”,“性別”建立3個結(jié)構(gòu)復(fù)合索引標(biāo)識,并分別使用,命令序列為: CLOSE ALL & 關(guān)閉所有文件 USE dab INDEX ON 專業(yè)班級 TAG BJ INDEX ON 出生日期 TAG RQ INDEX ON 性別 TAG XB & 分別建立3個名為BJ,RQ,XB的索引標(biāo)識 SET ORDER TO BJ & 設(shè)置BJ為主控索引 LIST SET ORDER TO RQ & 設(shè)置RQ為主控索引 LIST SET ORDER TO XB & 設(shè)置XB為主控索引 LIST USE,4)刪除索引標(biāo)識 格式:DELETE TAG ALL|, 功能:刪除打開的復(fù)合索引文件的索引標(biāo)識。 說明: ALL子句用于刪除復(fù)合索引文件的所有索引標(biāo)識。若某索引文件的所有索引標(biāo)識都被刪除,則該索引文件也自動刪除。 該命令只能刪除打開的復(fù)合索引文件的索引標(biāo)識,對于單索引文件不能用該命令。,445 數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 城市更新項目廠房土地轉(zhuǎn)讓與城市基礎(chǔ)設(shè)施改造合同
- 產(chǎn)業(yè)園區(qū)場地租賃終止合同范本
- 廠房維修安全方案
- 中醫(yī)理療義診方案
- 招牌柱子施工方案
- 蘇幕遮高考試題及答案
- 2026版《全品高考》選考復(fù)習(xí)方案生物628 課時作業(yè)(二十六) DNA分子的結(jié)構(gòu)、復(fù)制及基因的本質(zhì)含答案
- 2026版《全品高考》選考復(fù)習(xí)方案生物08 7.2 物質(zhì)出入細(xì)胞的方式含答案
- 牙醫(yī)胸牌設(shè)計方案
- 中班健康:鱷魚怕怕
- GB/T 20041.21-2008電纜管理用導(dǎo)管系統(tǒng)第21部分:剛性導(dǎo)管系統(tǒng)的特殊要求
- GB/T 17213.4-2015工業(yè)過程控制閥第4部分:檢驗(yàn)和例行試驗(yàn)
- 教師師風(fēng)師德培訓(xùn) 課件
- GB/T 12718-2009礦用高強(qiáng)度圓環(huán)鏈
- GB 2811-1989安全帽
- 國家基本公共衛(wèi)生服務(wù)項目規(guī)范(第三版)培訓(xùn)-教學(xué)課件
- 資產(chǎn)評估收費(fèi)管理辦法(2023)2914
- DFMEA編制作業(yè)指導(dǎo)書新版
- “揚(yáng)子石化杯”第36屆中國化學(xué)奧林匹克(初賽)選拔賽暨2022年江蘇賽區(qū)復(fù)賽試題及答案
- GB∕T 3639-2021 冷拔或冷軋精密無縫鋼管
- DB62∕T 4134-2020 高速公路服務(wù)區(qū)設(shè)計規(guī)范
評論
0/150
提交評論