




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第四章VFP6.0數(shù)據(jù)庫及其操作4.3自由表4.1VisualFoxPro數(shù)據(jù)庫及其建立4.2建立數(shù)據(jù)庫表(重點(diǎn))4.4表的基本操作與相關(guān)命令(重點(diǎn))4.5索引與排序(難點(diǎn))4.6數(shù)據(jù)完整性與表間永久性關(guān)系4.7多個表的同時使用教學(xué)要求:1一、建立表1、設(shè)計(jì)表結(jié)構(gòu)一個數(shù)據(jù)表由數(shù)據(jù)表名、數(shù)據(jù)表的結(jié)構(gòu)、數(shù)據(jù)表的記錄三要素構(gòu)成。表的結(jié)構(gòu):定義數(shù)據(jù)表中的字段個數(shù)、各個字段的名稱、屬性、類型、寬度。定義數(shù)據(jù)表的結(jié)構(gòu)需注意的問題:
數(shù)據(jù)表名及字段類型的設(shè)置(N、I、C、D、L、M、G、T、Y、B),可以是漢字、英文字母、數(shù)字與下劃線,數(shù)字與下劃線不能是第一個字符。
小數(shù)點(diǎn)和正負(fù)號在字段寬度中各占一位4.3自由表(.dbf)2字段名字段名稱寬度學(xué)號字符型9姓名字符型10出生日期日期型8性別字符型2民族字符型10專業(yè)字符型10身高數(shù)值型6(2位小數(shù))照片通用型4個人簡介備注型464Student表結(jié)構(gòu)Why?3字段名字段名稱寬度課程號字符型10課程名稱字符型16課程類型字符型10學(xué)分?jǐn)?shù)值型3(1位小數(shù))學(xué)時整型4course表結(jié)構(gòu)4字段名字段名稱寬度課程號字符型10學(xué)號字符型9考試時間日期型8分?jǐn)?shù)數(shù)值型10考試地點(diǎn)字符型10及格否邏輯型1scores表結(jié)構(gòu)52、創(chuàng)建表表向?qū)П碓O(shè)計(jì)器:文件——新建——表——新建文件——輸入表名——保存——打開表設(shè)計(jì)器63、輸入表記錄在表設(shè)計(jì)器里設(shè)置完后,確定:如果選擇“是”,可以以立即方式向表中輸入數(shù)據(jù);選擇“否”則結(jié)束表結(jié)構(gòu)的建立。表的記錄可以通過記錄編輯窗口按記錄逐個字段輸入:顯示——瀏覽/編輯——追加方式74、特殊數(shù)據(jù)的輸入邏輯型字段只接受T、Y、F、N
日期型數(shù)據(jù)必須與日期格式相符,默認(rèn)為MM/DD/YY,也可自行設(shè)置:工具——選項(xiàng)——區(qū)域備注型數(shù)據(jù)的輸入:memo——Memo
通用型數(shù)據(jù)的輸入:gen——Gen8二、修改表結(jié)構(gòu)——表設(shè)計(jì)器表設(shè)計(jì)器的打開:
打開表后,顯示——表設(shè)計(jì)器
表打開后,命令窗口中輸入MODIFYSTRUCTURE修改完后,點(diǎn)擊“確定”則:94.1VFP6.0數(shù)據(jù)庫及其建立一、數(shù)據(jù)庫的組成結(jié)構(gòu)與相關(guān)資源在數(shù)據(jù)庫開發(fā)過程中還會創(chuàng)建和使用查詢、報表、表單等資源。10數(shù)據(jù)表同二維表,擁有列(字段(Field))與行(記錄)。一個字段由字段名和字段值組成,所有字段名的集合構(gòu)成了表的第一行(又稱為表頭),叫做數(shù)據(jù)表的結(jié)構(gòu)。視圖
視圖是提取數(shù)據(jù)庫記錄、更新數(shù)據(jù)庫數(shù)據(jù)的一種操作方式,是從一個或多個數(shù)據(jù)表中導(dǎo)出的“表”。它與數(shù)據(jù)表不同的是,視圖中的數(shù)據(jù)還是存儲在原來的數(shù)據(jù)表中,因此可以把它看作是一個“虛表”。視圖是不能單獨(dú)存在的,它依賴于數(shù)據(jù)表而存在,只有打開與視圖相關(guān)的數(shù)據(jù)庫才能創(chuàng)建和使用視圖。11存儲過程存儲過程類似于編程時的函數(shù),將常用的或很復(fù)雜的工作,預(yù)先用SQL語句寫好并用一個指定的名稱存儲起來,那么以后要求數(shù)據(jù)庫提供與已定義好的存儲過程的功能相同的服務(wù)時,只需調(diào)用執(zhí)行,即可自動完成命令。查詢查詢是一種相對獨(dú)立且功能強(qiáng)大、結(jié)果多樣的數(shù)據(jù)庫資源,利用查詢可以實(shí)現(xiàn)對數(shù)據(jù)庫中數(shù)據(jù)的瀏覽、篩選、排序、檢索、統(tǒng)計(jì)和加工等操作;利用查詢可以為其他數(shù)據(jù)庫提供新的數(shù)據(jù)表,可以從單個表中提取有用的數(shù)據(jù),也可以從多個表中提取綜合信息。12報表
在對數(shù)據(jù)庫進(jìn)行操作時,數(shù)據(jù)和文檔的輸出通常有兩種方式:屏幕顯示和打印機(jī)打印。報表就是用戶使用打印機(jī)輸出數(shù)據(jù)和文檔的一種實(shí)用方式。表單
在VisualFoxPro系統(tǒng)中,表單是數(shù)據(jù)庫應(yīng)用系統(tǒng)的主要工作界面,表單為數(shù)據(jù)庫信息的顯示、輸入和編輯提供了非常簡便的方式,也可以作為系統(tǒng)流程控制的窗口。13二、數(shù)據(jù)庫的創(chuàng)建在VisualFoxPro中,數(shù)據(jù)庫文件的擴(kuò)展名是.DBC。在建立數(shù)據(jù)庫時,還會自動建立一個擴(kuò)展名為.DCT的數(shù)據(jù)庫備注文件和一個擴(kuò)展名為.DCX的數(shù)據(jù)庫索引文件。這三個文件是供VisualFoxPro管理數(shù)據(jù)庫使用的,用戶不能直接使用這些文件。1、默認(rèn)目錄的設(shè)置:要求將默認(rèn)目錄設(shè)置到C盤下的學(xué)生成績數(shù)據(jù)庫2、數(shù)據(jù)庫文件的建立:在上一目錄下創(chuàng)建一數(shù)據(jù)庫“學(xué)生成績”:文件——新建——數(shù)據(jù)庫——輸入數(shù)據(jù)庫名——打開數(shù)據(jù)庫設(shè)計(jì)器也可在項(xiàng)目里創(chuàng)建數(shù)據(jù)庫14圖4-5數(shù)據(jù)庫設(shè)計(jì)器153、數(shù)據(jù)庫操作命令:1)建立數(shù)據(jù)庫:格式:CREATEDATABASE[數(shù)據(jù)庫名]說明:其中數(shù)據(jù)庫名是要創(chuàng)建的數(shù)據(jù)庫名稱,可以帶有路徑?!纠?-1】如果數(shù)據(jù)庫Test并不存在,建立該數(shù)據(jù)庫16創(chuàng)建數(shù)據(jù)庫Test之前的當(dāng)前數(shù)據(jù)庫窗口創(chuàng)建數(shù)據(jù)庫Test之后的當(dāng)前數(shù)據(jù)庫窗口注:此時系統(tǒng)將在當(dāng)前目錄下建立Test數(shù)據(jù)庫,但系統(tǒng)并不同時打開Test數(shù)據(jù)庫的數(shù)據(jù)庫設(shè)計(jì)器。當(dāng)數(shù)據(jù)庫被創(chuàng)建后,該數(shù)據(jù)就成為當(dāng)前打開的數(shù)據(jù)庫,在VisualFoxPro系統(tǒng)中,若要對數(shù)據(jù)庫進(jìn)行操作,必須先打開數(shù)據(jù)庫。172)打開數(shù)據(jù)庫:格式:OPENDATABASE[數(shù)據(jù)庫文件名|?][EXCLUSIVE][SHARED]說明:①如果這個數(shù)據(jù)庫不在當(dāng)前目錄下,那么“數(shù)據(jù)庫文件名”應(yīng)帶有路徑,如果不帶參數(shù)或者使用“?”號,則彈出“打開”對話框,提示用戶選擇要打開的數(shù)據(jù)庫。②如果帶參數(shù)EXCLUSIVE,則以獨(dú)占方式打開數(shù)據(jù)庫,其他用戶無法訪問。③如果帶參數(shù)SHARED,則以共享方式打開數(shù)據(jù)庫,允許其他用戶同時訪問18eg.opendatabasee:\vf\學(xué)生管理
opendatabasee:\xl\data\databaseTWO
setdatabasetoe:\xl\data\databaseTWO一個項(xiàng)目可以建立并打開多個數(shù)據(jù)庫,但是當(dāng)前數(shù)據(jù)庫只有一個補(bǔ)充:指定當(dāng)前數(shù)據(jù)庫setdatabaseto[數(shù)據(jù)庫名]193)修改數(shù)據(jù)庫:格式:MODIFYDATABASE[數(shù)據(jù)庫文件名|?]功能:該命令打開“數(shù)據(jù)庫設(shè)計(jì)器”窗口,以便修改數(shù)據(jù)庫中的內(nèi)容,“數(shù)據(jù)庫名”是要修改的數(shù)據(jù)庫名稱,如果使用“?”號,則彈出“打開”對話框;不帶參數(shù)時,則打開當(dāng)前數(shù)據(jù)庫的“數(shù)據(jù)庫設(shè)計(jì)器”窗口。204)關(guān)閉數(shù)據(jù)庫:格式:CLOSEDATABASES[ALL]說明:如果不帶參數(shù)ALL,則關(guān)閉當(dāng)前數(shù)據(jù)庫以及它的所有表;如果當(dāng)前沒有打開的數(shù)據(jù)庫,則關(guān)閉所有工作區(qū)中的自由表、索引和格式文件;如果帶參數(shù)ALL,則關(guān)閉所有打開的數(shù)據(jù)庫和表、索引、格式文件。21補(bǔ)充:刪除數(shù)據(jù)庫
deletedatabaseDeletedatabasee:\xl\data\databaseTWOdbc()函數(shù)作用:返回當(dāng)前數(shù)據(jù)庫的名稱和路徑返回值類型:字符型如果沒有當(dāng)前數(shù)據(jù)庫,則返回空字符串Opendatabasee:\vf\學(xué)生管理?dbc()22在VFP中,表有兩種:數(shù)據(jù)庫表和自由表區(qū)別—數(shù)據(jù)庫表與數(shù)據(jù)庫相關(guān)聯(lián);自由表不屬于任何數(shù)據(jù)庫聯(lián)系—可以相互轉(zhuǎn)換數(shù)據(jù)庫表自由表移出添加234.2建立數(shù)據(jù)庫表(.dbf)一、在數(shù)據(jù)庫中建立表數(shù)據(jù)庫表必須先打開數(shù)據(jù)庫,然后再建表(同自由表)也可將已有的自由表變?yōu)閿?shù)據(jù)庫表24數(shù)據(jù)庫表的特性:更規(guī)范的管理長表名和表中的長字段名表中字段的標(biāo)題和注釋默認(rèn)值、輸入掩碼和表中字段格式化表字段的默認(rèn)控件類字段級規(guī)則和記錄級規(guī)則支持參照完整性的主關(guān)鍵字索引和表件關(guān)系具有insert、update或delete事件的觸發(fā)器251、顯示設(shè)置顯示設(shè)置用于指定輸入和顯示字段的格式。選中相應(yīng)字段后,就可以設(shè)置該字段的顯示格式了。注意這里設(shè)置的并不是數(shù)據(jù)存儲在磁盤上的格式。顯示設(shè)置包括“格式”、“輸入掩碼”和“標(biāo)題”三項(xiàng)字段屬性。格式:設(shè)置字段顯示時的大小寫、字體大小和樣式等內(nèi)容。26格式的代碼功能用途A只允許英文字母,且不允許標(biāo)點(diǎn)符號和空格D依照目前的規(guī)定格式來編輯與顯示日期型和日期時間型數(shù)據(jù)K當(dāng)鼠標(biāo)游移至此字段時,便選取整個字段以便進(jìn)行編輯T刪除字段的前置空格與結(jié)尾空格Z如果字段的內(nèi)容為數(shù)值0,則它將顯示空白。此格式代碼只能用于數(shù)字類型字段!可輸入任何字符,但所有輸入的英文字母將被轉(zhuǎn)換成大寫。此格式代碼只能用于字符類型字段$將數(shù)值數(shù)據(jù)以貨幣格式顯示例4-527輸入掩碼:字段或控件的一種屬性,用于限制或控制用戶輸入的格式。這樣字段中的值就具有了統(tǒng)一的風(fēng)格,從而可以減少數(shù)據(jù)輸入錯誤,提高輸入效率。輸入掩碼的格式化代碼功能用途A只能輸入英文字母L只能輸入英文字母T或FN只能輸入英文字母和數(shù)字Y只能輸入英文字母Y、y、N和n9只能輸入字符數(shù)據(jù)的數(shù)字或數(shù)值數(shù)據(jù)的數(shù)字#只能輸入數(shù)字、空格、正負(fù)號和英文句點(diǎn)(.)!可輸入任何字符,但所有輸入的英文字母將被轉(zhuǎn)換成大寫。例4-628“輸入掩碼”屬性與“格式”屬性間存在著實(shí)質(zhì)性的差異,使用各種“輸入掩碼”的格式化代碼,可以完成對當(dāng)前字段值的一對一格式化控制;而格式的各類代碼所做的是對當(dāng)前字段值的全局性格式化控制。例如:設(shè)置“Student”數(shù)據(jù)表的“民族”字段,使其可以輸入任何字符,但是所有輸入的英文字母都會被轉(zhuǎn)換成大寫。利用“格式”屬性29“輸入掩碼”屬性與“格式”屬性間存在著實(shí)質(zhì)性的差異,使用各種“輸入掩碼”的格式化代碼,可以完成對當(dāng)前字段值的一對一格式化控制;而格式的各類代碼所做的是對當(dāng)前字段值的全局性格式化控制。例如:設(shè)置“Student”數(shù)據(jù)表的“民族”字段,使其可以輸入任何字符,但是所有輸入的英文字母都會被轉(zhuǎn)換成大寫。利用“輸入掩碼”屬性30標(biāo)題:它是顯示給用戶看的字段標(biāo)題。如果不設(shè)置標(biāo)題,則當(dāng)顯示數(shù)據(jù)時,VisualFoxPro自動用字段名作為標(biāo)題。標(biāo)題最長可達(dá)128個字符。312、字段注釋:可以在“字段注釋”編輯框中輸入該字段的說明文字,主要是為了方便程序員編程和書寫系統(tǒng)文檔。323、字段有效性:在字段級別對數(shù)據(jù)的約束(1)規(guī)則:是對字段內(nèi)容進(jìn)行有效性檢查,可在規(guī)則框中輸入規(guī)則表達(dá)式。如果輸入的表達(dá)式比較復(fù)雜,可以單擊文本框右端的按鈕打開生成器對話框,利用生成器輔助輸入表達(dá)式,注意:規(guī)則表達(dá)式的值必為邏輯型,因此應(yīng)該是邏輯表達(dá)式或者關(guān)系表達(dá)式。(2)信息:當(dāng)輸入的數(shù)據(jù)違反有效性規(guī)則時,顯示的錯誤提示信息。例4-9注意雙引號的使用33(3)默認(rèn)值:可以節(jié)省數(shù)據(jù)輸入人員每次都必須重新鍵入的時間。要設(shè)置字段的默認(rèn)值,請先選定字段,然后將光標(biāo)移至“默認(rèn)值”文本輸入框中,直接鍵入默認(rèn)值。注意:默認(rèn)值的類型必須與該字段的數(shù)據(jù)類型相同,并且不可以和字段的有效性規(guī)則相沖突。例4-10注意雙引號的使用34設(shè)置記錄規(guī)則——表設(shè)計(jì)器——表選項(xiàng)卡記錄有效性:檢查同一記錄中不同字段之間的邏輯關(guān)系eg.規(guī)則是:left(學(xué)號,2)=“89”andyear(入學(xué)年月)=1989
信息是:“不是89級學(xué)生”可以設(shè)置記錄的有效性規(guī)則及出錯提示信息,還可以指定記錄插入、更新及刪除規(guī)則。規(guī)則:指定記錄級有效性檢查規(guī)則,光標(biāo)離開當(dāng)前記錄時進(jìn)行校驗(yàn)。信息:指定出錯提示信息。35觸發(fā)器:指定規(guī)則eg.年齡>10and年齡<=50插入觸發(fā)器:指定插入記錄時觸發(fā)該規(guī)則,看是否滿足,如不滿足,則提示觸發(fā)器失敗信息框。如,在插入觸發(fā)器中輸入:表示向表中插入或追加記錄時,如果輸入的年齡不在指定范圍內(nèi),則當(dāng)光標(biāo)離開該記錄時會顯示觸發(fā)器失敗信息框.36eg.recno()>=3更新觸發(fā)器:指定一個規(guī)則,每次更新記錄時觸發(fā)該規(guī)則表示從第3條記錄起才符合條件,前兩條記錄不允許修改37eg.left(學(xué)號,2)#“89”刪除觸發(fā)器:指定一個規(guī)則,每次在表中刪除記錄(添加刪除標(biāo)記)時觸發(fā)該規(guī)則表示89級的學(xué)生記錄不能刪除,只能刪除非89級學(xué)生的記錄38三、使用“瀏覽”窗口操作表改變行高和列寬:拖動兩個窗口(瀏覽和編輯)顯示數(shù)據(jù):窗口拆分條改變字段的顯示順序刪除記錄:刪除標(biāo)記刪除標(biāo)記(邏輯刪除):單擊記錄左側(cè)矩形框,變成黑框,再次單擊,變?yōu)榘咨?,取消刪除標(biāo)記徹底刪除(物理刪除):加上刪除標(biāo)記后,菜單“表”—徹底刪除例4-11394.4表的基本操作與相關(guān)命令一、打開和關(guān)閉數(shù)據(jù)表命令1、打開數(shù)據(jù)表命令:USE格式:USE[[數(shù)據(jù)庫名!]表名|視圖名][IN<工作區(qū)號>|<表別名>][EXCLUSIVE]|[SHARED]功能:所謂“打開”,就是將表文件的控制信息和具體內(nèi)容讀入內(nèi)存的工作區(qū)中,以便程序或用戶訪問數(shù)據(jù)。所謂“關(guān)閉”,就是釋放文件所占用的內(nèi)存區(qū)域,將文件更新的內(nèi)容保存到外存儲器中。例4-12例4-1340工作區(qū):編號區(qū)域,標(biāo)識一個已打開的表。VisualFoxPro最多可以同時打開32767個數(shù)據(jù)表,每個打開的表都要在存儲器中開辟一個存儲區(qū)域,這個存儲區(qū)域就叫做工作區(qū)。使用數(shù)字編號如:1-10,或用字母A-J來表示,稱為工作區(qū)別名。如果命令中出現(xiàn)的工作區(qū)編號是0,表示在當(dāng)前序號最小的可用空閑工作區(qū)中打開文件。在VisualFoxPro系統(tǒng)中,可以在多個工作區(qū)中多次打開一個表文件,但一個工作區(qū)中最多只能打開一個表文件。當(dāng)打開表文件時,如果不人為指定工作區(qū),VisualFoxPro將自動選擇序號最小的可用工作區(qū)打開數(shù)據(jù)表文件。當(dāng)我們?yōu)g覽表文件時,系統(tǒng)將會自動打開表,該表將占據(jù)一個工作區(qū)。412、選擇工作區(qū):SELECT格式:SELECT[IN<工作區(qū)號>|<表別名>]功能:工作區(qū)號用于指定工作區(qū)的編號,它是一個整數(shù);表別名用于指定工作區(qū)中表的別名,它是一個字符串。說明:選擇未被占用的最小號工作區(qū)可以使用SELECT0
命令。例4-14例4-1542二、表中記錄操作命令的常用子句
1、顯示指定字段內(nèi)容子句:格式:FIELDS<字段名列表>功能:用于指定需要操作的字段。說明:關(guān)鍵字FIELDS可省略,<字段名列表>各個字段名稱之間請使用逗號分隔,此子句用于在命令中實(shí)現(xiàn)投影操作,如果缺省此子句,則操作表中除備注型、通用型字段外的所有字段。4344RECORDN表示指定僅操作第N條記錄NEXTN表示指定僅操作從當(dāng)前記錄開始的N條記錄REST表示指定操作從當(dāng)前記錄開始到表結(jié)尾的全部記錄ALL表示指定操作所有的數(shù)據(jù)記錄2、范圍子句范圍子句可以限定顯示記錄的范圍,即確定該命令涉及的記錄,該子句確定的范圍共有四種限定法方法,如表所示。缺省范圍子句時默認(rèn)范圍通常默認(rèn)為ALL,除了刪除命令DELETE和顯示記錄命令DISPLAY在缺省范圍子句時默認(rèn)范圍為當(dāng)前記錄。453、FOR子句格式:FOR<條件表達(dá)式>功能:在指定范圍內(nèi)查找符合條件的記錄,而且只有這些符合條件記錄會被命令所操作。說明:要求<條件表達(dá)式>是一個值為邏輯型的表達(dá)式。4、WHILE子句格式:WHILE<條件表達(dá)式>功能:從當(dāng)前記錄開始,逐一測試記錄是否滿足條件,命令將對包括當(dāng)前記錄在內(nèi)的一組連續(xù)的滿足條件的記錄進(jìn)行操作,表中其他記錄將不會被操作;如果當(dāng)前記錄不滿足條件,將沒有任何記錄被命令所操作。46三、顯示記錄命令以列舉的形式顯示當(dāng)前表的數(shù)據(jù)記錄LIST|DISPLAY[[FIELDS]<字段名列表>][<范圍>][FOR<條件表達(dá)式1>][WHILE<條件表達(dá)式2>]功能:在表中按指定范圍與條件篩選出記錄并顯示。LIST和DISP區(qū)別:LIST命令默認(rèn)操作范圍是所有數(shù)據(jù)記錄(即ALL),而DISPLAY命令的默認(rèn)操作范圍是當(dāng)前數(shù)據(jù)記錄(即NEXT1);DISPLAY分頁方式顯示,并提示用戶繼續(xù),而LIST滾動顯示,直到最后一行記錄在屏幕上顯示出來為止。例4-17——例4-2347命令和子句的書寫規(guī)則:(重復(fù)講一遍,重點(diǎn))(1)命令動詞與子句、子句與子句、子句的各部分(如NEXT與5,F(xiàn)OR與邏輯條件表達(dá)式)之間必須用空格隔開,但各個子句的次序允許任意排列,這對于執(zhí)行結(jié)果沒有影響。(2)命令動詞與各子句的保留字,包括函數(shù)的名字都可以簡寫為前四個字母,而且對于其中出現(xiàn)的英文字母,使用大小寫不區(qū)分。48(3)一條命令的長度可達(dá)8192個字符,若一行寫不下,可在適當(dāng)位置輸入續(xù)行符“;”并回車,然后在下一行中繼續(xù)鍵入該命令。(4)命令或函數(shù)格式中以“|”分隔開的兩項(xiàng)表示兩者之中只選其一,例如EXCLUSIVE|SHARED表示要么使用獨(dú)占方式,要么使用共享方式;用中括號“[]”括起來的部分表示可選項(xiàng);用尖括號“<>”括起來的部分表示由用戶定義的內(nèi)容,但這些符號并非命令或函數(shù)的組成部分。(5)標(biāo)點(diǎn)符號須是半角狀態(tài)。49四、刪除記錄命令邏輯刪除和物理刪除。1、為記錄加刪除標(biāo)記、執(zhí)行邏輯刪除格式:DELETE[<范圍>][FOR<條件表達(dá)式>]功能:對符合條件的記錄加刪除標(biāo)記。相當(dāng)于在“表”菜單下執(zhí)行“刪除記錄”命令。其中<范圍>子句用于指定范圍,而FOR子句用于指出須符合的條件。例4-24例4-25502、從磁盤上刪除帶有刪除標(biāo)記的記錄
格式:PACK[MEMO][DBF]功能:將那些被邏輯刪除的記錄實(shí)際移出表,MEMO子句:從和表文件同名的.FPT備注文件中刪除未使用的空間,但不從表中刪除帶有刪除標(biāo)記的記錄;DBF子句,則從表中刪除所有帶刪除標(biāo)記的記錄,但不影響備注文件。相當(dāng)于執(zhí)行“表”菜單下的“徹底刪除”命令。513、取消帶有刪除標(biāo)記的記錄:恢復(fù)被DELETE命令標(biāo)示成刪除狀態(tài)的記錄。格式:RECALL[<范圍>][FOR<條件表達(dá)式>]功能:對當(dāng)前表在指定范圍內(nèi)滿足FOR條件子句的記錄去掉刪除標(biāo)記,若各子句都缺省,則只恢復(fù)當(dāng)前記錄。說明:RECALL命令必須在還沒有對表使用PACK命令以前執(zhí)行,否則那些被標(biāo)示為刪除的記錄早已被實(shí)際移出表外。例4-26524、徹底刪除表中所有記錄ZAP命令可一次性將當(dāng)前表中所有記錄徹底刪除。數(shù)據(jù)記錄雖然被刪除了,但數(shù)據(jù)表的結(jié)構(gòu)仍完整地存在。相當(dāng)于DELETEALL和PACK聯(lián)用,因此一定要謹(jǐn)慎使用。53五、修改記錄的命令:REPLACE格式:REPLACE<字段名1>WITH<表達(dá)式1>[,<字段名2>WITH<表達(dá)式2>]...[<范圍>][FOR<條件表達(dá)式>]功能:指定用表達(dá)式的值代替字段中的數(shù)據(jù)。當(dāng)然在多數(shù)程序中,REPLACE只用于對一個字段進(jìn)行修改。FOR子句用于指出表中哪些記錄將被修改,<范圍>則指出命令修改記錄的操作范圍。說明:需要注意的是,這里的默認(rèn)范圍是當(dāng)前記錄。例4-27例4-2854六、查詢定位命令與相關(guān)函數(shù)記錄號、記錄指針(移動)和當(dāng)前記錄(使用USE命令打開表以后,記錄指針指向第一條記錄)。1、GO|GOTO命令:絕對移動記錄指針格式1:GO|GOTO<數(shù)值表達(dá)式>格式2:GOTOP|BOTTOM2、RECNO()函數(shù):測試當(dāng)前記錄的記錄號例4-29553、SKIP命令:相對移動記錄指針格式:SKIP<數(shù)值表達(dá)式>功能:正數(shù):向下移動;負(fù)數(shù):向上移動;缺省時默認(rèn)值為1。564、函數(shù)BOF()確定記錄指針是否已經(jīng)到文件頭,其返回值為邏輯型數(shù)據(jù)。575、函數(shù)EOF()確定記錄指針是否已經(jīng)到文件尾,其返回值為邏輯型數(shù)據(jù)。586、條件定位命令格式:LOCATE[<范圍>]FOR[<條件表達(dá)式>]功能:在當(dāng)前表中指定<范圍>內(nèi),查找表中滿足“條件表達(dá)式”的第一條記錄,并將其設(shè)置為當(dāng)前記錄;若表中無此記錄,搜索后VisualFoxPro主屏幕的狀態(tài)條中將顯示“已到定位范圍末尾”,此時記錄指針指向文件尾位置。缺省范圍為全部記錄。按搜索條件順序查找當(dāng)前表的命令LOCATE
命令,經(jīng)常和CONTINUE命令、FOUND()函數(shù)結(jié)合使用。597、FOUND()函數(shù)格式:FOUND([<工作區(qū)號>])功能:用于判斷最近一次執(zhí)行LOCATE、CONTINUE、FIND或SEEK命令的執(zhí)行結(jié)果。查找成功則返回邏輯真值,查找失敗則返回邏輯假值。8、CONTINUE命令當(dāng)數(shù)據(jù)表中存在多個滿足條件的記錄時,我們首先使用LOCATE查找到第一條符合查找條件的記錄,然后使用CONTINUE命令逐次找出后面的記錄。CONTINUE命令第一次執(zhí)行將查找到第二條符合查找條件的記錄,例4-326061七、復(fù)制表命令1、COPY命令:復(fù)制數(shù)據(jù)表文件格式:COPY[STRUCTURE]TO<新建文件全名>FIELDS<字段名表>[<范圍>][FOR<條件表達(dá)式>]功能:導(dǎo)出當(dāng)前表中的數(shù)據(jù)到一個新表或其他類型的文件中,假如命令包含關(guān)鍵字STRU則只復(fù)制數(shù)據(jù)表的結(jié)構(gòu),當(dāng)使用FOR子句時表中滿足邏輯表達(dá)式條件的部分記錄會被復(fù)制。對于含有備注型字段的表,系統(tǒng)在復(fù)制擴(kuò)展名為DBF的文件的同時會自動復(fù)制擴(kuò)展名為FPT的文件。例4-33例4-34例4-35622、COPYFILE命令:復(fù)制任何文件格式:COPYFILE<文件名1>TO<文件名2>功能:從<文件名1>文件復(fù)制到<文件名2>文件;如果是對數(shù)據(jù)表進(jìn)行復(fù)制,那么該數(shù)據(jù)表必須處于關(guān)閉狀態(tài);<文件名1>和<文件名2>都可以使用通配符*號和?號。例4-3663八、追加記錄的命令1、APPEND命令格式:APPEND[BLANK][IN<工作區(qū)號>]功能:在當(dāng)前表的尾部添加一條或多條記錄。如果使用BLANK子句,表示在表的最后添加一個空記錄,此時并不會自動打開編輯或?yàn)g覽窗口;不加此子句則會自動打開編輯或?yàn)g覽窗口,并且窗口內(nèi)會有空白的記錄位置,使用戶可以編輯新增記錄。642、APPENDFROM命令從各種格式的數(shù)據(jù)文件(包括其他數(shù)據(jù)處理軟件的文件)中讀取數(shù)據(jù),并追加到當(dāng)前表中。格式:APPENDFROM<數(shù)據(jù)文件名>[FIELDS<字段名表>][FOR[<條件表達(dá)式>]]功能:將其它文件的內(nèi)容追加到當(dāng)前表的尾部,其中“數(shù)據(jù)文件名”用于指定要讀取數(shù)據(jù)的文件名,默認(rèn)擴(kuò)展名是.DBF,如果要追加的數(shù)據(jù)文件的擴(kuò)展名不是.DBF,則源文件必須包括擴(kuò)展名。例4-3765九、數(shù)據(jù)統(tǒng)計(jì)命令1、COUNT命令格式:COUNT[<范圍>][FOR<條件表達(dá)式1>][WHILE<條件表達(dá)式2>][TO<變量名>]功能:計(jì)算指定范圍內(nèi)滿足條件的記錄個數(shù),<范圍>子句用于指出范圍,默認(rèn)范圍時是指表中的全部記錄;而FOR子句則用于指出條件;若使用了TO子句,則還可以將記錄數(shù)存儲在內(nèi)存變量中,便于以后引用,如果指定的變量不存在,系統(tǒng)會自動創(chuàng)建它。例4-38662、SUM命令格式:SUM[<數(shù)值型字段名表>][<范圍>][FOR<條件表達(dá)式1>][WHILE<條件表達(dá)式2>][TO<變量名>]功能:<數(shù)值型字段名表>用于指定數(shù)據(jù)表的一個或多個數(shù)值型字段或數(shù)值型表達(dá)式對其求和值。如果省略它,則對選定表的所有數(shù)值型字段分別求和。TO<變量名>將求得的和保存在變量列表中,如果指定的變量不存在,系統(tǒng)會自動創(chuàng)建它。例4-39673、AVERAGE命令格式:AVERAGE[<數(shù)值型字段名表>][<范圍>][FOR<條件表達(dá)式1>][WHILE<條件表達(dá)式2>][TO<變量名>]功能:<數(shù)值型字段名表>用于指定數(shù)據(jù)表的一個或多個數(shù)值型字段或數(shù)值型表達(dá)式對其求平均值。如果省略它,則對選定表的所有數(shù)值型字段分別求和。TO<變量名>將求得的和保存在變量列表中,如果指定的變量不存在,系統(tǒng)會自動創(chuàng)建它。例4-40684、匯總命令格式:TOTALTO<表名>ON<關(guān)鍵字段名>[FIELDS<數(shù)值型字段列表>][<范圍>][FOR<條件表達(dá)式1>][WHILE<條件表達(dá)式2>]功能:在當(dāng)前表中,分別對關(guān)鍵字段的值相同且相鄰的記錄,按<數(shù)值型字段列表>中的各表達(dá)式的值進(jìn)行求和,并將結(jié)果存儲到一個新表中,<表名>用于指出新的表文件的名字,而ON<關(guān)鍵字段名>用于指出哪個字段作分組關(guān)鍵字段。例4-4169排序:根據(jù)表中某些字段的值重新排列記錄,排序后生成一個新表,原表不變SORTTO
新文件名ON
字段名1[/A][/D][/C][,字段名2[/A][/D][/C]…][范圍][FOR|WHILE條件][FIELDS字段名表]注意:
ON后的字段名不能是備注型或通用型的
/A升序(默認(rèn)),/D降序,/C表示不區(qū)分字母的大小寫4.5排序與索引70UsestudentListSorttostudent1on專業(yè),學(xué)號
FIELDS學(xué)號,姓名,性別,專業(yè)USEstudent1LIST例:對student.dbf按專業(yè)升序排序,當(dāng)專業(yè)相同時,則按學(xué)號升序排序,新表student1.dbf中只包含學(xué)號,姓名,性別和專業(yè)4個字段。71物理順序:表中記錄的存儲順序,用記錄號表示。邏輯順序:表打開后被使用時記錄的處理順序。排序后,生成的新表的物理順序改變;索引則不改變物理順序,按索引關(guān)鍵字建立記錄的邏輯順序,生成索引文件中只包含關(guān)鍵字和記錄號,而且當(dāng)索引文件打開時,增加刪除原表中的記錄或修改關(guān)鍵字,索引文件會自動更新比原表小,占空間比原表小的多索引72一、索引與索引文件的概念與分類1、索引的分類
主索引(PrimaryIndex)不允許出現(xiàn)NULL值和重復(fù)值的索引。在數(shù)據(jù)庫表中,每張表只能創(chuàng)建一個主索引,而自由表不能創(chuàng)建主索引,主索引只能保存在數(shù)據(jù)庫表的結(jié)構(gòu)復(fù)合索引中。
候選索引(CandidateIndex)可用作主關(guān)鍵字的索引,不允許有重復(fù)值的索引。即主索引的“候選項(xiàng)”。候選索引可用于數(shù)據(jù)庫表和自由表,并且一張表中可以建立多個候選索引。73
唯一索引(UniqueIndex)允許出現(xiàn)重復(fù)值,但索引文件入口值是唯一的,盡量少使用唯一索引。
普通索引(RegularIndex)允許重復(fù),即在普通索引上查找的記錄不具有唯一性。對一張數(shù)據(jù)表可以創(chuàng)建多個普通索引。742、索引文件的分類索引本身并不改變數(shù)據(jù)的物理順序,只是把索引保存到另一個文件中,這一文件就是索引文件。
結(jié)構(gòu)復(fù)合索引文件(StructuralCompoundIndexFile)結(jié)構(gòu)復(fù)合索引將一張表的一個或多個索引的索引信息存儲在一個索引文件中,且索引文件的主文件名與數(shù)據(jù)表名相同,擴(kuò)展名為.CDX。結(jié)構(gòu)復(fù)合索引文件自動與數(shù)據(jù)表文件同步打開和關(guān)閉,并且在表修改時可以進(jìn)行自動更新。75
非結(jié)構(gòu)復(fù)合索引文件(CompoundIndex)非結(jié)構(gòu)復(fù)合索引文件將一張表的一個或多個索引的索引信息存儲在一個索引文件中,擴(kuò)展名為.CDX,但其文件名與表名不同,且不會自動隨表的打開而打開,只有用打開索引文件命令將其打開,才能起作用。
獨(dú)立索引文件(IndependentIndexFile)單索引文件包含一個索引入口的索引文件,它只存儲一個索引,一般作為臨時索引文件,其擴(kuò)展名為“.IDX”。獨(dú)立索引文件不會隨表的打開自動打開。76索引文件存放哪些索引?結(jié)構(gòu)復(fù)合索引文件:表的主索引和候選索引必須存放在其中,同時將索引的屬性存儲在數(shù)據(jù)庫中。因?yàn)檫@兩種索引必須和表同時打開。唯一索引和普通索引可以存儲在這兩種索引文件之中。77二、索引的創(chuàng)建1、在表設(shè)計(jì)器中建立索引例4-42、4-43782、用命令建立索引建立主索引和候選索引:SQL語言中的CREATETABLE和ALTERTABLE命令建立除主索引之外的各種類型的索引:用INDEX命令創(chuàng)建字段表達(dá)式索引。格式:INDEXON<索引表達(dá)式>[TO<獨(dú)立索引文件>|TAG<索引標(biāo)識>[OF<復(fù)合索引文件>]][FOR<條件表達(dá)式1>][ASCENDING|DESCENDING][UNIQUE|CANDIDATE]例4-44、4-4579三、打開與設(shè)置索引要利用索引查詢,必須同時打開表和索引文件。一個表可以打開多個索引文件,同一個復(fù)合索引文件也可能包含多個索引標(biāo)識,但任何時候只能有一個索引文件能起作用,在復(fù)合索引文件中也只有一個索引標(biāo)識能起作用。當(dāng)前起作用的索引文件稱為主控索引文件,當(dāng)前起作用的索引標(biāo)識稱為主控索引。實(shí)現(xiàn)索引查詢必須滿足以下條件:打開表;打開索引文件;確定主控索引文件或確定復(fù)合索引文件的主控索引。801、打開索引文件
若當(dāng)前數(shù)據(jù)表僅有一個獨(dú)立索引文件打開,它就成為主控索引文件,此外使用命令剛建立索引時,索引文件呈打開狀態(tài)且會成為主控索引文件。需要注意的是,結(jié)構(gòu)復(fù)合索引總是隨數(shù)據(jù)表的打開而被打開,其他索引文件必須使用命令顯式打開。(1)與數(shù)據(jù)表同時打開格式:USE<數(shù)據(jù)表名>INDEX<索引文件名>例4-4681(2)使用SETINDEX命令打開索引SETINDEX命令可以用于打開當(dāng)前表的索引,可以同時打開多個索引。格式:SETINDEXTO<索引文件列表>[ORDER<獨(dú)立索引文件>|TAG<索引標(biāo)識>[OF<復(fù)合索引文件名>]]例4-47822、設(shè)置主控索引由于在復(fù)合索引的多個索引中,在某一時刻只有一個索引對表起作用,這個索引標(biāo)志稱為主控索引。格式:SETORDERTO[TAG]<索引標(biāo)識>[OF<復(fù)合索引文件名>]說明:[TAG]<索引標(biāo)識>[OF<復(fù)合索引文件名>]用于指定.CDX文件中的一個索引標(biāo)識為主控索引標(biāo)識。標(biāo)識名可以來自任何打開的.CDX文件。如果在各打開的.CDX中存在相同的索引標(biāo)識,則需使用[OF<復(fù)合索引文件名>]來指定包含此標(biāo)識的.CDX文件。例4-4883四、索引查詢命令
與順序查詢比較:順序查詢速度較慢,只適用于記錄較少的表。索引查詢速度很快,但其算法要求表的記錄是有序的,這就需要事先對表進(jìn)行索引。84格式:SEEK<表達(dá)式>[ORDERTAG<索引標(biāo)識>[OF<復(fù)合索引文件>]][IN<工作區(qū)號>|<表別名>]說明:①<表達(dá)式>用于指定搜索的索引關(guān)鍵字。②ORDERTAG<索引標(biāo)識>[OF<復(fù)合索引文件>]用于指定搜索關(guān)鍵字的索引文件或索引標(biāo)識。例4-4985
SEEK命令只能對有索引的數(shù)據(jù)表進(jìn)行查詢,并且只能搜索索引關(guān)鍵字。匹配的結(jié)果受SETEXACT設(shè)置的影響。如果找到了符合條件的記錄,則RECNO()函數(shù)將返回匹配記錄的記錄號,F(xiàn)OUND()函數(shù)將返回真,EOF()函數(shù)返回假;如果沒有找到了符合條件的記錄,則RECNO()函數(shù)將返回表中記錄的個數(shù)加1,F(xiàn)OUND()函數(shù)將返回假,EOF()函數(shù)返回真。864.6數(shù)據(jù)完整性與表間永久性關(guān)系定義:數(shù)據(jù)完整性是數(shù)據(jù)的準(zhǔn)確性和一致性的測度,它是為防止數(shù)據(jù)庫中存在不符合語義規(guī)定的數(shù)據(jù)和防止因錯誤信息的輸入輸出造成無效操作或錯誤信息而提出的。分類:實(shí)體完整性(EntityIntegrity)、域完整性(DomainIntegrity)、參照完整性(ReferentialIntegrity)、用戶自定義的完整性。87一、實(shí)體完整性與關(guān)鍵字
實(shí)體完整性約束要求關(guān)系的主鍵中屬性值不能為空,這是數(shù)據(jù)庫完整性的最基本要求,因?yàn)橹麈I是惟一決定元組的,如為空則其惟一性就成為不可能的了。在VisualFoxPro系統(tǒng)中,即是要求一個數(shù)據(jù)表中不允許出現(xiàn)重復(fù)記錄,因此,一個數(shù)據(jù)表應(yīng)該至少有一個關(guān)鍵字,主索引和候選索引都可以擔(dān)當(dāng)關(guān)鍵字。二、域完整性與約束規(guī)則域完整性是指對屬性的取值范圍作出的要求。在建立表時,各字段的數(shù)據(jù)類型的設(shè)置就屬于域完整性的范疇。在表設(shè)計(jì)器中為數(shù)據(jù)表的字段設(shè)置的有效性規(guī)則,也就是一種域完整性約束規(guī)則。88三、參照完整性1、表間永久性關(guān)系(1)表之間的關(guān)系一對一、一對多和多對多三種關(guān)系。(2)建立關(guān)系永久關(guān)系:在數(shù)據(jù)庫中建立的表與表之間的關(guān)系,將作為數(shù)據(jù)庫的組成部分而被永久保存。在“數(shù)據(jù)庫設(shè)計(jì)器”中,選擇主表中想要關(guān)聯(lián)的索引名,然后把它拖到相關(guān)表匹配的索引名上即可。前提:必須在父表中建立主索引或候選索引例4-5089(3)刪除關(guān)系90(4)編輯關(guān)系在“編輯關(guān)系”對話框中有兩個下拉列表,分別列出了兩個表的索引,可以在其中選擇合適的索引,VisualFoxPro會自動判斷索引的類型,建立“一對一”或“一對多”的關(guān)系。其中,在父表的下拉列表中,僅列出主索引和候選索引;而在子表的下拉列表中,則會列出各種索引。912、參照完整性規(guī)則及其設(shè)置(1)概念參照完整性(ReferentialIntegrity,RI)是指在永久關(guān)系的基礎(chǔ)上可設(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)田路養(yǎng)護(hù)合同范本
- 農(nóng)村自建住宅買賣合同范本
- 制造業(yè)勞動合同范本
- 保管勞動合同范本
- 4購車訂單合同范本
- 介紹客戶業(yè)務(wù)合同范本
- 農(nóng)場土地交換合同范本
- 上海用工勞動合同范本
- 勞工簽單協(xié)議合同范本
- 保潔安全服務(wù)合同范本
- 智聯(lián)招聘行測題庫2023
- 小工考勤表記工模板
- 【英語詞匯】閩教版(三起點(diǎn))小學(xué)英語單詞默寫表(帶音標(biāo)按順序)(全8冊)
- 編輯學(xué)概論-課件
- 理發(fā)店個人門面轉(zhuǎn)讓合同
- 03J111-1 輕鋼龍骨內(nèi)隔墻
- 資產(chǎn)負(fù)債表模板范本
- 中國城市人口排名表
- 基于技術(shù)互補(bǔ)性的潛在技術(shù)合作伙伴選擇研究
- 人教版高中數(shù)學(xué)選擇性必修二導(dǎo)學(xué)案
- 牛津深圳版八年級下冊英語Unit 1-Unit 8各單元作文范文(實(shí)用)
評論
0/150
提交評論