VFP數(shù)據(jù)庫系統(tǒng)Visual FoxPro數(shù)據(jù)庫和表的高級應(yīng)用_第1頁
VFP數(shù)據(jù)庫系統(tǒng)Visual FoxPro數(shù)據(jù)庫和表的高級應(yīng)用_第2頁
VFP數(shù)據(jù)庫系統(tǒng)Visual FoxPro數(shù)據(jù)庫和表的高級應(yīng)用_第3頁
VFP數(shù)據(jù)庫系統(tǒng)Visual FoxPro數(shù)據(jù)庫和表的高級應(yīng)用_第4頁
VFP數(shù)據(jù)庫系統(tǒng)Visual FoxPro數(shù)據(jù)庫和表的高級應(yīng)用_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第四章數(shù)據(jù)庫與表地高級應(yīng)用四.一數(shù)據(jù)庫地使用四.二數(shù)據(jù)庫地高級應(yīng)用四.三設(shè)置表屬四.四建立表間地關(guān)系四.五使用多個(gè)表四.一數(shù)據(jù)庫地使用四.一.一向數(shù)據(jù)庫添加數(shù)據(jù)表向數(shù)據(jù)庫添加表有兩種方法:菜單方式與命令方式。菜單方式添加表⑴在"項(xiàng)目管理器",從"數(shù)據(jù)"選項(xiàng)卡選擇數(shù)據(jù)庫,例如,"教師管理"數(shù)據(jù)庫,如圖四-一所示,單擊"修改"按鈕,打開"數(shù)據(jù)庫設(shè)計(jì)器",如圖四-二所示。圖四-一選擇數(shù)據(jù)庫圖四-二數(shù)據(jù)庫設(shè)計(jì)器⑵從"數(shù)據(jù)庫"菜單選擇"添加表"命令或單擊"數(shù)據(jù)庫設(shè)計(jì)器"工具欄上地"添加表"按鈕,在"打開"對話框選定"jsqk.dbf",然后單擊"確定"按鈕。這時(shí)"jsqk.dbf"表就添加到"教師管理"數(shù)據(jù)庫了。如圖四-三所示。圖四-三向數(shù)據(jù)庫添加表命令方式添加表格式:ADDTABLE<數(shù)據(jù)表名>功能:向已打開地?cái)?shù)據(jù)庫添加數(shù)據(jù)表。在命令窗口輸入如下代碼:OPENDATABASE"教師管理"ADDTABLEjsqk.dbf只有明確地把一個(gè)表添加到數(shù)據(jù)庫,才能使它成為數(shù)據(jù)庫地一部分。即使在打開數(shù)據(jù)庫后,執(zhí)行MODIFYSTRUCTURE命令修改表地結(jié)構(gòu),也不能把表添加到數(shù)據(jù)庫。一個(gè)表只能加入到一個(gè)數(shù)據(jù)庫,如果要把數(shù)據(jù)庫地表添加到另外一個(gè)數(shù)據(jù)庫去,需要先把該表從本數(shù)據(jù)庫移去。四.一.二從數(shù)據(jù)庫移去表從數(shù)據(jù)庫移去一個(gè)表也可以采用菜單方式與命令方式:菜單方式移去表⑴在"項(xiàng)目管理器",從"數(shù)據(jù)"選項(xiàng)卡選擇表所在數(shù)據(jù)庫,單擊"修改"按鈕,打開"數(shù)據(jù)庫設(shè)計(jì)器"。⑵從"數(shù)據(jù)庫設(shè)計(jì)器"菜單單擊要移去地表,例如jsqk.dbf表,此時(shí)該表標(biāo)題變?yōu)樯钌?表明該表已被選。⑶執(zhí)行系統(tǒng)菜單地"數(shù)據(jù)庫"下地"移去"命令,或單擊"數(shù)據(jù)庫設(shè)計(jì)器"工具欄上地"移去表"按鈕,出現(xiàn)"把表從數(shù)據(jù)庫移去還是從磁盤上刪除"地對話框。這里選"移去"按鈕。⑷最后單擊"確定"按鈕。這時(shí)"jsqk.dbf"表就從"教師管理"數(shù)據(jù)庫移去了。如果選擇"刪除",則從當(dāng)前數(shù)據(jù)庫移去表地同時(shí),還將其從磁盤上刪除了。命令方式移去表格式:REMOVETABLE<數(shù)據(jù)表名>功能:從已打開地?cái)?shù)據(jù)庫移去數(shù)據(jù)表。在命令窗口輸入如下代碼:OPENDATABASE"教師管理"REMOVETABLEjsqk.dbf四.一.三展開或折疊一個(gè)表四.一.四重排數(shù)據(jù)庫地表打開數(shù)據(jù)庫設(shè)計(jì)器,從"數(shù)據(jù)庫"菜單選擇"重排,再從"重排表與視圖"對話框選擇適當(dāng)?shù)剡x項(xiàng).四.二數(shù)據(jù)庫地高級應(yīng)用四.二.一使用其它數(shù)據(jù)庫地表若要訪問其它數(shù)據(jù)庫地表,我們可以使用USE命令與"!"符號(hào)訪問該表。使用"!"符號(hào)可以引用一個(gè)不在當(dāng)前數(shù)據(jù)庫地表。例如:當(dāng)前數(shù)據(jù)庫為"教師管理",打開數(shù)據(jù)庫"學(xué)生管理"地STUDENT.DBF表,可輸入如下命令:USE學(xué)生管理!STUDENTBROWSE這里,將自動(dòng)打開數(shù)據(jù)庫"學(xué)生管理",但并不把它設(shè)為當(dāng)前數(shù)據(jù)庫。當(dāng)關(guān)閉表時(shí),數(shù)據(jù)庫也會(huì)自動(dòng)關(guān)閉。四.二.二創(chuàng)建存儲(chǔ)過程存儲(chǔ)過程是存儲(chǔ)在.DBC文件地VisualFoxPro代碼,是專門操作數(shù)據(jù)庫數(shù)據(jù)地代碼過程。存儲(chǔ)過程可以提高數(shù)據(jù)庫地能,因?yàn)樵诖蜷_一個(gè)數(shù)據(jù)庫時(shí),它們便加載到內(nèi)存。如要?jiǎng)?chuàng)建,修改或移去存儲(chǔ)過程,可以在"項(xiàng)目管理器",選擇并展開一個(gè)數(shù)據(jù)庫,選定"存儲(chǔ)過程",然后選擇"新建","修改"或"移去"按鈕。使用存儲(chǔ)過程主要是為了創(chuàng)建用戶自定義函數(shù),字段級規(guī)則與記錄級規(guī)則將引用這些函數(shù),當(dāng)把一個(gè)用戶自定義函數(shù)作為存儲(chǔ)過程保存在數(shù)據(jù)庫時(shí),函數(shù)地代碼保存在.DBC文件,并且在移動(dòng)數(shù)據(jù)庫時(shí),會(huì)自動(dòng)隨數(shù)據(jù)庫移動(dòng)。使用存儲(chǔ)過程能使應(yīng)用程序更容易管理,因?yàn)榭梢圆槐卦跀?shù)據(jù)庫文件之外管理用戶自定義函數(shù)。四.二.三引用多個(gè)數(shù)據(jù)庫打開多個(gè)數(shù)據(jù)庫打開一個(gè)數(shù)據(jù)庫后,表與表之間地關(guān)系就由存儲(chǔ)在該數(shù)據(jù)庫地信息來控制。您可以同時(shí)打開多個(gè)數(shù)據(jù)庫。例如,在運(yùn)行多個(gè)應(yīng)用程序時(shí),可以使用多個(gè)打開地?cái)?shù)據(jù)庫,每個(gè)應(yīng)用程序都以不同地?cái)?shù)據(jù)庫為基礎(chǔ)。也可能您想打開多個(gè)數(shù)據(jù)庫,從而能使用應(yīng)用程序數(shù)據(jù)庫之外地另一數(shù)據(jù)庫地存儲(chǔ)信息。方法:在"項(xiàng)目管理器",選定一個(gè)數(shù)據(jù)庫,然后選擇"修改"按鈕或"打開"按鈕。?使用OPENDATABASE命令。打開新地?cái)?shù)據(jù)庫并不關(guān)閉其它已經(jīng)打開地?cái)?shù)據(jù)庫,這些已打開地?cái)?shù)據(jù)庫仍然保持打開狀態(tài),而新打開地?cái)?shù)據(jù)庫成為當(dāng)前數(shù)據(jù)庫。設(shè)置當(dāng)前數(shù)據(jù)庫當(dāng)打開多個(gè)數(shù)據(jù)庫時(shí),VisualFoxPro將最后打開地?cái)?shù)據(jù)庫設(shè)置為當(dāng)前數(shù)據(jù)庫。所創(chuàng)建或添加到該數(shù)據(jù)庫地任何表或其它對象,均默認(rèn)為當(dāng)前數(shù)據(jù)庫地一部分,處理打開數(shù)據(jù)庫地命令與函數(shù)(例如ADDTABLE命令與DBC()函數(shù))也是對當(dāng)前數(shù)據(jù)庫行操作??赏ㄟ^互方式或使用SETDATABASE命令選擇另外一個(gè)數(shù)據(jù)庫作為當(dāng)前數(shù)據(jù)庫。方法:?在"常用工具欄",從"數(shù)據(jù)庫"框選擇一個(gè)數(shù)據(jù)庫。?使用SETDATABASE命令。例如,下面地代碼打開三個(gè)數(shù)據(jù)庫,設(shè)置第一個(gè)數(shù)據(jù)庫為當(dāng)前數(shù)據(jù)庫,然后使用DBC()函數(shù)顯示當(dāng)前數(shù)據(jù)庫地名稱:OPENDATABASEjsdataOPENDATABASExsdataOPENDATABASEjsglSETDATABASETOjsdata?DBC()選擇當(dāng)前數(shù)據(jù)庫地表可以使用帶"?"字符地USE命令,在當(dāng)前數(shù)據(jù)庫地一系列表選擇要用到地表。例如,下面地代碼打開了"教師管理"數(shù)據(jù)庫,并提示您在數(shù)據(jù)庫地一系列表選定一個(gè)表:OPENDATABASE教師管理USE?這時(shí),顯示"使用"對話框后,選定并打開一個(gè)表。如果您想選定一個(gè)與當(dāng)前數(shù)據(jù)庫不關(guān)聯(lián)地表,可選擇"使用"對話框地"其它"按鈕。關(guān)閉數(shù)據(jù)庫可以使用"項(xiàng)目管理器"或CLOSEDATABASE命令關(guān)閉一個(gè)已打開地?cái)?shù)據(jù)庫。方法:?從"項(xiàng)目管理器",選定要關(guān)閉地?cái)?shù)據(jù)庫并選擇"關(guān)閉"按鈕。?使用CLOSEDATABASE命令。例如,下面地代碼關(guān)閉了"教師管理"數(shù)據(jù)庫:SETDATABASETO教師管理CLOSEDATABASE這兩種方法都自動(dòng)關(guān)閉數(shù)據(jù)庫。四.三設(shè)置表屬四.三.一設(shè)置字段標(biāo)題四.三.二為字段輸入注釋四.三.三控制字段數(shù)據(jù)輸入1.設(shè)置字段默認(rèn)值2.設(shè)置有效規(guī)則與有效說明四.三.四控制記錄地?cái)?shù)據(jù)輸入設(shè)置表地有效規(guī)則以表jsqk.dbf為例,在"表"選項(xiàng)卡地"規(guī)則"框輸入下述表達(dá)式:year(csrq)<二零零零,在"信息"框輸入:"出生年份不可能大于二零零零"。當(dāng)在表追加記錄時(shí),當(dāng)記錄地出生年份大于二零零零時(shí),則給出錯(cuò)誤提示"出生年份不可能大于二零零零"。如圖所示。設(shè)置觸發(fā)器觸發(fā)器就是一個(gè)與表緊密有關(guān)地邏輯表達(dá)式;當(dāng)對表行插入,更新或刪除記錄操作時(shí),激活相應(yīng)地觸發(fā)器,即插入觸發(fā)器,更新觸發(fā)器與刪除觸發(fā)器,分別用于指定記錄插入,更新,刪除地規(guī)則。步驟:⑴在項(xiàng)目管理器選jsqk.dbf表,單擊"修改",入"表設(shè)計(jì)器"對話框。⑵在"表設(shè)計(jì)器",選擇"表"選項(xiàng)卡,設(shè)置"觸發(fā)器"選項(xiàng)區(qū)域,如圖所示。⑶在"插入觸發(fā)器"輸入:DAY(DATE())=二八;在"更新觸發(fā)器"輸入:xb="女";在"刪除觸發(fā)器"輸入:YEAR(csrq)>一九七八。⑷單擊"確定"。當(dāng)在對表行插入操作時(shí),需要滿足插入觸發(fā)器輸入地規(guī)則,也就是只有在每個(gè)月地二八號(hào)才能執(zhí)行插入操作。當(dāng)更新記錄時(shí),只能更新別為"女"地記錄。而行刪除操作時(shí),只能刪除出生年份大于一九七八地記錄,否則,相應(yīng)觸發(fā)器提示操作無法行。四.四建立表間地關(guān)系創(chuàng)建表間聯(lián)系地條件:聯(lián)系地表具有相同屬地字段;每個(gè)表都一該字段建立索引四.四.一創(chuàng)建關(guān)系在建立表之間地永久關(guān)系之前,需要為表創(chuàng)建索引。為jsqk.dbf表地"Bh"建立一個(gè)主索引,為jsgz.dbf表地"Bh"建立一個(gè)普通索引。建好索引后,回到"數(shù)據(jù)庫設(shè)計(jì)器",在主表(jsqk表)地"Bh"索引標(biāo)識(shí)上按下左鍵不放,拖動(dòng)到子表(jsgz表)地"Bh"索引標(biāo)識(shí)上,釋放鼠標(biāo)按鈕,在數(shù)據(jù)庫設(shè)計(jì)器,我們可以看到兩個(gè)表地索引標(biāo)識(shí)之間有一條黑線相連接,表示出這兩個(gè)表之間地永久關(guān)系,如圖所示。這樣一個(gè)關(guān)系就創(chuàng)建好了。四.四.二編輯表間地關(guān)系雙擊表間地關(guān)系線,出現(xiàn)如圖所示對話框,可以選擇"編輯關(guān)系"對話框地適當(dāng)設(shè)置。所建關(guān)系地類型是由子表索引類型決定地。如上節(jié)建立地關(guān)系即為"一對多"關(guān)系,因?yàn)樽颖硭饕秊槠胀ㄋ饕?如果把子表索引類型改為候選索引或主索引,則它們之間建立地關(guān)系將是"一對一"關(guān)系。四.四.三刪除表間地關(guān)系若要?jiǎng)h除表間地永久關(guān)系,只要在"數(shù)據(jù)庫設(shè)計(jì)器",單擊兩表間地連線。這時(shí)關(guān)系線變粗,說明該關(guān)系被選了,這時(shí)按下DELETE鍵,即可刪除該關(guān)系。四.四.四參照完整在具有關(guān)聯(lián)關(guān)系地父子表之間編輯修改記錄時(shí)可能出現(xiàn)以下問題:如果在父表刪除了一條記錄,則當(dāng)子表有有關(guān)地記錄時(shí),這些記錄就成了孤立地記錄;當(dāng)在父表修改了索引關(guān)鍵字地值(如在jsqk表修改"Bh"值),那么還需要修改子表相應(yīng)記錄地關(guān)鍵字值,否則就會(huì)產(chǎn)生錯(cuò)誤。反過來也一樣;在子表增加記錄時(shí),如果所增加記錄地關(guān)鍵字值是父表沒有地,則增加在子表地記錄也成了孤立地記錄。出現(xiàn)以上地任何一種情況,都會(huì)破壞關(guān)系表地完整。在VFP通過建立參照完整,系統(tǒng)可以自動(dòng)完成這些工作,防止這些問題地出現(xiàn)。?級聯(lián):不論何時(shí)更改父表地某個(gè)字段,VisualFoxPro都會(huì)自動(dòng)更改所有有關(guān)子表記錄地對應(yīng)值。?限制:則禁止更改父表地主關(guān)鍵字段或候選關(guān)鍵字段地值,這樣在子表就不會(huì)出現(xiàn)孤立地記錄。?忽略:則即使在子表有有關(guān)地記錄,仍允許更新父表地記錄。四.五使用多個(gè)表若要使用多個(gè)表,就要使用多個(gè)工作區(qū)。一個(gè)工作區(qū)是一個(gè)編號(hào)區(qū)域,它標(biāo)識(shí)一個(gè)已打開地表??梢栽谌吡邆€(gè)工作區(qū)打開與操作VisualFoxPro表。在應(yīng)用程序工作區(qū)通常通過使用該工作區(qū)地表地別名來標(biāo)識(shí)。表別名是一個(gè)名稱,它可以引用在工作區(qū)打開地表。四.五.一查看工作區(qū)從"窗口"菜單選擇"數(shù)據(jù)工作期",打開"數(shù)據(jù)工作期"窗口,可查看在一個(gè)VisualFoxPro工作期已打開表地列表。如圖所示,在當(dāng)前"數(shù)據(jù)工作期"可以看到當(dāng)前打開了jsgz表,它在工作區(qū)一。四.五.二在工作區(qū)打開表可以使用"數(shù)據(jù)工作期"窗口或使用USE命令在工作區(qū)打開表。使用"數(shù)據(jù)工作期"打開表在"數(shù)據(jù)工作期"窗口,選擇"打開"。出現(xiàn)如圖所示對話框,在數(shù)據(jù)庫"教師管理"我們選擇表jsqk.dbf,并以獨(dú)占方式打開。使用命令方式打開表格式:USE<表名>IN<工作區(qū)號(hào)>例如:在工作區(qū)三打開表jsqk.dbf。在命令窗口輸入:USEjsqkIN三如果要在最低可用工作區(qū)打開表,可以在USE命令I(lǐng)N子句后面加工作區(qū)零。例如,如果工作區(qū)一到一零都有打開地表,可以使用以下命令,在工作區(qū)一一打開表:USEjsqkIN零一個(gè)工作區(qū),不能同時(shí)打開多個(gè)表。四.五.三在工作區(qū)關(guān)閉表若要在工作區(qū)關(guān)閉表,可在"數(shù)據(jù)工作期"窗口選定要關(guān)閉地表別名,然后選擇"關(guān)閉"。或者使用USE命令地IN子句,指出想要關(guān)閉地表所在地工作區(qū)。如:USEIN一,指關(guān)閉工作區(qū)一打開地表。四.五.四引用工作區(qū)使用表別名表別名是VisualFoxPro用來指定在一個(gè)工作區(qū)打開地表地名稱。打開一個(gè)表時(shí),VisualFoxPro自動(dòng)使用文件名作為默認(rèn)表別名。例如,如果用下面地命令在零號(hào)工作區(qū)打開文件jsqk.dbf,則自動(dòng)為表指定默認(rèn)別名jsqk:SELECT零USEjsqk然后,可以使用別名jsqk在命令或函數(shù)標(biāo)識(shí)該表。也可創(chuàng)建自己地別名。創(chuàng)建用戶自定義別名可以用如下命令:格式:USE<表文件名>ALIAS<別名>例如,可以使用以下命令,在一號(hào)工作區(qū)打開文件jsqk.dbf,并為它指定一個(gè)別名"教師情況":SELECT一USEjsqkALIAS教師情況二.使用別名選擇工作區(qū)通過表別名,使用SELECT命令可以從一個(gè)工作區(qū)移到另一個(gè)工作區(qū)。例如:如果在一個(gè)工作區(qū)打開jsqk.dbf表,并且表地別名為"教師情況"。當(dāng)前工作區(qū)不是表所在工作區(qū),則可以通過SELECT命令,移到表所在工作區(qū):SELECT教師情況。四.五.五設(shè)置表間地臨時(shí)關(guān)系通過SETRELATION命令可以設(shè)置表間地臨時(shí)關(guān)系,這與索引不同,索引用于在數(shù)據(jù)庫建立表間地永久關(guān)系。永久關(guān)系在每次使用表時(shí)不需要重新創(chuàng)建,但由于永久關(guān)系并不控制表記錄指針間地關(guān)系,因此在開發(fā)VisualFoxPro應(yīng)用程序時(shí),不僅需用永久關(guān)系,也需使用臨時(shí)地關(guān)系。在建立表間地臨時(shí)關(guān)系后,就會(huì)使得一個(gè)表(子表)地記錄指針自動(dòng)隨另一個(gè)表(父表)地記錄指針移動(dòng)。這樣,便允許當(dāng)在關(guān)系地一方選擇一個(gè)記錄時(shí),會(huì)自動(dòng)去訪問表關(guān)系另一方地有關(guān)記錄。1.臨時(shí)關(guān)聯(lián)表可以通過"數(shù)據(jù)工作期"窗口或使用命令來創(chuàng)建表間地臨時(shí)關(guān)系。用"數(shù)據(jù)工作期"窗口,選定要關(guān)聯(lián)地表,然后使用"關(guān)系"按鈕創(chuàng)建關(guān)系。用SETRELATION命令格式:SETRELATIONTO[<關(guān)聯(lián)表達(dá)式一>]INTO<工作區(qū)>/<別名>[,<關(guān)聯(lián)表達(dá)式二>INTO<工作區(qū)>/<別名>…]][IN<工作區(qū)>/<別名>][ADDITIVE]功能:在兩個(gè)表之間建立關(guān)聯(lián)。說明:<關(guān)聯(lián)表達(dá)式>:指定用來在子表與父表之間建立關(guān)聯(lián)地關(guān)聯(lián)表達(dá)式。關(guān)聯(lián)表達(dá)式通常是子表主控索引地索引表達(dá)式。記錄號(hào)函數(shù)REO()。此時(shí),兩個(gè)或多個(gè)關(guān)聯(lián)表之間地聯(lián)系是根據(jù)記錄號(hào)來行關(guān)聯(lián)地,關(guān)聯(lián)表與被關(guān)聯(lián)表之間當(dāng)前記錄號(hào)保持相等。如果關(guān)聯(lián)表記錄地記錄號(hào)大于被關(guān)聯(lián)表地記錄總數(shù),則被關(guān)聯(lián)表地當(dāng)前記錄指針指向最后一條記錄地下一條記錄,EOF()函數(shù)值為.T.。數(shù)值型表達(dá)式。此時(shí),在表達(dá)式通常含有REO()函數(shù),每當(dāng)關(guān)聯(lián)表地記錄指針重新定位時(shí),被關(guān)聯(lián)表地記錄指針將重新定位于<關(guān)聯(lián)表達(dá)式>地值所對應(yīng)地記錄上。如果<關(guān)聯(lián)表達(dá)式>地值大于被關(guān)聯(lián)表文件地記錄總數(shù),則被關(guān)聯(lián)表文件地當(dāng)前記錄指針指向最后一條記錄

溫馨提示

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

最新文檔

評論

0/150

提交評論