第四章數(shù)據(jù)庫的設(shè)計與操作_第1頁
第四章數(shù)據(jù)庫的設(shè)計與操作_第2頁
第四章數(shù)據(jù)庫的設(shè)計與操作_第3頁
第四章數(shù)據(jù)庫的設(shè)計與操作_第4頁
第四章數(shù)據(jù)庫的設(shè)計與操作_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

VisualFoxpro程序設(shè)計化學(xué)工業(yè)出版社第四章數(shù)據(jù)庫的設(shè)計與操作本章主要內(nèi)容:4.1 概述 4.2 數(shù)據(jù)表的創(chuàng)建4.3 數(shù)據(jù)表的操作4.4 表的排序、索引與查詢4.5 數(shù)據(jù)表的統(tǒng)計與運算4.6 多表操作4.7 數(shù)據(jù)庫及其基本操作4.1概述4.1.1基本概念VisualFoxPro的數(shù)據(jù)庫是一個邏輯概念,主要用來組織和聯(lián)系表。它是一個容器或框架,可以存放一系列數(shù)據(jù)庫對象,如表、視圖等。表是關(guān)系數(shù)據(jù)庫管理系統(tǒng)中處理數(shù)據(jù)的基本單元,擴(kuò)展名為.DBF。表是VisualFoxPro存儲數(shù)據(jù)的文件??煞譃閿?shù)據(jù)庫表和自由表兩種,數(shù)據(jù)庫表具有一系列優(yōu)點。如:可以使用長表名和長字段名;可以為字段指定標(biāo)題和添加注釋;可以為字段指定默認(rèn)值和輸入掩碼;可以規(guī)定字段級規(guī)則和記錄級規(guī)則;支持主關(guān)鍵字、參照完整性和表之間的聯(lián)系,支持SQL的insert、update和delete事件的觸發(fā)器定義。4.2數(shù)據(jù)表的創(chuàng)建4.2.1數(shù)據(jù)表的創(chuàng)建1.創(chuàng)建表結(jié)構(gòu)1)啟動表設(shè)計器(1)菜單方式單擊“文件”|“新建”,選擇“文件類型”為表,再單擊“新建文件”后,在出現(xiàn)的“創(chuàng)建”對話框里給新建的表確定保存路徑、文件名和類型,單擊“保存”按鈕,即可打開表設(shè)計器如圖4-3所示。圖4-34.2.1數(shù)據(jù)表的創(chuàng)建(2)命令方式格式:CREATE<表文件名>說明:<表文件名>包含路徑信息,如CREATED:\VFP\XSDA.DBF,表示創(chuàng)建的表將保存在D盤VFP文件夾下,如不寫路徑,則保存在默認(rèn)文件夾。在命令窗口輸入上述形式的命令,并按回車鍵執(zhí)行后,也會打開如圖4-3所示的表設(shè)計器。在表設(shè)計器中將表文件的結(jié)構(gòu)信息依次填入相應(yīng)位置,即可創(chuàng)建結(jié)構(gòu)成功。表4-2列出字段類型的含義和寬度。表4-2數(shù)據(jù)類型含義及表示寬度限制(位)存儲字節(jié)(字符)字符型ASCII碼字符及漢字實際寬度≤254數(shù)值型實數(shù)≤208貨幣型表示貨幣的特殊數(shù)值≤208浮點型實數(shù)≤208日期型表示年、月、日的數(shù)字88日期時間型表示年、月、日、時、分、秒88雙精度型實數(shù),小數(shù)點不固定≤208整型整數(shù)≤104邏輯型邏輯真(.T.)和假(.F.)11備注型不定長的字符文本不受限制4通用型標(biāo)記OLE(對象鏈接與嵌入)不受限制4字符型(二進(jìn)制)同字符型但更改代碼頁時其值不變備注型(二進(jìn)制)同備注型但更改代碼頁時其值不變2.輸入記錄數(shù)據(jù)表結(jié)構(gòu)創(chuàng)建好后,就可以向數(shù)據(jù)表中輸入記錄。VFP提供了立即輸入方式和追加輸入方式。1)立即輸入方式 當(dāng)表結(jié)構(gòu)設(shè)計完成,就輸入記錄數(shù)據(jù),即為立即輸入記錄方式。輸入完成后,可單擊窗口關(guān)閉按鈕或使用Ctrl+W/Ctrl+End組合鍵自動保存輸入數(shù)據(jù),按Esc鍵放棄存盤并退出輸入窗口。2)追加輸入方式在已經(jīng)存在的表的末尾追加記錄,需要先打開數(shù)據(jù)表,可以用菜單方式和命令方式實現(xiàn)。(1)在數(shù)據(jù)表處于瀏覽狀態(tài)下,單擊“顯示”菜單下的“追加方式”,如圖4-8所示,用戶即可輸入記錄數(shù)據(jù)。(2)在命令窗口輸入:APPEND[BLANK]說明:省略BLANK選項,則進(jìn)入全屏幕編輯窗口,在該窗口可以輸入多條記錄;若有BLANK,則直接在數(shù)據(jù)表末尾增加一條空白記錄,不進(jìn)入全屏幕編輯窗口。圖4-84.3數(shù)據(jù)表的操作4.3.1打開與關(guān)閉表1.表的打開1)菜單方式單擊“文件”|“打開”,在彈出的“打開”對話框中,“文件類型”列表中選擇“表(*.dbf)”,再選定要打開的表文件,單擊“確定”即打開了選定的表文件,就可以對其進(jìn)行相應(yīng)操作,如瀏覽、修改等。2)命令方式格式:USE<表名>[IN工作區(qū)號][Alias<別名>]說明:USE命令的用法相當(dāng)靈活,這里給出的僅是USE命令的一種基本形式,一個工作區(qū)同時只能打開一個表,所以使用USE命令在一個工作區(qū)打開一表文件,該工作區(qū)中先前打開的表自動關(guān)閉。工作區(qū)與別名的概念參看4.7如果表中含有備注型字段,則打開表時,相應(yīng)的備注文件(.FPT)同時打開。剛建立的表自動處于打開狀態(tài),不需再用USE命令打開。USExsda.dbf&&打開表文件時,擴(kuò)展名可以缺省4.3.1打開與關(guān)閉表2.表的關(guān)閉對數(shù)據(jù)表的操作完成后,應(yīng)將表關(guān)閉,關(guān)閉表有多種命令。l)關(guān)閉當(dāng)前工作區(qū)打開的表格式:USE功能:關(guān)閉當(dāng)前丁作區(qū)打開的表。2)關(guān)閉當(dāng)前打開的所有表格式1:CLOSEALL功能:關(guān)閉所有打開的數(shù)據(jù)庫;關(guān)閉所有工作區(qū)區(qū)中的表和索引,并選擇1號工作區(qū)前工作區(qū)。格式2:CLEARALL功能:關(guān)閉所有工作區(qū)中打開的表,選擇1號工作區(qū)為當(dāng)前工作區(qū),同時釋放所有內(nèi)存4.3.2修改表結(jié)構(gòu)格式:MODIFYSTRUCTURE該命令啟動當(dāng)前所打開的表的設(shè)計器,以便修改其結(jié)構(gòu)。說明:①修改表結(jié)構(gòu)包括添加和刪除字段,修改字段名稱、大小和數(shù)據(jù)類型,添加、刪除或修改索引等。②在更改表結(jié)構(gòu)之前,系統(tǒng)會自動備份當(dāng)前表。修改完成之后,將備份表中包含的數(shù)據(jù)追加到新修改后的表結(jié)構(gòu)中。如果表中有備注類型字段,還將創(chuàng)建一個備注備份文件。③表備份文件的擴(kuò)展名為.BAK,備注備份文件的擴(kuò)展名為.TBK。如果使用MODIFYSTRUCTURE修改結(jié)構(gòu)出現(xiàn)問題,可以刪除新文件,把.BAK和.TBK改為原文件擴(kuò)展名(.DBF和.FPT)即可恢復(fù)原文件。4.3.3瀏覽表中記錄數(shù)據(jù)表建立好后,需要顯示(查看)數(shù)據(jù)表中的內(nèi)容,顯示數(shù)據(jù)表中記錄有下列方式。l)菜單方式單擊“文件”|“打開”命令,打開要瀏覽顯示的數(shù)據(jù)表。單擊“顯示”|“瀏覽”命令。數(shù)據(jù)表中的記錄便顯示在瀏覽窗口上。也可在打開表之后,單擊“顯示”|“編輯”,此時,數(shù)據(jù)表的內(nèi)容以編輯方式顯示。瀏覽和編輯顯示數(shù)據(jù)表中的記錄時,屬于全屏幕編輯操作,用戶可以任意移動光標(biāo)到需要的記錄、字段上,并可直接對記錄數(shù)據(jù)進(jìn)行修改,也可向表中追加新記錄。2)命令操作格式:LIST|DISPLAY[<范圍>][FIELDS<字段名表>][FOR|WHILE<條件>][OFF][TOPRINTER[PROMPT]TOFILE<文件名>]功能:在VFP主窗口或用戶自定義窗口中,顯示與當(dāng)前表有關(guān)的記錄信息。說明:①LIST命令的缺省[范圍]是ALL,而DISPLAY命令的缺省[范圍]是當(dāng)前記錄。②LIST命令是連續(xù)滾動顯示,而DISPLAY命令是分屏顯示,即顯示一屏后暫停,按任意鍵繼續(xù)顯示下一屏。③[OFF]選項缺省時顯示記錄號,否則不顯示記錄號。4.3.4記錄指針的定位1.記錄指針的概念采用命令方式對表中記錄進(jìn)行編輯(增加、刪除、修改)時,必須先打開相應(yīng)的數(shù)據(jù)表,并定位到相應(yīng)記錄上,才能對該記錄進(jìn)行編輯操作。VFP中,對任何打開的數(shù)據(jù)表文件,都提供了一個記錄指針,用于完成記錄的定位。記錄指釷指向的記錄稱為當(dāng)前記錄。對表中記錄的操作一般都是針對當(dāng)前記錄進(jìn)行的。剛打開的數(shù)據(jù)表,記錄指針總是指向第一條記錄,但對數(shù)據(jù)表的操作將改變錄指針的位置,可以用.BOF()和.EOF()函數(shù)來測試,根據(jù)函數(shù)的返回值“.T.”或“.F.”判斷記錄指針的位置。2.記錄指針的定位建立數(shù)據(jù)表時,每條記錄都有一個編號,稱為記錄號,記錄號依據(jù)輸入記錄的順序從1開始依次編號。對記錄指針的定位,實際上就是將記錄指針移到指定的記錄號上。方法有菜單操作方式和命令操作方式2種。1)菜單方式在瀏覽或編輯窗口顯示數(shù)據(jù)記錄時,單擊“表”|“轉(zhuǎn)到記錄”,出現(xiàn)移動記錄指針的下級菜單命令選項,根據(jù)這些選項可將記錄指針移動到所需的記錄位置。命令選項的具體含義如下:第一個將記錄指針移到第1條記錄。最后一個將記錄指針移到最后一條記錄。下一個將記錄指針移到當(dāng)前記錄的下一條記錄。上一個將記錄指針移到當(dāng)前記錄的上一條記錄。記錄號將記錄指針移到指定記錄號的記錄上。定位將記錄指針移到符合條件的記錄上。4.3.4記錄指針的定位2.命令操作方式1)絕對移動格式:[GO[TO]]<數(shù)值表達(dá)式>|TOP|BOTTOM功能:將記錄指針定位到指定的記錄上。說明:①<數(shù)值表達(dá)式>的值指明記錄號,即直接按給定的記錄號定位。②選擇TOP或BOTTOM則分別將記錄指針定位到表文件的首、尾記錄上。[例4.3]用GO命令移動學(xué)生檔案表(xsdab.dbf)中的記錄指針。在[命令]窗口輸入如下命令序列:USExsdaGO6&&記錄指針指向記錄號為6的記錄GOTOP&&記錄指針指向首記錄GOBOTTOM&&記錄指針指向尾記錄USE2)相對移動格式:SKIP[<數(shù)值表達(dá)式>]功能:以當(dāng)前記錄為基準(zhǔn)向前或向后移動記錄指針。說明:<數(shù)值表達(dá)式>的值指明記錄指針移動的相對記錄數(shù)。如果是負(fù)數(shù),表示記錄指針向著記錄號減小的方向(向前)移動;如果是正數(shù),則向著記錄號增大的方向(向后)移動。缺省<數(shù)值表達(dá)式>,則記錄指針向后移動1條記錄。4.3.5記錄數(shù)據(jù)的修改1.使用菜單命令修改記錄首先打開數(shù)據(jù)表文件,再單擊“顯示”|“瀏覽”或“編輯”命令,這時當(dāng)前數(shù)據(jù)表的記錄顯示在瀏覽窗口或編輯窗口中,再將光標(biāo)移到需要修改的記錄字段上進(jìn)行修改即可,修改完成后使用Ctrl+W存盤。2.用BROWSE命令修改記錄該命令有許多控制記錄顯示的子句,這里僅介紹它的常用命令格式。格式:BROWSE[FIELDS<字段名表>][FOR<條件>][<范圍>]功能:在瀏覽窗口顯示記錄,并可直接修改記錄數(shù)據(jù)。[例4.5]用BROWSE命令對學(xué)生檔案表(xsda.dbf)中的記錄進(jìn)行修改。要求按指定的姓名、性別、班級、民族、出生日期字段順序顯示。USExsdaBROWSEFIELDS姓名,性別,班級,民族,出生日期3.用REPLACE命令修改記錄格式:REPLACE[范圍]<字段l>WITH<表達(dá)式1>[ADDITIVE][,<字段2>WITH<表達(dá)式2>[ADDITIVE]…][FOR|WHILE<條件>]功能:成批修改表的記錄數(shù)據(jù)。說明:①該命令不進(jìn)入全屏幕編輯狀態(tài)。②缺省[范圍]和[FOR|WHILE<條件>]時,只對當(dāng)前記錄進(jìn)行修改。③命令中必須要有一個修改的字段名,否則無效。④該命令是唯一的能用表達(dá)式修改記錄數(shù)據(jù)的命令,而且具有計算功能,是程序方式中最常用的修改記錄字段值的方法。⑤對于數(shù)值型字段,當(dāng)表達(dá)式的值超過字段的寬度時,將按如下規(guī)則進(jìn)行替換:首先截去小部分,并對小數(shù)部分進(jìn)行四舍五人;如果還放不下,則用科學(xué)計數(shù)法表示,并提示“數(shù)值上溢,數(shù)據(jù)已丟失?!?;如果還是放不下,則用“*”填充該字段,數(shù)據(jù)丟失。對于字符型字段,當(dāng)表達(dá)式的值超過字段的寬度時,則截去后面多余字符。⑥ADDITIVE只對替換備注字段有用,可把對備注字段的替代內(nèi)容追加到備注字段的后面。如果省略ADDITIVE,則用表達(dá)式的值改寫備注字段原有內(nèi)容。4.3.6插入記錄APPEND命令只能將記錄追加到數(shù)據(jù)表末尾,如果想在兩條記錄之間插入記錄,則需要在命令窗口中用插人記錄命令來實現(xiàn)。格式:INSERT[BLANK][BEFORE]功能:在當(dāng)前記錄之后或之前插人一條記錄。說明:①BLANK:表示插入一條空白記錄,缺省此項時,進(jìn)入全屏幕編輯狀態(tài)。②BEFORE:表示在當(dāng)前記錄之前插入,缺省此項則在當(dāng)前記錄之后插入。[例4.7]在學(xué)生檔案表(xsda.dbf)中,要求在5號與6號記錄之間插入1條空白記錄。在命令窗口中輸入如下命令:USExsdaGO5INSERTBLANK表示在5號記錄之后插入了一條空白記錄,其記錄號為6,原表中之后記錄的記錄號均依次增加1。4.3.7記錄的刪除與恢復(fù)VFP中,刪除記錄是經(jīng)過兩步完成的。第l步是給要刪除的記錄加上刪除標(biāo)記,稱為邏輯刪除,做了邏輯刪除的記錄并沒有真正從數(shù)據(jù)表中刪除,以后還可以恢復(fù);要真正刪除表中的記錄,則執(zhí)行第2步,刪除帶有刪除標(biāo)記的記錄,稱為物理刪除。1.邏輯刪除1)菜單方式打開要操作的數(shù)據(jù)表,用瀏覽或編輯方式顯示該數(shù)據(jù)表中的記錄;再用鼠標(biāo)單擊記錄左邊的邏輯刪除標(biāo)記塊,標(biāo)記塊變成黑色,代表此記錄已做了邏輯刪除標(biāo)記,如圖4-16所示,有3條記錄已做了邏輯刪除。圖4-16邏輯刪除記錄2)命令方式格式:DELETE[范圍][FOR|WHILE<條件>]功能:對當(dāng)前數(shù)據(jù)表中在指定范圍內(nèi)滿足條件的記錄作邏輯刪除。若缺省[范圍]和[FOR|WHILE<條件>]選項,則只對當(dāng)前記錄作邏輯刪除。[例4.8]4.3.7記錄的刪除與恢復(fù)2.記錄的恢復(fù)對作了邏輯刪除的記錄取消其邏輯刪除標(biāo)記稱為記錄的恢復(fù)。菜單方式可在瀏覽或編輯窗口中通過單擊鼠標(biāo),一條一條地恢復(fù)刪除的記錄。命令方式格式:RECALL[范圍][FOR<條件>]功能:恢復(fù)數(shù)據(jù)表中指定范圍內(nèi)滿足條件的已有邏輯刪除標(biāo)記的記錄,缺省[范圍]和[FOR<條件>],則對當(dāng)前記錄取消其邏輯刪除標(biāo)記。[例4.9]恢復(fù)學(xué)生檔案表(xsda.dbf)中所有作了邏輯刪除的記錄。命令序列為:USExsdaRECALLALLLISTUSE4.3.7記錄的刪除與恢復(fù)3.物理刪除邏輯刪除記錄只是為記錄加上刪除標(biāo)記,并未真正從數(shù)據(jù)表中刪除該記錄。要將這些記錄真正從數(shù)據(jù)表中刪除的操作稱為物理刪除。菜單方式其具體操作步驟如下:打開要刪除記錄的表用瀏覽或編輯方式顯示該數(shù)據(jù)表。單擊“表”|“徹底刪除”命令。系統(tǒng)將詢問是否真的要刪除記錄,單擊[是]按鈕,即可徹底刪除作了邏輯刪除標(biāo)記的所有記錄。命令方式格式:PACK[MEMO][DBF]功能:從當(dāng)前表中永久刪除作了邏輯刪除標(biāo)記的記錄,減少與該表相關(guān)的備注文件所占用的空間,即物理刪除。說明:①[MEMO]子句:從備注文件中刪除未使用空間,但不從表中刪除標(biāo)有刪除標(biāo)記錄。備注字段的信息保存在一個相關(guān)的備注文件內(nèi)。備注文件的文件名與表相同,擴(kuò)展名為.FPT。②[DBF]子句:從表中刪除帶刪除標(biāo)標(biāo)記的記錄,但不影響備注文件。③當(dāng)使用PACK命令時,VFP把所有沒作刪除標(biāo)記的記錄錄復(fù)制到一個臨時表(TemporaryTable)執(zhí)行完P(guān)ACK命令后,再把原表從磁盤上刪除,同時用原表名命名臨時表。[例4.10]4.3.7記錄的刪除與恢復(fù)4.清空數(shù)據(jù)表命令格式:ZAP功能:刪除表中所有記錄,只保留表的結(jié)構(gòu)。說明:ZAP命令等同DELETEALL和PACK聯(lián)用,但ZAP速度更快。如果SETSAFETY為ON,VFP會提示是否要從當(dāng)前表中刪除記錄。發(fā)出ZAP命令,不會引發(fā)刪除觸發(fā)器。有關(guān)為表創(chuàng)建觸發(fā)器的詳細(xì)內(nèi),將在后面介紹。[例4.11]刪除xsda.dbf數(shù)據(jù)表文件中的全部記錄。USExsdaZAP數(shù)據(jù)表xsda.dbf中所有記錄被徹底刪除,記錄數(shù)為0,但該數(shù)據(jù)表的結(jié)構(gòu)仍存在。4.3.8表的復(fù)制1.表結(jié)構(gòu)的復(fù)制格式:COPYSTRUCTURETO<文件名>[FIELDS<字段名表>]功能:將當(dāng)前數(shù)據(jù)表的結(jié)構(gòu)復(fù)制到指定的數(shù)據(jù)表文件中,新表的字段數(shù)和字段順序由“FIELDS<字段名表>”子句決定。[例4.12]把學(xué)生檔案表(xsda.dbf)中的學(xué)號、姓名、性別、班級字段復(fù)制成一個新表XS.DBF,新表中只有結(jié)構(gòu)定義,沒有記錄數(shù)據(jù)。命令序列為:USExsdaCOPYSTRUTOXSFIEL學(xué)號,姓名,性別,班級USEXS&&打開XS表LISTSTRU&&顯示XS表結(jié)構(gòu)2.表記錄的復(fù)制格式:COPYTO<文件名>[<范圍>][FIELDS<字段名表>][FOR|WHILE<條件>]功能:將當(dāng)前表中在指定范圍內(nèi)滿足條件的記錄,按指定的字段復(fù)制生成一新表文件。[例4.12]4.4表的排序、索引與查詢4.4.1數(shù)據(jù)表的分類排序(物理排序)排序是根據(jù)數(shù)據(jù)表文件中某個或多個字段(稱為關(guān)鍵字段)的值按照某種順序?qū)⒈碇械挠涗浿匦屡帕猩梢粋€新的數(shù)據(jù)表文件。格式:SORTTO<新表文件名>ON<字段l>[/A][/D][/C][,<字段名2>[/A][/D][/C]…][ASCENDING|DESCENDING][范圍][FIELDS<字段名表>][FOR|WHILE<條件>]功能:將當(dāng)前數(shù)據(jù)表中指定范圍內(nèi)滿足條件的記錄,按字段名1、字段名2、…關(guān)鍵字段的值的大小重新排列,排序結(jié)果將放到指定的重新生成的新表文件中。說明:排序后要重新生成一新表文件,由“<新表文件名>”指定,新表是關(guān)閉狀態(tài)。排序字段可以是字符型、數(shù)字型、日期型、邏輯型型等字段,但不能是備注型和通用型字段?!?A”表示按字段值升序排序,為缺省方式;“/D”表示按字段值降序排序;“/C”對于字符型字段不區(qū)分大小寫字母?!癆SCENDING|DESCENDING”決定除用“/A”或“/D”指明了排序方式的字段外的所有字段的排序方式,前者為升序,后者為降序。缺省[范圍]和[FOR|WHILE<條件>]時,則對當(dāng)前表中的所有記錄排序。[例4.13]4.4.2數(shù)據(jù)表索引的概念1.索引的概念索引是對數(shù)據(jù)表中某一關(guān)鍵字段或表達(dá)式的值按照一定的規(guī)則進(jìn)行排序,并根據(jù)排序的結(jié)果建立索引文件。在VFP中,建立索引文件實際上是建立一個由指定索引字段的值和它對應(yīng)的記錄號組成的索引表。用索引進(jìn)行排序不會改變表中記錄的物理順序,也不會建立一個新表。因此一個表可以擁有多個索引,用戶也可以按多種不同的順序使用表中的記錄。但任何時候只有一個索引起作用。索引文件和表文件是分開存儲的,但是索引文件不能獨立使用,必須與原數(shù)據(jù)表一起工作。索引具有自動更新的特性,即當(dāng)索引文件打開后,對表進(jìn)行記錄的添加、刪除、修改時,相應(yīng)的索引會自動進(jìn)行更新。2.索引的分類根據(jù)對索引關(guān)鍵字的不同要求,將索引分為四種類型。主索引在主索引中,用作排序依據(jù)的關(guān)鍵字段或表達(dá)式中不允許出現(xiàn)重復(fù)值。主索引只能在數(shù)據(jù)表中建立,并且一個數(shù)據(jù)表只能創(chuàng)建一個主索引。候選索引候選索引也不允許在用作排序依據(jù)的關(guān)鍵字段或表達(dá)式中出現(xiàn)重復(fù)值。它們在表中有資格被選作主索引,即主索引的候選者。一個表中可以有多個候選索引。唯一索引允許在用作排序依據(jù)的關(guān)鍵字段或表達(dá)式中出現(xiàn)重復(fù)值,但在唯一索引中,只包含表中第一個與關(guān)鍵字或表達(dá)式相匹配的記錄,對于那些具有重復(fù)值的記錄則不包含在唯一索引中。普通索引是建立索引時的默認(rèn)類型,可用于記錄排序和搜索記錄。普通索引允許在用作排序依據(jù)的關(guān)鍵字段或表達(dá)式中出現(xiàn)重復(fù)值,而且一個表中可以建立多個普通索引。4.4.2數(shù)據(jù)表索引的概念3.索引文件類型在VFP中,索引文件有兩種結(jié)構(gòu),一種是傳統(tǒng)的.IDX索引文件,只有一個索引關(guān)鍵字表達(dá)式。另一種是復(fù)合索引文件.CDX,包含了多個索引關(guān)鍵字表達(dá)式。這些索引關(guān)鍵字表達(dá)式稱為索引標(biāo)識。復(fù)合索引文件就好像是將多個.IDX文件合成在一個文件中一樣。復(fù)合索引文件又分為兩種:結(jié)構(gòu)復(fù)合索引文件和非結(jié)構(gòu)復(fù)合索引文件。1)單索引文件只有一個索引標(biāo)識,擴(kuò)展名為.idx,不會隨著表的打開而自動打開,使用時必須先手工打開索引。2)非結(jié)構(gòu)復(fù)合索引文件包含多個不同的索引標(biāo)識,一個表可建立多個非結(jié)構(gòu)復(fù)合索引文件。非結(jié)構(gòu)復(fù)合索引文件的文件名由用戶指定,擴(kuò)展名為.cdx,也不會隨著表的打開而自動打開,使用時必須先手工打開索引。3)結(jié)構(gòu)復(fù)合索引文件包含多個不同的索引標(biāo)識,一個表只有一個結(jié)構(gòu)復(fù)合索引文件,其索引文件名表文件同名,擴(kuò)展名為.cdx。結(jié)構(gòu)復(fù)合索引文件會隨著表文件的打開而自動打開,表中記錄更新,索引也會自動更新。在VFP中,主要使用結(jié)構(gòu)復(fù)合索引文件。4.4.3索引文件的建立、使用和刪除1.建立索引文件1)建立單索引文件格式:INDEXON<索引關(guān)鍵字表達(dá)式>TO<單索引文件名>[FOR|WHILE<條件>][ADDITIVE]功能:根據(jù)<索引關(guān)鍵字表達(dá)式>的值建立一個索引文件,其擴(kuò)展名為.idx。說明:①<索引關(guān)鍵字表達(dá)式>只能是字符型、數(shù)值型、日期型和邏輯型數(shù)據(jù)。②<索引關(guān)鍵字表達(dá)式>可以是表中的一個字段或多個字段組成的表達(dá)式,當(dāng)表達(dá)式中各字段的數(shù)據(jù)類型不同時,必須轉(zhuǎn)換為相同的數(shù)據(jù)類型,且必須轉(zhuǎn)換成字符型。③[FOR|WHILE<條件>]指定對滿足條件的記錄建立索引文件。④若選擇了[ADDITIVE]可選項,則執(zhí)行該命令前不關(guān)閉已打開的索引文件;否則,將關(guān)閉已打開的索引文件。⑤單索引文件只能按<索引關(guān)鍵字表達(dá)式>的值升序排列。[例4.14]4.4.3索引文件的建立、使用和刪除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è)計器。選擇[字段]選項卡,在需要設(shè)置索引的字段右邊對應(yīng)的[索引]下拉列表中選擇升序或降序,建立的索引為單個字段的普通索引。選擇[索引]選項卡,則可建立主索引、候選索引、唯一索引、普通索引4種類型的結(jié)構(gòu)復(fù)合索引文件。具體步驟如下:①在[索引名]框中,輸入索引標(biāo)識名。②在[類型]下拉列表框中,選擇索引類型。③在[表達(dá)式]框中輸入用于索引的字段名?;騿螕舯磉_(dá)式框右邊的按鈕啟動[表達(dá)式生成器]來建立索引表達(dá)式。④如果要對滿足條件的記錄索引,可在[篩選]框中輸入篩選表達(dá)式。⑤如果要使用降序排序,單擊位于索引名左邊的升、降序按鈕。默認(rèn)順序為升序。⑥單擊[確定]按鈕,在彈出的提示對話框中單擊[是]按鈕。說明:上述方法建立的索引為結(jié)構(gòu)復(fù)合索引,結(jié)構(gòu)復(fù)合索引文件名與表文件同名,而擴(kuò)展名為.cdx。4.4.3索引文件的建立、使用和刪除2.命令方式建立結(jié)構(gòu)復(fù)合索引文件格式:INDEXON<索引關(guān)鍵字表達(dá)式>TAG<索引標(biāo)識名>[FOR|WHIIE<條件>][ASCENDING|DESCENDING]說明:①第一次建立索引時,將生成一個與數(shù)據(jù)表文件同名而擴(kuò)展名為.cdx的結(jié)構(gòu)復(fù)合索引文件。結(jié)構(gòu)的含義:VFP把該文件當(dāng)作表的組成部分來處理,當(dāng)表文件打開時就自動打開,如果結(jié)構(gòu)復(fù)合索引文件丟失或損壞,則數(shù)據(jù)表文件也不能打開。②“索引標(biāo)識名”作為索引的標(biāo)識,存放在.cdx文件中。一個.cdx文件可以包含多個各不相同的標(biāo)識名。③“ASCENDING|DESCENDING”用來指定索引排序方式,前者為升序,后者為降序。④該命令建立的是普通索引。[例4.16]對獎學(xué)金記錄表(jxj.dbf)按“獎學(xué)金類型”升序排列,類型相同時按“獎學(xué)金4.4.3索引文件的建立、使用和刪除3)非結(jié)構(gòu)復(fù)合索引文件格式:INDEXON<索引關(guān)鍵字表達(dá)式>TAG<索引標(biāo)識名> OF<復(fù)合索引文件名>[FOR<條件>][ASCENDING|DESCENDING]說明:非結(jié)構(gòu)復(fù)合索引文件與結(jié)構(gòu)復(fù)合索引文件的區(qū)別是,在建立時要由用戶給出復(fù)合索引文件名,并且它不隨數(shù)據(jù)表文件的打開而自動打開,也不影響數(shù)據(jù)表的打開。4.4.3索引文件的建立、使用和刪除2.索引的使用索引提供對數(shù)據(jù)的快速訪問,使用索引能夠提高數(shù)據(jù)查詢的性能。要實現(xiàn)索引查詢,表和相應(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)識簡稱為主控索引。打開單索引文件或非結(jié)構(gòu)復(fù)合索引文件單索引文件或非結(jié)構(gòu)復(fù)合索引文件要使用時,通常使用相應(yīng)的命令先打開。(1)打開數(shù)據(jù)表的同時打開索引文件格式:USE<數(shù)據(jù)表文件名>INDEX<索引文件列表>功能:在打開指定表的同時打開與其相關(guān)的1個或多個索引文件。說明:INDEX子句用于指定要打開的索引文件(最多7個)。打開多個索引多件時,索引文件之間用逗號分隔,第1個索引文件自動成為主控索引文件。[例4.17]4.4.3索引文件的建立、使用和刪除(2)索引文件單獨打開格式:SETINDEXTO<索引文件列表>[ADDITIVE]功能:為當(dāng)前表打開指定的一個或多個索引文件。說明:索引文件列表用于指定要打開的一個或多個索引文件(最多7個),索引文件列表中,第1個索引文件將自動成為主控索引文件。若無[ADDITIVE],則隨著新索引文件的打開,以前打開的索引文件會自動關(guān)閉。2)關(guān)閉索引文件索引文件使用完后應(yīng)關(guān)閉。由于索引文件是依賴于數(shù)據(jù)表而存在的,所以關(guān)閉數(shù)據(jù)表文件的同時,索引文件也將關(guān)閉。另外,單獨關(guān)閉索引文件的命令有:SETINDEXTO功能:關(guān)閉當(dāng)前工作區(qū)中打開的索引文件。CLOSEINDEX功能:關(guān)閉所有工作區(qū)中打開的索引文件。說明:①剛創(chuàng)建的索引處于打開狀態(tài),并且自動成為主控索引。②結(jié)構(gòu)復(fù)合索引文件隨表的打開而自動打開。③表關(guān)閉時,與該表相關(guān)的所有打開的索引文件也自動關(guān)閉。3)設(shè)置主控索引當(dāng)同時打開了多個獨立索引文件或結(jié)構(gòu)復(fù)合索引文件中包含多個索引標(biāo)識時,需要指定當(dāng)前起作用的索引即主控索引。格式:SETORDERTO<單索引文件名>|[TAG]<索引標(biāo)識名>功能:指定相應(yīng)的索引為主控索引。[例4.18]4.4.3索引文件的建立、使用和刪除3.重建索引如果在索引文件打開狀態(tài)下,對數(shù)據(jù)表進(jìn)行編輯修改時,系統(tǒng)會自動修改索引文件。但是如果在索引文件打開前,對數(shù)據(jù)表中的索引關(guān)鍵字進(jìn)行了編輯修改操作,那么索引文件不會自動更新,與表文件內(nèi)容就不一致了,這時就需要重建索引文件。格式:REINDEX功能:使用當(dāng)前工作區(qū)中打開的索引文件按索引關(guān)鍵字表達(dá)式重新建立索引表。4.刪除索引標(biāo)識格式:DELETETAGALL[<索引標(biāo)識1>[,<索引標(biāo)識2>…]功能:刪除打開的復(fù)合索引文件的索引標(biāo)識。說明:①ALL子句用于刪除復(fù)合索引文件的所有索引標(biāo)識。若某索引文件的所有索引標(biāo)識都被刪除,則該索引文件也自動刪除。②該命令只能刪除打開的復(fù)合索引文件的索引標(biāo)識,對于單索引文件不能使用該命令。4.4.4數(shù)據(jù)表的查詢在數(shù)據(jù)處理過程中,進(jìn)行得最頻繁的操作就是從龐大的數(shù)據(jù)中查找出符合某種條件或要求的記錄,即查詢操作。VFP中提供了對表記錄的兩類查詢命令:順序查詢和索引查詢。1.順序查詢順序查詢是一種按照記錄的排列順序,在表文件中從上而下依次查找滿足條件的記錄。該命令可以在沒有打開任何索引文件的無序的表中進(jìn)行查詢操作,但是在數(shù)據(jù)龐大的表中進(jìn)行查詢時速度慢。1)LOCATE命令格式:LOCATE[范圍][FOR|WHILE<條件>]功能:在指定范圍內(nèi),按順序搜索數(shù)據(jù)表,并將記錄指針定位在滿足條件的第一條記錄上。2)CONTINUE命令格式:CONTINUE功能:LOCATE命令執(zhí)行后繼續(xù)查找下一條滿足條件的記錄。說明:①LOCATE命令在指定范圍內(nèi)查找滿足條件的第一條記錄,并將該記錄置為當(dāng)前記錄。如果找不到符合條件的記錄,則顯示“已到定位范圍末尾”;缺省[范圍]則為ALL。②CONTINUE命令不能單獨使用,只能放在LOCATE命令后,并可多次使用。③若LOCATE找到一條滿足條件的記錄,可使用RECNO()返回該記錄號,且FOUND()函數(shù)的返回值為“真”(.T.),EoF()函數(shù)的返回值為“假”(.F.)。[例4.19]4.4.4數(shù)據(jù)表的查詢2.索引查詢1)FIND命令格式:FIND<字符串>|<數(shù)值型常量>|<&字符變量>功能:在表文件和有關(guān)索引文件打開的情況下,查找出索引關(guān)鍵字值與所指定的<字符串>或<數(shù)值常量>相匹配的第一條記錄。說明:①FIND只能查找C、N型數(shù)據(jù),字符串常量可省略邊界符;字符串變量前面必須使用宏代換函數(shù)&。②FIND查找到與索引關(guān)鍵字相匹配的記錄,則RECNO()返回該記錄號;FOUND()返回“真”(.T.);EoF()返回“假”(.F.)。③FIND找到的是與查詢數(shù)據(jù)相匹配的第一條記錄,沒有繼續(xù)查找命令。④如果有多個與關(guān)鍵字匹配的記錄,則記錄指針定位于其中的第一條記錄上。由于已經(jīng)打開相關(guān)索引文件,所以關(guān)鍵字段值相同的記錄排列在一起,若查詢后續(xù)記錄,可用SKIP。2)SEEK命令格式:SEEK<表達(dá)式>功能:在表文件和有關(guān)索引文件打開的情況下,查找出索引關(guān)鍵字值與所指定的<表達(dá)式>的值相匹配的第一條記錄。說明:①只能在索引文件打開后使用SEEK命令。②SEEK命令可查找字符型、數(shù)值型、日期型、邏輯型表達(dá)式的值。SEEK命令中的表達(dá)式必須使用相應(yīng)的邊界符,以確定表達(dá)式類型,變量不用&函數(shù)。③如果SEEK找到了與索引關(guān)鍵字相匹配的記錄,則RECNO()返回該記錄號;FOUND()返回“真”(.T.);EOF()返回“假”(.F.)。④若找不到相匹配的關(guān)鍵字,則RECNO()返回值為表中記錄總數(shù)加1。FOUND()返回“假”(.F.);EOF()返回“真”(.T.)。[例4.20]4.5數(shù)據(jù)表的統(tǒng)計與計算1)統(tǒng)計記錄個數(shù)命令格式:COUNT[范圍][FOR|WHILE<條件>][TO<內(nèi)存變量>]功能:統(tǒng)計當(dāng)前數(shù)據(jù)表中指定范圍內(nèi)滿足條件的記錄個數(shù):說明:缺省[范圍]和[FOR|WHILE<條件>],對當(dāng)前表中所有記錄進(jìn)行統(tǒng)計。使用TO<內(nèi)存變量>可將統(tǒng)計的結(jié)果保存到指定的內(nèi)存變量,否則將統(tǒng)計結(jié)果顯示在屏幕上。使用SETDELETEOFF,則加刪除標(biāo)記的記錄將被統(tǒng)計在內(nèi)。[例4.21]統(tǒng)計學(xué)生檔案表(xsda.dbf)中女生人數(shù),統(tǒng)計結(jié)果保存到內(nèi)存變量x中。命令序列如下:USExsdaCOUNTFOR性別=“女”TOx?“女生人數(shù)有”+ALLTRIM(STR(x)).+“人”2)數(shù)值字段求和命令格式:SUM[范圍][<表達(dá)式列表>][FOR|WHILE<條件>][To<內(nèi)存變量列表>]功能:將指定范圍內(nèi)滿足條件的記錄,按指定的各個表達(dá)式在列方向上分別求和。說明:①<表達(dá)式列表>指定要求和的一個或多個數(shù)值型字段或者字段表達(dá)式。如果省略<表達(dá)式列表>,則對所有數(shù)值型字段求和。②缺省[范圍]和[FOR|WHILE<條件>],則對所有記錄求和。③若指定<內(nèi)存變量列表>,則將求和結(jié)果依次存于相對應(yīng)的內(nèi)存變量中中,但要注意,<內(nèi)存變量表>中的變量的個數(shù)要與<表達(dá)式表>中表達(dá)式的個數(shù)或所有數(shù)值型字段個數(shù)相等,否則出錯。4.5數(shù)據(jù)表的統(tǒng)計與計算3)數(shù)值字段求平均值命令格式:AVERAGE[范圍][<表達(dá)式列表>][FOR|WHILE<條件>][TO<內(nèi)存變量表>]功能:對當(dāng)前表中的數(shù)值字段在列方向上求平均值。各選項的含義與SUM命令相同。[例4.23]對xsjl.dbf表中銷售二組的各種商品銷售額求平均值,結(jié)果保存到指定的內(nèi)變量中,并顯示計算結(jié)果。USExsjlAVERAGETOa,b,c,dFOR銷售小組=“二組”?a,b,c,dUSE4)多功能計算命令格式:CALCULATE<表達(dá)式表>[范圍][FOR|WHILE<條件>][T0<內(nèi)存變量表>]功能:對表中的字段或包含字段的表達(dá)式作統(tǒng)計計算。<表達(dá)式表>可以是下列函數(shù)的任意組合,這些函數(shù)僅用于CALCULATE命令。說明:①這里的<表達(dá)式>指具有統(tǒng)計意義的函數(shù)。這些函數(shù)是:CNT()統(tǒng)計記錄總數(shù)。SUM(<數(shù)值表達(dá)式>)對當(dāng)前表數(shù)值字段求和。AVG(<數(shù)值表達(dá)式>)對當(dāng)前表數(shù)值字段求平均值。MAX(<表達(dá)式>)對當(dāng)前表的C、N、D字段求最大值。MIN(<表達(dá)式>)對當(dāng)前表的C、N、D字段求最小值。②SUM()、AVG()這樣的函數(shù)形式只能放在該命令后使用。③MAX()、MIN()這樣的函數(shù)形式放在該命令后是指對當(dāng)前表字段列方向求最大/小值。[例4.24]計算xsjl.dbf表中電視機(jī)銷售額的最大值、最小值、平均值、總和。4.5數(shù)據(jù)表的統(tǒng)計與計算5)分類匯總命令格式:TOTALTO<匯總表文件名>ON<關(guān)鍵字段>[范圍][FIELDS<字段名表>][FOR|WHILF<條件>]功能:按關(guān)鍵字段對當(dāng)前表文件的數(shù)值型字段進(jìn)行分類求和,生成一個新的表文件。說明:①當(dāng)前表必須先按照關(guān)鍵字段進(jìn)行排序或索引。②匯總結(jié)果保存在<匯總文件名>指定的新表文件中,新文件的結(jié)構(gòu)與當(dāng)前表文件完全相同。③[FIELDS<字段名表>]指定匯總字段,匯總字段必須是數(shù)值型字段,若該項缺省則對所有數(shù)值型字段求和。④[范圍]缺省時是對所有記錄進(jìn)行操作。⑤新文件中的記錄個數(shù)由<關(guān)鍵字段>決定,匯總時將當(dāng)前表文件中關(guān)鍵字段值相同的記錄分成一類,每一類產(chǎn)生一個記錄,各記錄中的匯總字段值為匯總后的和,而非匯總字段值為每一類的第一條記錄的值。⑥若原表中字段寬度不足容納匯總結(jié)果,則系統(tǒng)將會自動修改新表中該字段的寬度,確保能存放下匯總結(jié)果。[例4.25]4.6多表操作4.6.1工作區(qū)與別名工作區(qū)是VFP在內(nèi)存中開辟的一塊區(qū)域,用于存放打開的表。表文件使用時要打開,用完要關(guān)閉,而且在同一工作區(qū)上新打開一個表文件時,原打開的表文件就自動關(guān)閉。顯然如果數(shù)據(jù)操作涉及到多個表文件時,這種單工作區(qū)方式就不能滿足數(shù)據(jù)處理要求了。VFP系統(tǒng)最多能同時使用32767個工作區(qū),這32767個工作區(qū)分別用l-32767的數(shù)字來標(biāo)識。此外,系統(tǒng)為前10個工作區(qū)指定的別名為字母A-J。在任意時刻每個工作區(qū)僅能打開一個表文件。在每一個工作區(qū)中各有一個記錄指針指向該區(qū)表文件的當(dāng)前記錄,使得各區(qū)的表文件可以獨立操作。VFP系統(tǒng)中,雖然可以在不同工作區(qū)打開多個表文件,但在任何時刻只能對一個工作區(qū)進(jìn)行操作,這個工作區(qū)稱為當(dāng)前工作區(qū)或主工作區(qū),又稱活動工作區(qū)。當(dāng)前工作區(qū)中打開的文件成為當(dāng)前表文件,又稱主表文件。在當(dāng)前表文件進(jìn)行操作時,可以引用其他工作區(qū)的表文件內(nèi)容,但不影響其他工作區(qū)表文件的數(shù)據(jù)。若在某工作區(qū)打開表時沒有指定別名,則該表文件名即為表的別名;若打開表時同時指定了別名,則可以用此別名來引用該表或工作區(qū)。打開表時指定別名的方法如下:格式:USE<表名>ALIAS<別名>功能:打開一個表文件,并為該表定義一個別名。4.6.2選擇當(dāng)前工作區(qū)只有當(dāng)前工作區(qū)打開的表文件才處于激活狀態(tài),系統(tǒng)默認(rèn)1號工作區(qū)為當(dāng)前工作區(qū)??梢愿鶕?jù)需要改變當(dāng)前工作區(qū)。當(dāng)前工作區(qū)選擇命令格式:SELECT<工作區(qū)號>|<別名>功能:選擇一個工作區(qū)為當(dāng)前工作區(qū)。說明:①當(dāng)前工作區(qū)的改變不影響各工作區(qū)的記錄指針位置。②<工作區(qū)號>指定當(dāng)前工作區(qū),如果為0,即命令“SELECT0”表示選擇尚未使用的編號最小的工作區(qū)為當(dāng)前工作區(qū)。③既可以通過工作區(qū)號,也可以通過<別名>來選擇當(dāng)前工作區(qū)。④在打開數(shù)據(jù)表的同時可以選擇工作區(qū),但該命令不會改變當(dāng)前工作區(qū),命令為:USE<表名>IN<工作區(qū)>[例4.26]4.6.2選擇當(dāng)前工作區(qū)2)使用“數(shù)據(jù)工作期”如果用戶想了解工作區(qū)的使用情況:可以從“窗口”菜單中選擇“數(shù)據(jù)工作期”命令打如圖4-25所示的數(shù)據(jù)工作期窗口。通過該窗口,不僅可以直接查看工作區(qū)的使用情況,還能夠打開、瀏覽或關(guān)閉指定的表。圖4-25數(shù)據(jù)工作期窗口注意:可以在[命令]窗口中輸入SET命令來打開[數(shù)據(jù)工作期]窗口。3)使用其他工作區(qū)的表要使用非當(dāng)前工作區(qū)中打開的表,應(yīng)使用<別名>.<字段名)<別名>-><字段名>的形式。[例4.27]4.6.3創(chuàng)建表之間的關(guān)聯(lián)表間的邏輯連接又稱作關(guān)聯(lián)。所謂關(guān)聯(lián)是把2個或多個在不同工作區(qū)中打開的表文件根據(jù)關(guān)鍵字段進(jìn)行邏輯連接,而不生成新的表。兩個表建立關(guān)聯(lián)后,當(dāng)前工作區(qū)中的表記錄指針移動時,被關(guān)聯(lián)工作區(qū)的表記錄指針也將自動相應(yīng)移動,以實現(xiàn)對多表的同時操作。通常把發(fā)出關(guān)聯(lián)命令工作區(qū)的表稱為父表或主表,被關(guān)聯(lián)工作區(qū)的表稱為子表。在兩個表之間建立關(guān)聯(lián),必須以某一個字段為標(biāo)準(zhǔn),該字段稱為關(guān)鍵字段。表文件的關(guān)聯(lián)可分為一對一關(guān)聯(lián)、一對多關(guān)聯(lián)和多對多關(guān)聯(lián)。(1)一對一關(guān)聯(lián)如果A表中的某條記錄只能對應(yīng)B表中的一條記錄,而B表中的某一條記錄在A表中也只能有一條記錄與之對應(yīng),則稱之為一對一關(guān)聯(lián)。例如在患者信息.DBF中某個患者只能對應(yīng)床位分配.DBF中的一條記錄(一個患者只能擁有一張床),而床位分配.DBF中的某一條記錄在患者信息.DBF中也只能有一條記錄與之對應(yīng)(一張床只能住一個患者)。這兩個文件之間的關(guān)聯(lián)就是一對一關(guān)聯(lián)。(2)一對多關(guān)聯(lián)如果A表中的某條記錄可以對應(yīng)B表中的多條記錄,而B表中的某一條記錄在A表中卻只能有一條記錄與之對應(yīng),則稱之為一對多關(guān)聯(lián)。例如每個患者只有一條基本信息,但有多次交費的記錄,因此同一個住院號在患者信息.DBF中對應(yīng)一條紀(jì)錄而在住院費用.DBF中對應(yīng)多條記錄。這兩個文件之間的關(guān)聯(lián)就是一對多關(guān)聯(lián)。(3)多對多關(guān)聯(lián)如果A表中的某條記錄對應(yīng)B表中的多條記錄,而B表中的某一條記錄在A表中也有多條記錄與之對應(yīng),則稱之為多對多的關(guān)聯(lián)。VFP中不能直接處理多對多關(guān)聯(lián)。為了建立這種多對多關(guān)聯(lián),至少需要3個表。其中一個表作為中間表,將父表與子表關(guān)聯(lián)起來。VFP允許用戶在表間建立臨時關(guān)聯(lián)和永久關(guān)聯(lián)。4.6.3創(chuàng)建表之間的關(guān)聯(lián)1.使用命令建立關(guān)聯(lián)格式:SETRELATIONTO<表達(dá)式1>INTO<別名1>[,<表達(dá)式2>INTO<別名2>….][ADDITIVE]功能:以當(dāng)前表為父表與一個或多個工作區(qū)的子表建立關(guān)聯(lián)。說明:在使用該關(guān)聯(lián)命令之前,各個表文件已分別在各自的工作區(qū)打開,當(dāng)前工作區(qū)的表是父表,用<別名>表示的表是子表。子表必須先對關(guān)聯(lián)字段索引,父表可不建索引。當(dāng)父表指針移動時,子表指針按照索引順序移動到與父表關(guān)鍵字相匹配的第一條記錄;若沒有匹配的記錄,子表指針指向文件尾。<表達(dá)式>是關(guān)聯(lián)的關(guān)鍵字,一般使用表之間具有相同類型和寬度的同名字段,不同名的字段只要類型、寬度以及數(shù)值相同也可建立關(guān)聯(lián)。關(guān)聯(lián)后,在父表工作區(qū)移動記錄指針,帶動子表指針作同步移動;而子表的指針移動不會帶動父表指針移動。[ADDITIVE]在建立新的關(guān)聯(lián)后,保留以前的關(guān)聯(lián),用于3個或3個以上的表之間建立多重關(guān)聯(lián)。關(guān)聯(lián)后,當(dāng)前工作區(qū)的字段名可直接訪問,訪問其他工作區(qū)的字段時,必須在字段名前加上別名。SETSKIPTO<別名>在關(guān)聯(lián)命令后使用,建立一對多關(guān)聯(lián)。建立關(guān)聯(lián)是建立表之間的臨時關(guān)系,當(dāng)數(shù)據(jù)表關(guān)閉或重新打開時,關(guān)聯(lián)會自動撤消?!癝ETRELATIONTO”命令也可以關(guān)閉關(guān)聯(lián)。[例4.30]

[例題4.29]根據(jù)學(xué)生信息系統(tǒng)的學(xué)生檔案表(xsda.dbf)、學(xué)生成績表(xscj.dbf)和課程表(kcb.dbf)、獎學(xué)金記錄表(jxj.dbf),要求能實現(xiàn)查詢學(xué)生的學(xué)號、姓名、班級、課程號,課程名和成績、獲獎學(xué)金等信息??梢栽谶@3個表間通過共有字段建立關(guān)聯(lián)的方法來同時訪問這3個數(shù)據(jù)表中相關(guān)的數(shù)據(jù)。命令序列如下:closeallsele1usexsdaindexon學(xué)號tagxhsele2usexscjindexon學(xué)號tagxhindexon課程號tagkchsele3usekcb

indexon學(xué)號tagxhindexon課程號tagkchsele4usejxjindexon學(xué)號tagxhsele2setrelato學(xué)號intoAsetrelato課程號intocaddisetrelato學(xué)號intodaddisetskiptodlist學(xué)號,A.姓名,A.班級,C.課程名,成績,D.獎學(xué)金類型,D.獎學(xué)金等級,D.獲獎日期4.6.3創(chuàng)建表之間的關(guān)聯(lián)2.使用數(shù)據(jù)工作期建立關(guān)聯(lián)在數(shù)據(jù)工作期窗口建立表間關(guān)聯(lián)的操作步驟如下:①單擊“窗口”|“數(shù)據(jù)工作期”命令,彈出“數(shù)據(jù)工作期”對話框。②在“數(shù)據(jù)工作期”對話框中分別打開需要關(guān)聯(lián)的多個表。③選擇進(jìn)行關(guān)聯(lián)的“父表”,并單擊“關(guān)系”按鈕。④單擊“子表”,并選擇關(guān)聯(lián)字段,建立關(guān)聯(lián)。⑤如果此關(guān)聯(lián)為一對多的關(guān)聯(lián),則需單擊“一對多”按鈕進(jìn)行設(shè)置。按此方法建立xscj與xsda、kcb和jxj的關(guān)聯(lián)結(jié)果如圖4-27所示。圖4-274.7數(shù)據(jù)庫及其基本操作4.7.1數(shù)據(jù)庫的概念1.?dāng)?shù)據(jù)庫概念數(shù)據(jù)庫是一個邏輯上的概念和手段,通過一組系統(tǒng)文件將相互關(guān)聯(lián)的數(shù)據(jù)庫表及其相關(guān)的數(shù)據(jù)庫對象統(tǒng)一組織和管理。這些對象包括:表、表之間的關(guān)系、基于表的視圖和查詢能及有效管理

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論