第12章多表操作與數(shù)據(jù)庫_第1頁
第12章多表操作與數(shù)據(jù)庫_第2頁
第12章多表操作與數(shù)據(jù)庫_第3頁
第12章多表操作與數(shù)據(jù)庫_第4頁
第12章多表操作與數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 第第12章章 多表操作與數(shù)據(jù)庫多表操作與數(shù)據(jù)庫 上一章介紹的是對當前表進行的操作,似乎默認了在同一時刻只能使用一個表,其實不然。VFP允許在應用程序中同時打開多個表,既可以在應用程序中同時使用多個自由表,也可以使用數(shù)據(jù)庫中的多個表。 12.1 使用多個表12.2 Visual FoxPro的數(shù)據(jù)庫習題12 12.1.1 工作區(qū) 若要使用多個表,就要使用多個工作區(qū)。一個工作區(qū)是一個編號區(qū)域,用它來標識一個已打開的表,每個工作區(qū)中只能打開一個表。VFP可以在32767個工作區(qū)中打開和操作表。 工作區(qū)除了可以用它的編號表示外,還可以用在工作區(qū)中打開的表的名稱、別名來標識。表別名是一個名稱,它可以引

2、用在工作區(qū)中打開的表。12.1使用多個表 1. 指定工作區(qū)其語法格式為:SELECT 工作區(qū)號工作區(qū)號|表別名表別名 說明: 工作區(qū)號的取值范圍為032767。如果取值為0,則激活尚未使用的工作區(qū)中編號最小的那一個。 表別名是打開表的別名,用來指定包含打開表的工作區(qū)。也可以用從A到J中的一個字符作為表別名來激活前10個工作區(qū)中的一個。2. 在不同的工作區(qū)中打開和關(guān)閉表 可以使用USE命令在不同的工作區(qū)中打開或關(guān)閉表。 (1) 在當前工作區(qū)打開和關(guān)閉表在當前工作區(qū)打開和關(guān)閉表 當執(zhí)行不帶表名的USE命令,并且在當前所選工作區(qū)中有打開的表文件時,則關(guān)閉該表。例如,可以使用以下代碼打開cj表,顯示“

3、瀏覽”窗口,然后關(guān)閉此表:USE cjBROWSEUSE (2) 在最低可用工作區(qū)中打開表在最低可用工作區(qū)中打開表 可以在USE命令I(lǐng)N子句后面加工作區(qū)0。USE cj IN 0 說明:在一個工作區(qū)中,不能同時打開多個表。 (3) 在指定工作區(qū)中關(guān)閉表在指定工作區(qū)中關(guān)閉表 使用USE命令的IN子句,指出想要關(guān)閉的表所在的工作區(qū)。 USE cjBROWSEUSE IN cj (4) 關(guān)閉所有工作區(qū)中打開的表關(guān)閉所有工作區(qū)中打開的表 使用命令CLOSE ALL可以關(guān)閉所有工作區(qū)中已打開的表,并將1號工作區(qū)置為當前工作區(qū)。 3. 使用表別名 表別名是VFP用來指定在一個工作區(qū)中打開的表的名稱。 (1

4、) 默認表別名 打開一個表時,VFP自動使用文件名作為默認表別名。SELECT 0USE cj 然后,可以使用別名cj在命令或函數(shù)中標識該表。 (2) 創(chuàng)建用戶自定義別名 在打開表時,使用包含ALIAS表別名子句的USE命令可以為它指定用戶自定義的表別名。SELECT 0USE cj ALIAS result 然后必須使用別名“成績”引用打開的表。 別名最多可以包括254個字母、數(shù)字或下劃線,但首字符必須是字母、漢字或下劃線。如果所提供的別名包含不支持的字符,則VFP會自動創(chuàng)建一個別名。 (3) 使用Visual FoxPro指定的別名如果使用包含AGAIN子句的USE命令同時在多個工作區(qū)中打

5、開同一個表, 在前10個工作區(qū)中指定的默認別名是工作區(qū)字母A到J,在工作區(qū)11到32767中指定的別名是W11到W32767。4. 引用其他工作區(qū)中打開的表 在表別名后加上點號分隔符“.”或“-”操作符,然后再接字段名,cj.kchresult.kchB.KCH 可以在一個表所在的工作區(qū)之外,使用表名或表別名來明確標識該表。例: USE STD_CJ IN 2DISP b.總成績 &注意命令所工作區(qū)必須有打開的數(shù)據(jù)表 5. 使用“數(shù)據(jù)工作期”窗口 “數(shù)據(jù)工作期”窗口是VFP提供的一個管理工作區(qū)的工具。使用“數(shù)據(jù)工作期”窗口,可以查看在一個VFP工作期中已打開表的列表,還可以在工作區(qū)中打

6、開表、關(guān)閉表。12.1.2 設(shè)置表間的臨時關(guān)系 在建立表間的臨時關(guān)系(關(guān)聯(lián))后,會使得一個表(從表)的記錄指針自動隨另一個表(主表)的記錄指針移動。 可以使用“數(shù)據(jù)工作期”窗口或使用SET RELATION命令建立兩個表之間的關(guān)系。SET RELATION TO INTOADDTIVE從表按關(guān)鍵字建立普通索引,并為主控索引 2. 使用使用SET RELATION命令。命令。 SET RELATION 命令可以建立兩表之間的關(guān)系,通常這兩個表具有相同字段,而且用來建立關(guān)系的表達式常常就是從表主控索引的索引表達式。【例12-1】學生可以有許多相關(guān)聯(lián)的成績記錄。如果在兩個表共同擁有的字段之間創(chuàng)建關(guān)系

7、,就能很容易地看到任何一個學生的所有成績記錄。下面的代碼中,在創(chuàng)建xs表中的“學號”字段和cj表中的“學號”索引標識之間的關(guān)聯(lián)時,使用了兩個表都有的字段“學號”。USE xs IN 1& 在1號工作區(qū)中打開xs表(主表)USE cj IN 2& 在2號工作區(qū)中打開cj表(從表)SELECT cj& 選定從表工作區(qū)INDEX ON XH TAG XHSET ORDER TO TAG xh& 使用索引標識“xh”指定從表的順序SELECT xs& 選定主表工作區(qū)SET RELATION TO xh INTO cj& 創(chuàng)建主表與從表的主控索引之間的關(guān)聯(lián)

8、SELECT cjBROWSE NOWAITSELECT xsBROWSE NOWAIT在“命令窗口”依次執(zhí)行上述命令,將打開兩個“瀏覽”窗口,移動主表的記錄指針會改變在從表中顯示的數(shù)據(jù)集合。 【例12-2】設(shè)有一個單科(VFP編程)成績表:d_cj.dbf(xh(C,10), cj(N,3),試用d_cj.dbf中的成績來修改cj.dbf中的相應成績。相應的命令如下:*lsgx_修改成績.PRGUSE TCH_PKLOCATE FOR 課程名 = VFP編程no = 課程代號SELECT 2USE d_cjINDEX ON 學號 TAG xhSELECT 1USE cj2SET RELATI

9、ON TO 學號 INTO bREPL ALL 成績 WITH b-成績 FOR 學號 = b-學號 AND 課程代號=NO 注意:有的時候需要將“多表”設(shè)為主表,“一表”設(shè)為從表。3. 關(guān)聯(lián)單個表中的記錄關(guān)聯(lián)單個表中的記錄 可以在單個表中創(chuàng)建記錄間的關(guān)系,即自引用關(guān)系。若需要的所有信息都存儲在單個表中,這種關(guān)系很有用?!纠?2-3】如果遍歷xs表中的班級,隨著記錄指針從一個班級到另一個班級的移動,每個班級的學生自動更改。 若要創(chuàng)建自引用關(guān)系,可以兩次打開同一個表,在一個工作區(qū)中打開一個表,并使用USE AGAIN命令在另外工作區(qū)中再次打開此表,然后使用索引來關(guān)聯(lián)記錄。例如,可以使用以下代碼,

10、根據(jù)“zy”(專業(yè))字段對xs表進行排序,然后創(chuàng)建索引標識ZY2,并以此建立并瀏覽一個自引用關(guān)聯(lián):lsgx_自關(guān)聯(lián).prgSELECT 0USE xs ALIAS xsSELECT 0USE xs AGAIN ALIAS xs_aINDEX ON zy TAG ZY2SET ORDER TO ZY2SELECT xsSET RELATION TO zy INTO xs_a ADDITIVESELECT xs_aBROWSE NOWAITSELECT xsBROWSE NOWAIT 在“命令窗口”依次執(zhí)行上述命令,在“數(shù)據(jù)工作期”窗口中瀏覽表xs和xs_a,當在xs“瀏覽”窗口中移動記錄指針時,

11、會自動刷新xs_a“瀏覽”窗口,并在其中顯示隸屬于選定專業(yè)的學生,如圖12-2所示。 12.2 Visual FoxPro的數(shù)據(jù)庫的數(shù)據(jù)庫數(shù)據(jù)庫提供了如下的工作環(huán)境:存儲一系列的表,在表間建立關(guān)系,設(shè)置屬性和數(shù)據(jù)有效性規(guī)則使相關(guān)聯(lián)的表協(xié)同工作。數(shù)據(jù)庫文件保存為帶.DBC擴展名的文件。數(shù)據(jù)庫可以單獨使用,也可以將它們合并成一個項目,用“項目管理器”進行管理。數(shù)據(jù)庫必須在打開后才能訪問它內(nèi)部的表。12.2.1 數(shù)據(jù)庫表與自由表 在VFP中,有兩種狀態(tài)的表:數(shù)據(jù)庫表(與數(shù)據(jù)庫相關(guān)聯(lián)的表),自由表(與數(shù)據(jù)庫無關(guān)聯(lián)的表)。相比之下,數(shù)據(jù)庫表具有如下的優(yōu)點: 長表名和表中的長字段名。 表中字段的標題和注釋

12、。 默認值、輸入掩碼和表中字段格式化。 表字段的默認控件類。 字段級規(guī)則和記錄級規(guī)則。 支持參照完整性的主關(guān)鍵字索引和表間關(guān)系。 INSERT、UPDATE或DELETE事件的觸發(fā)器。 通過把表放入數(shù)據(jù)庫中,可以減少冗余數(shù)據(jù)的存儲,保護數(shù)據(jù)的完整性;可以控制字段怎樣顯示或鍵入到字段中的值;還可以添加視圖并連接到一個數(shù)據(jù)庫中,用來更新記錄或擴充訪問遠程數(shù)據(jù)的能力。 12.2.2 創(chuàng)建數(shù)據(jù)庫 要想把數(shù)據(jù)并入數(shù)據(jù)庫中,必須先建立一個新的數(shù)據(jù)庫,然后加入需要處理的表,并定義它們之間的關(guān)系。VFP提供兩種方法建立數(shù)據(jù)庫,即使用“數(shù)據(jù)庫設(shè)計器”或使用命令。1. 打開數(shù)據(jù)庫設(shè)計器打開數(shù)據(jù)庫設(shè)計器 打開數(shù)據(jù)庫

13、設(shè)計器的方法有兩種:在項目管理器中打開和通過菜單命令打開。 數(shù)據(jù)庫建立后,自動產(chǎn)生同名但類型不同的三個文件:.DBC(數(shù)據(jù)庫文件)、.DCT(數(shù)據(jù)庫備注文件)、.DCX(數(shù)據(jù)庫索引文件)。后兩個文件依附于數(shù)據(jù)庫文件,但不可缺少,數(shù)據(jù)庫備份時一定要同時備份其他兩個文件,否則備份后的數(shù)據(jù)庫將不能使用。2. 使用數(shù)據(jù)庫建立命令使用數(shù)據(jù)庫建立命令 在命令窗口鍵入CREATE DATABASE命令 12.2.3 在數(shù)據(jù)庫中加入表 建立數(shù)據(jù)庫后的第一步是向數(shù)據(jù)庫中添加表,可以選定目前不屬于任何數(shù)據(jù)庫的表。因為一個表在同一時間內(nèi)只能屬于一個數(shù)據(jù)庫,所以必須將表先從舊的數(shù)據(jù)庫中移去后才能將它用于新的數(shù)據(jù)庫中。

14、 1. 向數(shù)據(jù)庫中添加表還可以使用命令方式將自由表添加到當前的數(shù)據(jù)庫中,命令格式是:ADD TABLE 表文件名表文件名| ? NAME 長文件名長文件名 例:add table b1 表文件名是指要添加到數(shù)據(jù)庫中去的自由表表文件名,使用?號則顯示“打開”對話框以便從中選擇添加到數(shù)據(jù)庫中去的自由表。 NAME長文件名則為表指定一個長表名,最多可以有128個字符。2. 從數(shù)據(jù)庫中移去表使用命令方式將表移出當前的數(shù)據(jù)庫,命令格式是:REMOVE TABLE 表文件名表文件名| ? DELETE例:remove table b1 說明:DELETE選項不僅把表移出數(shù)據(jù)庫,還將其從磁盤上刪除。12.2

15、.4 打開數(shù)據(jù)庫 數(shù)據(jù)庫使用之前必須先打開,打開數(shù)據(jù)庫的方法可以使用菜單方式或命令方式。1. 菜單方式 在VFP的“文件”菜單中選擇“打開”命令,在彈出的“打開”對話框中選擇“文件類型”為數(shù)據(jù)庫(*.DBC),選取需要打開的數(shù)據(jù)庫文件后,單擊“確定”按鈕,如圖12-1所示。 2. 命令方式 打開數(shù)據(jù)庫命令的格式為:OPEN DATABASE 數(shù)據(jù)庫文件名數(shù)據(jù)庫文件名? EXCLUSIVESHARED 說明: 不指定文件名而使用問號時,顯示“打開”對話框。 EXCLUSIVESHARED:數(shù)據(jù)庫以獨占或共享方式打開。如果無該項,打開方式由設(shè)置語句控制,即SET EXCLUSIVE ON(默認)O

16、FF,系統(tǒng)默認為“獨占”方式。例:OPEN DATABASE 數(shù)據(jù)1 3. 同時打開多個數(shù)據(jù)庫 VFP允許同時打開多個數(shù)據(jù)庫,但只有一個數(shù)據(jù)庫是當前數(shù)據(jù)庫,當前數(shù)據(jù)庫可在打開的數(shù)據(jù)庫之間選擇,選擇方法可以使用VFP“常用”工具欄的“數(shù)據(jù)庫”下拉列表框中選擇,如圖12-22所示。 也可以使用命令SET DATABASE TO 數(shù)據(jù)庫名選擇當前數(shù)據(jù)庫。 注意:雖然數(shù)據(jù)庫已經(jīng)打開,但要使用數(shù)據(jù)庫中的表,仍然需要打開表。例:SET DATABASE TO 數(shù)據(jù)1 MODIFY DATABASE &打開設(shè)計器12.2.5 關(guān)聯(lián)表 通過鏈接不同表的索引,“數(shù)據(jù)庫設(shè)計器”可以很方便地建立表之間的關(guān)系

17、。因為這種在數(shù)據(jù)庫中建立的關(guān)系被作為數(shù)據(jù)庫的一部分而保存起來,所以稱為永久關(guān)系。每當在“查詢設(shè)計器”或“視圖設(shè)計器”中使用表,或者在創(chuàng)建表單時所用的“數(shù)據(jù)環(huán)境設(shè)計器”中使用表時,這些永久關(guān)系將作為表間的默認鏈接。1. 準備關(guān)聯(lián) 表之間創(chuàng)建關(guān)系之前,要有一些公共的字段和索引。這樣的字段稱為主關(guān)鍵字字段和外部關(guān)鍵字字段。主關(guān)鍵字字段標識了表中的特定記錄。外部關(guān)鍵字字段標識了存于數(shù)據(jù)庫里其他表中的相關(guān)記錄。需要對主關(guān)需要對主關(guān)鍵字字段做一個主索引,對外部關(guān)鍵字字段做普通索引。鍵字字段做一個主索引,對外部關(guān)鍵字字段做普通索引。 關(guān)系的類型是由子表中所用索引的類型決定的。例如,如果子表的索引是主索引或候

18、選索引,則關(guān)系是一對一的;對于惟一索引和普通索引,將會是一個一對多的關(guān)系。3. 永久關(guān)系 上面用索引在數(shù)據(jù)庫中建立了表間的永久關(guān)系。永久關(guān)系是存儲在數(shù)據(jù)庫文件中的關(guān)系,永久關(guān)系在“數(shù)據(jù)庫設(shè)計器”中顯示為表索引間的連接線,當在數(shù)據(jù)環(huán)境中打開這些表時,永久關(guān)系也作為默認關(guān)系顯示。與SET RELATION命令設(shè)置的臨時關(guān)系不同,永久關(guān)系在每次使用表時不需要重新創(chuàng)建。但是,由于永久關(guān)系并不控制表中記錄指針間的關(guān)系,因此在開發(fā)VFP應用程序時,不僅需用永久關(guān)系,也需使用臨時的SET RELATION關(guān)系。 12.2.6 定義字段顯示通過設(shè)置數(shù)據(jù)庫表的字段屬性,可以為字段設(shè)置標題、為字段輸入注釋、為字段

19、設(shè)置默認值、設(shè)置字段的輸入掩碼和顯示格式、設(shè)置字段的控件類和庫、設(shè)置有效性規(guī)則對輸入字段的數(shù)據(jù)加以限制等。設(shè)置字段標題2. 為字段輸入注釋12.2.7 控制字段數(shù)據(jù)輸入設(shè)置默認字段值1. 例:Bh默認字段值”2007000000” 2. 設(shè)置有效性規(guī)則和有效性說明例如,限制“Bh”字段的前4位只能為“2007”,并且輸入的學號必須滿10位:SUBSTR(bh,1,4) = 2007 AND LEN(TRIM(bh) = 1012.2.8 控制記錄的數(shù)據(jù)輸入設(shè)置表的有效性規(guī)則 在向表中輸入記錄時,要想比較兩個以上的字段,或查看記錄是否滿足一定的條件,可以為表設(shè)置有效性規(guī)則。 例如,xs表中,學生

20、的年齡必須小于25歲,則可以在“表”選項卡的“有效性規(guī)則”框中鍵入下述表達式:YEAR(DATE()-YEAR(csrq) 0”,違背規(guī)則時的提示信息是“單價必須大于零”。 9) 建立表order_list和表order_detail間的永久聯(lián)系(通過“ddh”字段)。 10) 為以上建立的聯(lián)系設(shè)置參照完整性約束:更新規(guī)則為“限制”,刪除規(guī)則為“級聯(lián)”,插入規(guī)則為“限制”。 11) 關(guān)閉“訂貨管理”數(shù)據(jù)庫,然后建立自由表customer,表的內(nèi)容見表12-7??蛻籼柨蛻裘刂冯娫扖10001三益貿(mào)易公司平安大道100號66661234C10005比特電子工程公司中關(guān)村南路100號62221234B20001薩特高科技集團上地信息產(chǎn)業(yè)園87654321C20111一得信息技術(shù)公司航天城甲6號89012345B21001愛心生物工程公司生命科技園1號66889900A00112四環(huán)科技發(fā)展公司北四環(huán)路211號62221234 其結(jié)構(gòu)描述為customer(khh(C,6), khm(C,16), dz(C,20), dh(C,14)。 12) 打開“訂貨管理”數(shù)據(jù)庫,并將表customer添加到該數(shù)據(jù)庫中。 13)

溫馨提示

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

評論

0/150

提交評論