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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

8、 xsBROWSE NOWAIT在“命令窗口”依次執行上述命令,將打開兩個“瀏覽”窗口,移動主表的記錄指針會改變在從表中顯示的數據集合。 【例12-2】設有一個單科(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 RELATION TO 學號 INTO bREPL ALL 成績 W

9、ITH b-成績 FOR 學號 = b-學號 AND 課程代號=NO 注意:有的時候需要將“多表”設為主表,“一表”設為從表。3. 關聯單個表中的記錄關聯單個表中的記錄 可以在單個表中創建記錄間的關系,即自引用關系。若需要的所有信息都存儲在單個表中,這種關系很有用。【例12-3】如果遍歷xs表中的班級,隨著記錄指針從一個班級到另一個班級的移動,每個班級的學生自動更改。 若要創建自引用關系,可以兩次打開同一個表,在一個工作區中打開一個表,并使用USE AGAIN命令在另外工作區中再次打開此表,然后使用索引來關聯記錄。例如,可以使用以下代碼,根據“zy”(專業)字段對xs表進行排序,然后創建索引標

10、識ZY2,并以此建立并瀏覽一個自引用關聯:lsgx_自關聯.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 在“命令窗口”依次執行上述命令,在“數據工作期”窗口中瀏覽表xs和xs_a,當在xs“瀏覽”窗口中移動記錄指針時,會自動刷新xs_a“瀏覽”窗口,并在其中顯示隸屬于選定專

11、業的學生,如圖12-2所示。 12.2 Visual FoxPro的數據庫的數據庫數據庫提供了如下的工作環境:存儲一系列的表,在表間建立關系,設置屬性和數據有效性規則使相關聯的表協同工作。數據庫文件保存為帶.DBC擴展名的文件。數據庫可以單獨使用,也可以將它們合并成一個項目,用“項目管理器”進行管理。數據庫必須在打開后才能訪問它內部的表。12.2.1 數據庫表與自由表 在VFP中,有兩種狀態的表:數據庫表(與數據庫相關聯的表),自由表(與數據庫無關聯的表)。相比之下,數據庫表具有如下的優點: 長表名和表中的長字段名。 表中字段的標題和注釋。 默認值、輸入掩碼和表中字段格式化。 表字段的默認控件

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

13、。 數據庫建立后,自動產生同名但類型不同的三個文件:.DBC(數據庫文件)、.DCT(數據庫備注文件)、.DCX(數據庫索引文件)。后兩個文件依附于數據庫文件,但不可缺少,數據庫備份時一定要同時備份其他兩個文件,否則備份后的數據庫將不能使用。2. 使用數據庫建立命令使用數據庫建立命令 在命令窗口鍵入CREATE DATABASE命令 12.2.3 在數據庫中加入表 建立數據庫后的第一步是向數據庫中添加表,可以選定目前不屬于任何數據庫的表。因為一個表在同一時間內只能屬于一個數據庫,所以必須將表先從舊的數據庫中移去后才能將它用于新的數據庫中。 1. 向數據庫中添加表還可以使用命令方式將自由表添加到

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

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

16、SE 數據1 3. 同時打開多個數據庫 VFP允許同時打開多個數據庫,但只有一個數據庫是當前數據庫,當前數據庫可在打開的數據庫之間選擇,選擇方法可以使用VFP“常用”工具欄的“數據庫”下拉列表框中選擇,如圖12-22所示。 也可以使用命令SET DATABASE TO 數據庫名選擇當前數據庫。 注意:雖然數據庫已經打開,但要使用數據庫中的表,仍然需要打開表。例:SET DATABASE TO 數據1 MODIFY DATABASE &打開設計器12.2.5 關聯表 通過鏈接不同表的索引,“數據庫設計器”可以很方便地建立表之間的關系。因為這種在數據庫中建立的關系被作為數據庫的一部分而保存起來,所

17、以稱為永久關系。每當在“查詢設計器”或“視圖設計器”中使用表,或者在創建表單時所用的“數據環境設計器”中使用表時,這些永久關系將作為表間的默認鏈接。1. 準備關聯 表之間創建關系之前,要有一些公共的字段和索引。這樣的字段稱為主關鍵字字段和外部關鍵字字段。主關鍵字字段標識了表中的特定記錄。外部關鍵字字段標識了存于數據庫里其他表中的相關記錄。需要對主關需要對主關鍵字字段做一個主索引,對外部關鍵字字段做普通索引。鍵字字段做一個主索引,對外部關鍵字字段做普通索引。 關系的類型是由子表中所用索引的類型決定的。例如,如果子表的索引是主索引或候選索引,則關系是一對一的;對于惟一索引和普通索引,將會是一個一對

18、多的關系。3. 永久關系 上面用索引在數據庫中建立了表間的永久關系。永久關系是存儲在數據庫文件中的關系,永久關系在“數據庫設計器”中顯示為表索引間的連接線,當在數據環境中打開這些表時,永久關系也作為默認關系顯示。與SET RELATION命令設置的臨時關系不同,永久關系在每次使用表時不需要重新創建。但是,由于永久關系并不控制表中記錄指針間的關系,因此在開發VFP應用程序時,不僅需用永久關系,也需使用臨時的SET RELATION關系。 12.2.6 定義字段顯示通過設置數據庫表的字段屬性,可以為字段設置標題、為字段輸入注釋、為字段設置默認值、設置字段的輸入掩碼和顯示格式、設置字段的控件類和庫、

19、設置有效性規則對輸入字段的數據加以限制等。設置字段標題2. 為字段輸入注釋12.2.7 控制字段數據輸入設置默認字段值1. 例:Bh默認字段值”2007000000” 2. 設置有效性規則和有效性說明例如,限制“Bh”字段的前4位只能為“2007”,并且輸入的學號必須滿10位:SUBSTR(bh,1,4) = 2007 AND LEN(TRIM(bh) = 1012.2.8 控制記錄的數據輸入設置表的有效性規則 在向表中輸入記錄時,要想比較兩個以上的字段,或查看記錄是否滿足一定的條件,可以為表設置有效性規則。 例如,xs表中,學生的年齡必須小于25歲,則可以在“表”選項卡的“有效性規則”框中鍵

20、入下述表達式:YEAR(DATE()-YEAR(csrq) 0”,違背規則時的提示信息是“單價必須大于零”。 9) 建立表order_list和表order_detail間的永久聯系(通過“ddh”字段)。 10) 為以上建立的聯系設置參照完整性約束:更新規則為“限制”,刪除規則為“級聯”,插入規則為“限制”。 11) 關閉“訂貨管理”數據庫,然后建立自由表customer,表的內容見表12-7。客戶號客戶名地址電話C10001三益貿易公司平安大道100號66661234C10005比特電子工程公司中關村南路100號62221234B20001薩特高科技集團上地信息產業園87654321C20111一得信息技術公司航天城甲6號89012345B21001愛心生物工程公司生命科技園1號66889900A00112四環科技發展公司北四環路211號62221234 其結構描述為customer(khh(C,6), khm(C,16), dz(C,20), dh(C,14)。 12) 打開“訂貨管理”數據庫,并將表customer添加到該數據庫中。 13) 為cu

溫馨提示

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

最新文檔

評論

0/150

提交評論