第3章 Visual FoxPro數(shù)據(jù)庫(kù)及其操作_第1頁(yè)
第3章 Visual FoxPro數(shù)據(jù)庫(kù)及其操作_第2頁(yè)
第3章 Visual FoxPro數(shù)據(jù)庫(kù)及其操作_第3頁(yè)
第3章 Visual FoxPro數(shù)據(jù)庫(kù)及其操作_第4頁(yè)
第3章 Visual FoxPro數(shù)據(jù)庫(kù)及其操作_第5頁(yè)
已閱讀5頁(yè),還剩82頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第3章VisualFoxPro數(shù)據(jù)庫(kù)及其操作13.1工程文件、數(shù)據(jù)庫(kù)的建立3.2建立數(shù)據(jù)表(2學(xué)時(shí))3.3表的根本操作(4學(xué)時(shí))3.4索引(2學(xué)時(shí))3.5數(shù)據(jù)完整性3.6自由表3.7多個(gè)表同時(shí)使用(2學(xué)時(shí))本章主要內(nèi)容及課時(shí)安排〔10學(xué)時(shí)〕VisualFoxPro工程文件的建立在建立了工程文件〔.pjx〕的同時(shí),系統(tǒng)還自動(dòng)生成了同名的工程備注文件〔.pjt〕工程管理器數(shù)據(jù)庫(kù)自由表查詢(xún)視圖表單報(bào)表程序菜單數(shù)據(jù)選項(xiàng)卡:數(shù)據(jù)庫(kù)、自由表、查詢(xún)和視圖。文檔選項(xiàng)卡:表單、報(bào)表等。代碼選項(xiàng)卡:程序等。其他選項(xiàng)卡:文本文件、菜單等。3.1VisualFoxPro數(shù)據(jù)庫(kù)及其建立VisualFoxPro系統(tǒng)提供了多種創(chuàng)立數(shù)據(jù)庫(kù)的方法?!?〕在工程管理器中建立數(shù)據(jù)庫(kù);〔2〕通過(guò)“新建〞對(duì)話框建立數(shù)據(jù)庫(kù);〔3〕使用交互命令建立數(shù)據(jù)庫(kù)。CREATDATA<數(shù)據(jù)庫(kù)名>例:〔1〕在“學(xué)生管理信息系統(tǒng)〞工程管理器中,建立一個(gè)“學(xué)生管理〞數(shù)據(jù)庫(kù)?!?〕再建一個(gè)“圖書(shū)管理〞數(shù)據(jù)庫(kù)。在建立了數(shù)據(jù)庫(kù)文件〔.dbc〕的同時(shí),系統(tǒng)還自動(dòng)生成了同名數(shù)據(jù)庫(kù)備注文件〔.dct〕和數(shù)據(jù)庫(kù)索引文件〔.dcx〕。◆創(chuàng)立數(shù)據(jù)庫(kù):CREATDATABASE<數(shù)據(jù)庫(kù)名>◆翻開(kāi)數(shù)據(jù)庫(kù):OPENDATABASE<數(shù)據(jù)庫(kù)名>◆更改數(shù)據(jù)庫(kù):MODIFYDATABASE<數(shù)據(jù)庫(kù)名>◆刪除數(shù)據(jù)庫(kù):DROP/DELEDATABASE<數(shù)據(jù)庫(kù)名>◆關(guān)閉數(shù)據(jù)庫(kù):CLOSDATABASEALL

3.2建立數(shù)據(jù)表數(shù)據(jù)庫(kù)表和自由表的擴(kuò)展名均為.DBF。例:在“學(xué)生管理〞數(shù)據(jù)庫(kù)中建立一個(gè)“學(xué)生根本情況〞表1.創(chuàng)立數(shù)據(jù)庫(kù)表或自由表VisualFoxPro系統(tǒng)提供了多種創(chuàng)立數(shù)據(jù)庫(kù)表或自由表的方法?!?〕在工程管理器中建立數(shù)據(jù)庫(kù)表或自由表?!?〕在數(shù)據(jù)庫(kù)設(shè)計(jì)器中建立數(shù)據(jù)庫(kù)表。〔3〕使用新建對(duì)話框建立數(shù)據(jù)表。〔4〕使用交互命令建立數(shù)據(jù)庫(kù)表〔數(shù)據(jù)庫(kù)翻開(kāi)的情況下〕或自由表。CREAT<數(shù)據(jù)表名>在“表設(shè)計(jì)器〞中,可以對(duì)表結(jié)構(gòu)進(jìn)行修改:增加、刪除字段、修改字段名、字段類(lèi)型、字段的寬度,可以建立、修改、刪除索引,還可以建立、修改、刪除有效性規(guī)那么等。〔1〕在系統(tǒng)菜單“顯示〞菜單項(xiàng)下,選擇“表設(shè)計(jì)器〞選項(xiàng)。〔2〕在數(shù)據(jù)庫(kù)設(shè)計(jì)器中的“數(shù)據(jù)庫(kù)設(shè)計(jì)器〞工具欄中,選擇“修改表〞命令按鈕?!?〕選擇要操作的表,單擊右鍵,在快捷菜單中選定“修改〞選項(xiàng)?!?〕交互命令:MODIFYSTRUCTURE翻開(kāi)“表設(shè)計(jì)器〞在“表設(shè)計(jì)器〞中的設(shè)計(jì)一個(gè)數(shù)據(jù)庫(kù)表數(shù)據(jù)庫(kù)設(shè)計(jì)器工具欄添加表修改表新建表移去表瀏覽表“數(shù)據(jù)庫(kù)設(shè)計(jì)器〞對(duì)話框在“表設(shè)計(jì)器〞中的設(shè)計(jì)一個(gè)自由表3.輸入表記錄翻開(kāi)表,使用追加數(shù)據(jù)命令A(yù)PPEND或窗口瀏覽命令BROWSE實(shí)現(xiàn)數(shù)據(jù)的輸入。(編輯命令)4.數(shù)據(jù)表的翻開(kāi)與關(guān)閉翻開(kāi)數(shù)據(jù)表USE<文件名>[EXCLUSIVE][SHARED]關(guān)閉當(dāng)前數(shù)據(jù)表USE關(guān)閉所有表CLOSEDATA關(guān)閉所有文件CLOSEALL關(guān)閉所有文件及去除所有內(nèi)存變量CLEARALL獨(dú)占方式共享方式**關(guān)于備注型、通用型字段:①數(shù)據(jù)表文件的備注文件(.FPT)的建立:當(dāng)數(shù)據(jù)表含有M(G)型字段時(shí),系統(tǒng)將自動(dòng)產(chǎn)生一個(gè)同名的備注文件,該文件記錄備注信息,而數(shù)據(jù)表中M(G)字段僅僅是指向備注文件的指針(4個(gè)字節(jié))。問(wèn)題1:每個(gè)數(shù)據(jù)表都有相應(yīng)的備注文件,對(duì)嗎?問(wèn)題2:假設(shè)數(shù)據(jù)表中有兩個(gè)或兩個(gè)以上M(G)型字段的話,那么會(huì)有幾個(gè)備注文件呢?②備注字段的輸入:略③備注字段的顯示:LIST|DISP<備注字段名>在瀏覽器中雙擊記錄備注字段,在彈出備注字段的編輯窗口中輸入相應(yīng)的文字即可。在瀏覽器中雙擊記錄的通用字段,在彈出的通用字段的窗口中,選擇“編輯〞菜單中的“插入對(duì)象〞菜單項(xiàng)。在“插入對(duì)象〞對(duì)話框中“對(duì)象類(lèi)型〞列表框中,選擇“圖片〞,在“圖片〞編輯窗口,插入選定的照片即可。備注字段、通用字段中的數(shù)據(jù)編輯“學(xué)生根本情況.dbf〞數(shù)據(jù)表“學(xué)生成績(jī).dbf〞數(shù)據(jù)表

3.3表的根本操作翻開(kāi)“瀏覽器〞在瀏覽器中,可以實(shí)現(xiàn)對(duì)數(shù)據(jù)表的瀏覽、修改記錄、追加記錄〔Ctrl+Y〕和刪除記錄〔Ctrl+T〕等操作?!?〕在“數(shù)據(jù)庫(kù)設(shè)計(jì)器〞中直接雙擊要操作的表,便翻開(kāi)了瀏覽器。〔2〕選擇要操作的表,使用“顯示〞菜單中“瀏覽〞選項(xiàng)?!?〕選擇表,單擊“數(shù)據(jù)庫(kù)設(shè)計(jì)器工具欄〞中的“瀏覽〞按鈕?!?〕選擇表,單擊右鍵,在快捷菜單中選定“瀏覽〞選項(xiàng)?!?〕交互命令:BROWSE在瀏覽器中,可以實(shí)現(xiàn)對(duì)數(shù)據(jù)表的瀏覽、修改記錄、追加記錄〔Ctrl+Y〕和刪除記錄〔Ctrl+T〕等操作。BROWSE瀏覽器界面添加的空白記錄刪除標(biāo)記增加記錄的命令1.追加新記錄(在表尾部追加新記錄或空白記錄)

APPEND[BLANK]2.插入新記錄(以當(dāng)前記錄為基準(zhǔn)插入新記錄或空白記錄)

INSERT[BEFORE][BLANK]例:在某個(gè)數(shù)據(jù)表最后一條記錄的前后各加一條空白記錄。

GOBOTTOMA)INSEBLANKB)APPEBLANKAPPEBLANKINSEBEFOBLANKC)INSEBEFOBLANKD)INSEBEFOBLANKAPPEBLANKINSEBLANK

VFP命令常用子句:

<范圍>、FOR<條件>、FIELDS<字段名表>3.3.5顯示記錄的命令

LIST|DISP[范圍][FOR<條件>][[FIELDS]<字段名表>][TOPRINT|TOFILE<文件名>][OFF]LIST命令以滾動(dòng)方式顯示,而DISPLAY那么為分屏顯示。在缺省[范圍]子句和[FOR<條件>]子句時(shí),LIST命令顯示所有記錄;而DISPLAY命令僅顯示當(dāng)前記錄。1.范圍子句:

ALL、NEXTn、REST、RECORDn

ALL是指所有記錄;

NEXTn是指從當(dāng)前記錄(包括當(dāng)前記錄)開(kāi)始的n條記錄;

REST是指從當(dāng)前記錄(包括當(dāng)前記錄)開(kāi)始到文件尾所有記錄。

2.FOR子句

FOR<條件>子句是在指定的[范圍]內(nèi)篩選出滿(mǎn)足條件的全部記錄;如果有FOR子句,缺省的范圍是ALL。3.FIELDS子句范圍、FOR子句都能將表中需要操作的記錄篩選出來(lái),F(xiàn)IELDS子句那么能確定需要操作的字段。例:執(zhí)行LISTNEXT1命令后,記錄指針的位置指向A)下一條記錄B)原記錄C)首記錄D)末記錄例:在“考試.dbf〞數(shù)據(jù)表中,顯示所有筆試、機(jī)試成績(jī)均大于80分的考生姓名,年齡,筆試成績(jī)、機(jī)試成績(jī)。

DISPFORBS>=80ANDJS>=80XM,NL,BS,JS刪除記錄的命令1.邏輯刪除DELETE[范圍][FOR<條件>]2.恢復(fù)刪除RECALL[范圍][FOR<條件>]3.物理刪除:1〕物理刪除所有帶標(biāo)記的記錄PACK2〕物理刪除所有記錄ZAP4.隱藏邏輯刪除記錄SETDELEON|OFF(常態(tài)為OFF)將此開(kāi)關(guān)設(shè)置為ON狀態(tài)時(shí),VFP中的一些命令將不考慮打上了刪除標(biāo)記的記錄。如:LIST、DISPLAY、BROWSE、COPY、COUNT、SUM、REPLACE、SORT等。例:考試表有100條記錄。use考試setdeleteoncounttoago3deletecounttob?a,b,reccount()&&統(tǒng)計(jì)當(dāng)前表的記錄數(shù)命令&&reccount()測(cè)試當(dāng)前表的物理記錄數(shù)函數(shù),與delete狀態(tài)無(wú)關(guān)。

A)10010099B)1009999C)10099100D)9999100

修改記錄的命令編輯修改命令EDIT|CHANGE[FIELD<字段名表>][<范圍>][FOR<條件>][WHILE<條件>]2.窗口瀏覽修改命令

BROWSE[FIELD<字段名表>][FOR<條件>]…

該命令集瀏覽、修改、追加記錄(^Y)、刪除記錄(^T)及恢復(fù)刪除(^T)等多種功能。3.替換修改命令REPLACE[范圍]<字段名1>WITH<exp1>[,<字段名2>WITH<exp2>,...][FOR<條件>]該命令假設(shè)<范圍>與<條件>選項(xiàng)都缺省,僅對(duì)當(dāng)前記錄替換。例:將“工資.dbf〞表中,工齡≥30年的職工根本工資增加60元,20≤工齡<30年,增加40元,10≤工齡<20年,增加30元,工齡<10年的職工加20元,并重新計(jì)算所有的實(shí)發(fā)工資。use工資(zgh,xm,gzrq,jbgz,gwgz,jt,yfgz,sds,sdf,sfgz)y1=year(date())repljbgzwithjbgz+60for(y1-year(gzrq))>=30repljbgzwithjbgz+40for(y1-year(gzrq))>=20;.and.(y1-year(gzrq))<30……replallyfgzwithjbgz+gwgz+jt,sfgzwithyfgz-sds-shdf

3.3.6記錄指針的定位1.絕對(duì)定位

GOTOP|GOBOTT|GON命令功能是將記錄指針直接定位到指定的記錄。一個(gè)數(shù)據(jù)表被翻開(kāi)后,系統(tǒng)自動(dòng)地為該數(shù)據(jù)表設(shè)置一個(gè)記錄指針,指針用來(lái)存放一個(gè)記錄號(hào),表示指針?biāo)赶虻挠涗?,該記錄稱(chēng)為當(dāng)前記錄。記錄定位操作就是移動(dòng)記錄指針到數(shù)據(jù)庫(kù)表的指定的記錄上。2.相對(duì)定位SKIP±N命令功能是以當(dāng)前記錄位置為基準(zhǔn),將記錄指針向前或向后移動(dòng),指針移動(dòng)記錄個(gè)數(shù)由數(shù)值N來(lái)確定。N是正整數(shù),那么向表尾方向移動(dòng);N是負(fù)整數(shù),那么向表頭方向移動(dòng);默認(rèn)數(shù)值是1,那么向表尾方向移動(dòng)一個(gè)記錄。3.條件定位

LOCATE[<范圍>]FOR[<條件表達(dá)式>]CONTINUE

命令功能是將記錄指針定位在指定范圍內(nèi)滿(mǎn)足條件的第一條記錄上,如果沒(méi)有滿(mǎn)足條件的記錄那么指針指向文件結(jié)束位置。如果缺省范圍,指所有記錄。指針定位成功后,如果要使指針指向下一條滿(mǎn)足條件的記錄,應(yīng)使用CONTINUE命令。

為了判別LOCATE或CONTINUE命令是否找到了滿(mǎn)足條件的記錄,可以使用函數(shù)FOUN〔〕,如果有滿(mǎn)足條件的記錄,該函數(shù)返回真(.T.),否那么返回假(.F.)。4.與記錄定位相關(guān)的系統(tǒng)測(cè)試函數(shù)〔1〕表文件尾測(cè)試函數(shù):EOF([<數(shù)據(jù)庫(kù)表名>])〔2〕表文件首測(cè)試函數(shù):BOF([<數(shù)據(jù)庫(kù)表名>])〔3〕記錄號(hào)測(cè)試函數(shù):RECNO([<數(shù)據(jù)庫(kù)表名>])〔4〕記錄個(gè)數(shù)測(cè)試函數(shù):RECCOUNT([<數(shù)據(jù)庫(kù)表名>])〔5〕記錄刪除測(cè)試函數(shù):DELETED([<數(shù)據(jù)庫(kù)表名>])〔6〕記錄檢索測(cè)試函數(shù):FOUND([<數(shù)據(jù)庫(kù)表名>])

usexsjl?reccount()&&有20條記錄,函數(shù)值為20?bof(),recno()gobottom?recno(),eof()skip?recno(),eof()gotopdisp

?recno(),bof()skip-1

?recno(),bof()list?recno(),eof()gotoplistnext5?recno(),eof()文件尾EOF()末記錄BOTTOMTOP

首記錄.....

.....

.....

.

.

.

.

.文件頭BOF()例:翻開(kāi)一個(gè)空數(shù)據(jù)表,分別用函數(shù)EOF()和BOF()測(cè)試,其結(jié)果一定是:A).T.和.T.B).F.和.F.C).T.和.F.D).F.和.T.例:下面哪一組中的兩個(gè)命令是等效的:(假設(shè)當(dāng)前記錄為第一條)A)

LOCAFORRECNO()=5SKIP5B)GORECNO()+5SKIP5C)SKIPRECNO()+5GORECNO()+5D)GORECNO()+5LISTNEXT5對(duì)于已經(jīng)建好的表,利用索引對(duì)其中的數(shù)據(jù)記錄按照用戶(hù)需要的順序進(jìn)行重新排列,可以加快查詢(xún)速度,保證關(guān)鍵字段中輸入值的唯一性,并且是建立數(shù)據(jù)表之間關(guān)系的根底。3.4.1索引的概念

1.索引的功能默認(rèn)情況下,表中記錄順序是按數(shù)據(jù)輸入時(shí)的先后順序決定的,我們把這種順序稱(chēng)為記錄的物理順序。在實(shí)際應(yīng)用中,用戶(hù)經(jīng)常需要按某種特定順序來(lái)排列記錄。索引中存儲(chǔ)的是所有記錄的索引表達(dá)式的值及按此值的順序所排列的記錄號(hào)。翻開(kāi)索引后,系統(tǒng)將按照索引中記錄號(hào)的順序顯示相關(guān)記錄,稱(chēng)為邏輯順序。2.索引的種類(lèi)主索引在指定字段或表達(dá)式中不允許出現(xiàn)重復(fù)值的索引,一個(gè)表只能創(chuàng)立一個(gè)主索引。不能為自由表建立主索引。(例如:學(xué)生根本情況表中學(xué)號(hào)字段)候選索引在指定字段或表達(dá)式中不允許出現(xiàn)重復(fù)值的索引,一個(gè)表可以創(chuàng)立多個(gè)候選索引。在數(shù)據(jù)庫(kù)表和自由表中均可為每個(gè)表建立多個(gè)候選索引。(例如:學(xué)生根本情況表中聯(lián)系、家庭住址等字段)唯一索引它以指定的字段的首次出現(xiàn)值為根底,選定一組記錄,并對(duì)記錄進(jìn)行排序。唯一索引與字段值的唯一性無(wú)關(guān),它的“唯一〞是指在使用相應(yīng)的索引時(shí),重復(fù)的索引字段值只有唯一一個(gè)值出現(xiàn)在索引項(xiàng)中?!怖纾簩W(xué)生根本情況表中按民族唯一索引,那么每個(gè)民族只有一條記錄〕普通索引普通索引也可以決定記錄的處理順序,它不僅允許字段中出現(xiàn)重復(fù)值,并且索引項(xiàng)中也允許出現(xiàn)重復(fù)值。在一個(gè)表中可以建立多個(gè)普通索引。(例如:學(xué)生根本情況表中的所有其它字段)3.索引文件索引文件分兩類(lèi)。一類(lèi)為復(fù)合索引文件,另一類(lèi)為單索引文件。一個(gè)復(fù)合索引文件包含多個(gè)索引,每個(gè)索引有各自的索引名和索引表達(dá)式。單索引文件只包含一個(gè)索引,目前很少使用。復(fù)合索引又分結(jié)構(gòu)化和非結(jié)構(gòu)化兩種。通常使用結(jié)構(gòu)復(fù)合索引文件。該文件的主文件與表文件名相同,擴(kuò)展名為.CDX。在翻開(kāi)數(shù)據(jù)表時(shí),其結(jié)構(gòu)化復(fù)合索引文件被自動(dòng)翻開(kāi)。在添加、更改或刪除記錄時(shí),其中的索引會(huì)自動(dòng)進(jìn)行維護(hù)。關(guān)閉數(shù)據(jù)表時(shí),該索引文件被自動(dòng)關(guān)閉。1.在表設(shè)計(jì)器中建立索引在“表設(shè)計(jì)器〞中的“字段〞選項(xiàng)卡中,可建立基于一個(gè)字段的單項(xiàng)索引,索引名與字段名同名,索引表達(dá)式就是對(duì)應(yīng)的字段。索引類(lèi)型只能是普通索引。在“索引〞選項(xiàng)卡中,可按照多個(gè)字段建立復(fù)合字段索引,索引名由用戶(hù)自行輸入,索引類(lèi)型可根據(jù)需要選擇主索引、候選索引、唯一索引或普通索引。索引表達(dá)式由用戶(hù)在表達(dá)式框中或在表達(dá)式生成器中自行輸入。3.4.2索引的建立

例:為“學(xué)生根本情況〞表建立5個(gè)索引?!?〕按“學(xué)號(hào)〞字段建立主索引?!?〕按“民族〞字段建立唯一索引?!?〕按“入學(xué)總分〞字段降序建立普通索引?!?〕按“出生日期〞字段對(duì)1982年后出生的記錄建立普通索引。〔5〕按“姓名〞和“出生日期〞字段建立候選索引,索引名為xmrqsy。數(shù)據(jù)表的物理順序“索引〞選項(xiàng)卡“字段〞選項(xiàng)卡3.4.3索引的使用

1.索引文件的翻開(kāi)和關(guān)閉索引文件不能獨(dú)立使用,必須在翻開(kāi)數(shù)據(jù)表后才能使用。翻開(kāi)數(shù)據(jù)表時(shí),結(jié)構(gòu)復(fù)合索引文件會(huì)自動(dòng)翻開(kāi),但是對(duì)于非結(jié)構(gòu)復(fù)合索引文件以及單索引文件,必須在使用之前翻開(kāi)相應(yīng)的索引文件。翻開(kāi):SETINDEXTO<索引文件名>關(guān)閉:SETINDEXTO2.設(shè)置主控索引雖然索引文件中有多個(gè)索引,但是在同一時(shí)刻,數(shù)據(jù)表只能把其中的一個(gè)索引作為主控索引。通常情況下,用戶(hù)翻開(kāi)數(shù)據(jù)表時(shí),并沒(méi)有設(shè)置主控索引,記錄是按物理順序排列的。使用INDEX命令建立索引時(shí),剛建立的索引被設(shè)主控索引。〔1〕命令方式設(shè)置主控索引SETORDERTOTAG<索引名>USE<數(shù)據(jù)表>ORDER<索引名>〔2〕通過(guò)“數(shù)據(jù)工作期〞的“屬性〞對(duì)話框設(shè)置主控索引。“數(shù)據(jù)工作期〞窗口“工作區(qū)屬性〞窗口分別按“民族〞、“入學(xué)總分〞索引順序的瀏覽窗口按“入學(xué)總分〞索引順序的顯示窗口按“出生日期〞索引順序的顯示窗口注意:當(dāng)指定了主控索引時(shí),假設(shè)使用GOTOP命令,記錄指針指向當(dāng)前索引中邏輯順序的第一個(gè)記錄,而不是物理存放順序的第一條記錄。Go1DisplaySetorderto入學(xué)總分GotopDisplay2.使用INDEX命令建立索引INDEXON<索引表達(dá)式>TAG<索引名>[FOR<條件>][ASCE|DESC][CAND|UNIQ]建立與當(dāng)前表同名的結(jié)構(gòu)復(fù)合索引文件〔.CDX〕**假設(shè)選用UNIQUE子句,那么建立唯一索引。**假設(shè)選用CANDIDATE子句,那么建立候選索引。**需要說(shuō)明的是:主索引只能在表設(shè)計(jì)器中的“索引〞選項(xiàng)卡對(duì)數(shù)據(jù)庫(kù)表建立,而不能用命令方式建立。〔自由表不能建立主索引〕例:對(duì)工資表按根本工資升序排列。USE工資INDEXONjbgzTAGgzsy1例:INDEXONjbgz+gwgzTAGgzsy2DESC的功能是:按根本工資和崗位工資之和的降序排列。例:對(duì)工資表中1980年后參加工作的職工,按工齡升序排列。INDEXONgzrqTAGgzsy3DESC;FORyear(gzrq)>=1980例:有一數(shù)據(jù)表記錄如下:執(zhí)行索引命令后,記錄顯示順序是

record#姓名出生日期1歐陽(yáng)惠07/12/692李明02/24/703楊霞11/05/71

indexondtoc(出生日期)tagsy1indexon出生日期tagsy2indexonyear(date())-year(出生日期)tagsy3

A)歐陽(yáng)惠07/12/69B)楊霞11/05/71李明02/24/70李明02/24/70楊霞11/05/71歐陽(yáng)惠07/12/69

C)楊霞11/05/71D)李明02/24/70歐陽(yáng)惠07/12/69歐陽(yáng)惠07/12/69李明02/24/70楊霞11/05/713.5數(shù)據(jù)完整性

3.5.1實(shí)體完整性與主關(guān)鍵字實(shí)體完整性是保證表中記錄惟一的特性,即在一個(gè)表中不允許有重復(fù)記錄。利用主關(guān)鍵字或候選關(guān)鍵字來(lái)保證表中的記錄。3.5.2域完整性與約束規(guī)那么通過(guò)定義數(shù)據(jù)類(lèi)型和指定數(shù)據(jù)寬度,可以限定字段的取值類(lèi)型和取值范圍。還可以用一些域約束規(guī)那么來(lái)進(jìn)一步保證域完整性。在“數(shù)據(jù)庫(kù)表設(shè)計(jì)器〞的對(duì)話框中建立字段有效性規(guī)那么注意:“規(guī)那么〞是邏輯表達(dá)式,“信息〞是字符串表達(dá)式,而“默認(rèn)值〞的類(lèi)型以字段的類(lèi)型確定。3.5.3參照完整性與表之間的關(guān)聯(lián)參照完整性是關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的一個(gè)很重要的功能。在VisualFoxPro中為了建立參照完整性,必須首先建立表之間的聯(lián)系。參照完整性的根本含義是:當(dāng)插入、刪除或修改一個(gè)表中的數(shù)據(jù)時(shí),通過(guò)參照引用互相關(guān)聯(lián)的另一個(gè)表中的數(shù)據(jù),來(lái)檢查對(duì)表的數(shù)據(jù)操作是否正確。在VisualFoxPro中,表間關(guān)系分為永久表間關(guān)系和臨時(shí)表間關(guān)系兩種。永久表間關(guān)系是為了維護(hù)數(shù)據(jù)庫(kù)表之間的完整性而引入的。永久表間關(guān)系保存在數(shù)據(jù)庫(kù)中,只要翻開(kāi)數(shù)據(jù)庫(kù)就會(huì)生效。根據(jù)父表與子表中相關(guān)字段的對(duì)應(yīng)關(guān)系,永久表間關(guān)系可分為一對(duì)一關(guān)系和一對(duì)多關(guān)系兩種。臨時(shí)表間關(guān)系是指在使用時(shí)建立的、使表之間記錄指針聯(lián)動(dòng)的關(guān)系。臨時(shí)表間關(guān)系可以根據(jù)需要隨時(shí)進(jìn)行設(shè)置或更改,當(dāng)系統(tǒng)退出時(shí),臨時(shí)表間關(guān)系也隨之消失。一對(duì)一關(guān)系一對(duì)一關(guān)系在實(shí)際工作中使用得很少,因?yàn)榇嬖谝粚?duì)一關(guān)系的兩個(gè)表可以簡(jiǎn)單地合并為一個(gè)表。假設(shè)要建立一對(duì)一關(guān)系,父表和子表都必須以相關(guān)系的字段建立主索引、候選索引或唯一索引。一對(duì)多關(guān)系一對(duì)多關(guān)系是最常用的一種表間關(guān)系。建立此種關(guān)系要求父表必須根據(jù)相關(guān)系的字段建立主索引或候選索引,子表必須根據(jù)相關(guān)系的字段建立普通索引。1.建立表之間的聯(lián)系在數(shù)據(jù)庫(kù)設(shè)計(jì)器中設(shè)計(jì)表之間的聯(lián)系時(shí),要在父表中建立主索引,在子表中建立普通索引,然后通過(guò)父表的主索引和子表的普通索引建立起兩個(gè)表之間的聯(lián)系。“成績(jī)管理〞數(shù)據(jù)庫(kù)表之間的關(guān)聯(lián)、編輯關(guān)系對(duì)話框建立關(guān)系后,我們可設(shè)置管理數(shù)據(jù)庫(kù)關(guān)系記錄的規(guī)那么,即參照完整性。所謂參照完整性,簡(jiǎn)單地說(shuō)就是控制數(shù)據(jù)一致性,尤其是不同表之間關(guān)系的規(guī)那么。參照完整性規(guī)那么包括更新規(guī)那么、刪除規(guī)那么和插入規(guī)那么。更新規(guī)那么:規(guī)定了當(dāng)更新父表中的連接(主關(guān)鍵字)值時(shí),如何處理相關(guān)的子表中的記錄。刪除規(guī)那么:規(guī)定了當(dāng)刪除父表中的記錄時(shí),如何處理子表中相關(guān)的記錄。插入規(guī)那么:規(guī)定了當(dāng)插入子表中的記錄時(shí),是否進(jìn)行參照完整性檢查。2.設(shè)置參照完整性約束“參照完整性生成器〞可以幫助我們建立規(guī)那么,控制記錄如何在相關(guān)表中被插入、更新或刪除,這些規(guī)那么將被寫(xiě)到相應(yīng)的表觸發(fā)器中。參照完整性規(guī)那么有三種選項(xiàng):級(jí)聯(lián):不管何時(shí)更改父表中的某個(gè)字段,VisualFoxPro都會(huì)自動(dòng)更改所有相關(guān)子表記錄中的對(duì)應(yīng)值。例如:在學(xué)生表、課程表和成績(jī)表中,將它們的更新規(guī)那么設(shè)定為“級(jí)聯(lián)〞,既當(dāng)修改學(xué)生的學(xué)號(hào)和課程的課程編號(hào)時(shí),也自動(dòng)修改相關(guān)的成績(jī)記錄。將它們的刪除規(guī)那么設(shè)定為“級(jí)聯(lián)〞,既在刪除學(xué)生記錄和課程記錄時(shí),自動(dòng)刪除相關(guān)的成績(jī)記錄。限制:禁止更改父表中的主關(guān)鍵字段或候選關(guān)鍵字段中的值,這樣在子表中就不會(huì)出現(xiàn)孤立的記錄。例如:在學(xué)生表、課程表和成績(jī)表中,將它們的插入規(guī)那么設(shè)定為“限制〞,既插入成績(jī)記錄時(shí)檢查相關(guān)的學(xué)生和課程是否存在,如果不存在那么禁止插入成績(jī)記錄。忽略:即使在子表中有相關(guān)的記錄,仍允許更新父表中的記錄。插入規(guī)那么只有限制和忽略選項(xiàng)設(shè)置“成績(jī)管理〞數(shù)據(jù)庫(kù)中四個(gè)表的參照完整性規(guī)那么3.6自由表所謂自由表就是那些不屬于任何數(shù)據(jù)庫(kù)的表。可以將自由表添加到數(shù)據(jù)庫(kù)中,使之成為數(shù)據(jù)庫(kù)表;也可以將數(shù)據(jù)庫(kù)表從數(shù)據(jù)庫(kù)中移出,使之成為自由表。將自由表添加到數(shù)據(jù)庫(kù)

ADDTABLE<數(shù)據(jù)表名>將數(shù)據(jù)庫(kù)表從數(shù)據(jù)庫(kù)中移出

REMOVETABLE<數(shù)據(jù)表名>在“表設(shè)計(jì)器〞中的設(shè)計(jì)一個(gè)自由表“學(xué)生成績(jī).dbf〞數(shù)據(jù)表3.7多個(gè)表的同時(shí)使用3.7.1多工作區(qū)的概念在數(shù)據(jù)庫(kù)系統(tǒng)中常需要同時(shí)對(duì)假設(shè)干個(gè)數(shù)據(jù)表進(jìn)行操作這就需要預(yù)先翻開(kāi)需進(jìn)行操作的所有數(shù)據(jù)表。為此,VFP在內(nèi)存中分配了假設(shè)干區(qū)域,稱(chēng)為工作區(qū)。在每個(gè)工作區(qū)中各有一個(gè)記錄指針指向該區(qū)表文件的當(dāng)前記錄,使得各區(qū)的表文件可獨(dú)立操作。在VFP系統(tǒng)中,可以在不同的工作區(qū)翻開(kāi)多個(gè)表文件,但在任何時(shí)候只能對(duì)一個(gè)工作區(qū)進(jìn)行操作,這個(gè)工作區(qū)稱(chēng)為當(dāng)前工作區(qū)。SELECT<工作區(qū)號(hào)>/<工作區(qū)別名>/0工作區(qū)號(hào):1~32767用戶(hù)別名:在翻開(kāi)數(shù)據(jù)表時(shí)用ALIAS短語(yǔ)指定的別名。系統(tǒng)別名:1~10區(qū)可用字母A~J表示。SELE0:具有獨(dú)特功能;表示讓系統(tǒng)自動(dòng)選擇區(qū)號(hào)最小空閑工作區(qū)作為當(dāng)前工作區(qū)。例:select1&&當(dāng)前工作區(qū)是1區(qū)use學(xué)生根本情況aliasxs&&用戶(hù)別名是xsselect2&&當(dāng)前工作區(qū)是2區(qū)use學(xué)生成績(jī)select1/selectxs/selecta&&三條命令是等效的

例:執(zhí)行如下程序段后,F(xiàn)ILE4所在工作區(qū)是:sele1usefile1List…closedataclosedatasele0sele2usefile2usefile2listlistsele0sele3usefile3usefile3listlistsele0sele0usefile4usefile4①第1區(qū)②第2區(qū)③第3區(qū)④第4區(qū)3.7.2使用不同工作區(qū)的表非當(dāng)前工作區(qū)字段的引用:除了可以用SELECT命令切換工作區(qū)使用不同的表外,也允許在一個(gè)工作區(qū)中使用另外一個(gè)工作區(qū)中的表。<工作區(qū)別名>.字段名|<工作區(qū)別名>->字段名例:use學(xué)生根本情況in1use學(xué)生成績(jī)in2display學(xué)號(hào),姓名,性別,b.計(jì)算機(jī),b.英語(yǔ),b.數(shù)學(xué)displayall學(xué)號(hào),姓名,性別,b.計(jì)算機(jī),b.英語(yǔ),b.數(shù)學(xué)由顯示中可以看出:“學(xué)生成績(jī)〞表的指針始終未動(dòng)3.7.3表之間的關(guān)聯(lián)在開(kāi)發(fā)VisualFoxPro應(yīng)用程序時(shí),不僅需要永久聯(lián)系,有時(shí)也需要使用能夠控制表間記錄指針關(guān)系的臨時(shí)關(guān)系。這種臨時(shí)關(guān)系稱(chēng)為關(guān)聯(lián)。建立了表間的關(guān)聯(lián),可以控制不同工作區(qū)中記錄指針的聯(lián)動(dòng)。SETRELATIONTO<關(guān)鍵字表達(dá)式>INTO<工作區(qū)>

相關(guān)數(shù)據(jù)表事先翻開(kāi),關(guān)鍵字表達(dá)式通常是兩表共有字段,子表必須按該字段索引。use學(xué)生根本情況in1use學(xué)生成績(jī)in2select2indexon學(xué)號(hào)tagxhsyselect1setrelationto學(xué)號(hào)intobdisplayall學(xué)號(hào),姓名,性別,b.計(jì)算機(jī),b.英語(yǔ),b.數(shù)學(xué)例:設(shè)有“圖書(shū).DBF〞(ZBH、SM、ZZ、CBDW、DJ、……);總編號(hào)、書(shū)名、作者、出版單位、單價(jià)等“讀者.DBF〞(JSZH、XM、XB、DW、ZC);借書(shū)證號(hào)、姓名、性別、單位、職稱(chēng)“借閱.DBF〞(JSZH、ZBH、JSRQ)。借書(shū)證號(hào)、總編號(hào)、借書(shū)日期下面程序的功能:輸出已借出書(shū)籍讀者的姓名,單位以及借出圖書(shū)的書(shū)名,單價(jià),借書(shū)日期。圖書(shū)表局部記錄的瀏覽窗口借閱表和讀者表的局部記錄的瀏覽窗口***圖書(shū)借閱.prg***closedatasele1use讀者indexonjszh

tagjszhsysele2use圖書(shū)

indexonzbh

tagzbhsysele3use借閱setrelatojszh

intoa,zbh

intoblistjszh,a.xm,a.dw,b.sm,b.dj,jsrqcloseallretu建立關(guān)聯(lián)后的“借閱.dbf〞表的局部記錄3.8表的排序SORTON<字段名1>[/A]|[/D][/C][,<字段名2>…]TO<文件名>[<范圍>][FOR<條件>][FLELD<字段名表>]排序的原那么是:數(shù)值型關(guān)鍵字段按照數(shù)值的大小;日期型關(guān)鍵字段按照日期的先后,字符型關(guān)鍵字段按字符的ASCⅡ碼值的大小;漢字按拼音〔或內(nèi)碼〕的順序;邏輯型關(guān)鍵字段,系統(tǒng)規(guī)定:.T.>.F.對(duì)當(dāng)前表按照排序字段進(jìn)行物理排序,生成新的排序表,改變了記錄在原表中的物理順序及記錄號(hào)。例:對(duì)工資表按根本工資升序排列。USE工資SORTONjbgzTOjbgzpx例:對(duì)工資表先按根本工資降序、再按獎(jiǎng)金降序排列。SORTONjbgz/D,gwgz/DTOjbgzjjpx例:對(duì)工資表按職稱(chēng)和根本工資排列。SORTONzc,jbgzTOzcjbgzpx例:對(duì)工資表按工作日期降序排列。SORTONgzrq/DTOgzrqpx本章練習(xí)例:執(zhí)行SELECT0選擇工作區(qū)的結(jié)果是(A)選擇了0號(hào)工作區(qū)(B)選擇了空閑的最小號(hào)工作區(qū)(C)關(guān)閉選擇的工作區(qū)(D)選擇已翻開(kāi)的工作區(qū)例:瀏覽表文件的命令是(A)USE(B)LIST(C)DISPLAY(D)BROWSE例:在VisualFoxPro的數(shù)據(jù)工作期窗口,使用SETRELATION命令可以建立兩個(gè)表之間的關(guān)聯(lián),這種關(guān)聯(lián)是(A)永久性關(guān)聯(lián)(B)永久性關(guān)聯(lián)或臨時(shí)性關(guān)聯(lián)(C)臨時(shí)性關(guān)聯(lián)(D)永久性關(guān)聯(lián)和臨時(shí)性關(guān)聯(lián)例:可以伴隨著表的翻開(kāi)而自動(dòng)翻開(kāi)的索引是(A)單一索引文件(B)復(fù)合索引文件(C)結(jié)構(gòu)化復(fù)合索引文件(D)非結(jié)構(gòu)化復(fù)合索引文件例:要為當(dāng)前表所有職工增加100元工資,應(yīng)使用命令(A)CHANGE工資WITH工資+100(B)REPLACE工資WITH工資+100(C)CHANGEALL工資WITH工資+100(D)REPLACEALL工資WITH工資+100例:索引字段值不唯一,應(yīng)該選擇的索引類(lèi)型為(A)主索引(B)普通索引(C)候選索引(D)唯一索引例:在表設(shè)計(jì)器中,字段選項(xiàng)卡所建立的索引的索引類(lèi)型為(A)主索引(B)普通索引(C)候選索引(D)唯一索引例:以下表達(dá)了關(guān)系數(shù)據(jù)庫(kù)的參照完整性的是(A)主鍵(B)超鍵(C)外鍵(D)候選鍵例:備注型字段的數(shù)據(jù)用來(lái)存放(A)指向備注的具體內(nèi)容(B)指向DBF文件的指針(C)指向FPT文件的文件名(D)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論