Visual FoxPro程序設(shè)計基礎(chǔ)教程(第二版))第5章_第1頁
Visual FoxPro程序設(shè)計基礎(chǔ)教程(第二版))第5章_第2頁
Visual FoxPro程序設(shè)計基礎(chǔ)教程(第二版))第5章_第3頁
Visual FoxPro程序設(shè)計基礎(chǔ)教程(第二版))第5章_第4頁
Visual FoxPro程序設(shè)計基礎(chǔ)教程(第二版))第5章_第5頁
已閱讀5頁,還剩98頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、2022-5-311第第5章章 使用視圖查詢和修改數(shù)據(jù)使用視圖查詢和修改數(shù)據(jù) 創(chuàng)建視圖 使用視圖 在視圖中更新數(shù)據(jù) 集成視圖 處理游離數(shù)據(jù) 優(yōu)化視圖性能 小結(jié)2022-5-3125.1 創(chuàng)建視圖 使用向?qū)?chuàng)建視圖 創(chuàng)建本地視圖 用已有的SQL SELECT語句創(chuàng)建視圖 修改視圖 重新命名視圖 刪除視圖 創(chuàng)建多表視圖 訪問遠(yuǎn)程數(shù)據(jù)2022-5-313創(chuàng)建視圖 視圖是VFP 6.0中為應(yīng)用程序和用戶提供的另一種定制的、可更新的數(shù)據(jù)集合,它具備了表和查詢的特點并被保存在數(shù)據(jù)庫中。 視圖為用戶提供了瀏覽、使用VFP 6.0表中數(shù)據(jù)的一種有力工具。 視圖和查詢有很多類似處,創(chuàng)建視圖與創(chuàng)建查詢的步驟相似:

2、選擇要包含在視圖中的表和字段,指定與表的連接條件,指定過濾器選擇特定的記錄。 與查詢不同的是,視圖可選擇如何將在視圖中做的數(shù)據(jù)修改傳給原始文件,或建立視圖的基表。 2022-5-314創(chuàng)建視圖(續(xù)) 創(chuàng)建視圖時,VFP在當(dāng)前數(shù)據(jù)庫中保存一個視圖定義,該定義包括圖中的表名、字段名以及它們的屬性設(shè)置。 在使用視圖時, VFP根據(jù)視圖定義構(gòu)造一條SQL語句,定義視圖的數(shù)據(jù)集合。 在VFP中,可以創(chuàng)建兩種類型的視圖:本地視圖和遠(yuǎn)程視圖。 本地視圖利用VFP的SQL語句從表或者其他視圖中選取信息; 遠(yuǎn)程視圖利用遠(yuǎn)程SQL語句從遠(yuǎn)程ODBC數(shù)據(jù)源表中選取信息。 可以將一個或多個遠(yuǎn)程視圖加入到本地視圖中,以

3、便能在同一個視圖中同時訪問VFP數(shù)據(jù)和遠(yuǎn)程ODBC數(shù)據(jù)源中的數(shù)據(jù)。 2022-5-3155.1.1 使用向?qū)?chuàng)建視圖 用戶可以使用本地視圖向?qū)?chuàng)建本地視圖。 若要在ODBC數(shù)據(jù)源的表上建立可更新的視圖,可以使用遠(yuǎn)程視圖向?qū)А?使用向?qū)?chuàng)建視圖的步驟如下: (1)在項目管理器中選擇一個數(shù)據(jù)庫。(2)選定“本地視圖”或“遠(yuǎn)程視圖”,然后選擇“新建”按鈕。(3)選擇“視圖向?qū)А卑粹o。(4)按照向?qū)聊簧系闹噶畈僮鳌?2022-5-3165.1.2 創(chuàng)建本地視圖 創(chuàng)建本地視圖,可以采用以下方式之一進行: 在項目管理器中選定一個數(shù)據(jù)庫,單擊“數(shù)據(jù)庫”符號旁的加號;選定“本地視圖”,然后單擊“新建”按鈕,

4、打開“視圖設(shè)計器”。 在數(shù)據(jù)庫已打開時,使用CREATE SQL VIEW命令顯示“視圖設(shè)計器”。 使用帶有AS子句的CREATE SQL VIEW命令。 2022-5-3175.1.2 創(chuàng)建本地視圖(續(xù)) 例如,可以使用以下代碼創(chuàng)建包含dz(讀者信息)表中所有字段的視圖,運行結(jié)果如圖5-1所示。CREATE SQL VIEW dz-view AS SELECT *;FROM 圖書館管理!dz圖圖5-1 讀者信息視圖讀者信息視圖2022-5-3185.1.2 創(chuàng)建本地視圖(續(xù)) 新視圖的名稱將顯示在項目管理器中。 如果打開“數(shù)據(jù)庫設(shè)計器”,會看到視圖的顯示方式與表在分層結(jié)構(gòu)中的顯示方式相同,所

5、不同的是視圖名代替了表名。 在創(chuàng)建視圖時,如果表名前限定有數(shù)據(jù)庫名,VFP將在已打開的數(shù)據(jù)庫中(包括當(dāng)前的和所有非當(dāng)前的數(shù)據(jù)庫)及默認(rèn)搜索路徑中尋找該表。 如果在視圖定義中沒有給表限定數(shù)據(jù)庫名,那么在使用該視圖前,數(shù)據(jù)庫必須打開。 2022-5-3195.1.3 用已有的SQL SELECT語句創(chuàng)建視圖 可以使用宏替換將SQL SELECT語句存入一個變量,再用CREATE SQL VIEW命令的AS子句來調(diào)用。 例如,下面的代碼將一條SQL SELECT語句存入dz-jy變量,然后用它創(chuàng)建一個新視圖:dz-jy = SELECT dz.dzxm, dz.dzbh, jy.jybh, jy.j

6、yri;FROM dz, jy WHERE jy.dzbh = dz. dzbh“CREATE SQL VIEW dz-jy AS &dz-jy 2022-5-31105.1.4 修改視圖 使用項目管理器或命令語言,可在“視圖設(shè)計器”中修改已有的視圖。 若要以編程方式修改視圖的SQL命令串,則必須創(chuàng)建新視圖,保存視圖定義并覆蓋舊視圖。 注意:用編程方式創(chuàng)建視圖時有一個小技巧,即在“視圖設(shè)計器”中,可打開一個已有的視圖,復(fù)制只讀的SQL字符串,并粘貼到代碼中。 2022-5-31115.1.4 修改視圖(續(xù)) 若要在“視圖設(shè)計器”中修改視圖,可以采用以下方式之一進行: 在項目管理器中選擇

7、視圖名,再選擇“修改”按鈕,打開“視圖設(shè)計器”。 先打開數(shù)據(jù)庫,再使用帶視圖名的MODIFY VIEW命令。 在“視圖設(shè)計器”中,可使用“查詢”菜單或“視圖設(shè)計器”工具欄將新表添加到視圖中。 下面的代碼在“視圖設(shè)計器”中顯示dz-view視圖。OPEN DATABASE 圖書館管理MODIFY VIEW dz-view 2022-5-31125.1.5 重新命名視圖 可以使用項目管理器或RENAME VIEW命令重新命名視圖,采用以下方式之一進行: 在項目管理器中先選擇一個數(shù)據(jù)庫,再選擇要重命名的視圖,然后從“項目”菜單中選擇“重命名文件”。 使用RENAME VIEW命令。 例如,下面的代碼

8、將視圖dz-view重命名為“讀者視圖”:RENAME VIEW dz-view TO 讀者視圖 2022-5-31135.1.6 刪除視圖 可以使用項目管理器或DELETE VIEW命令從數(shù)據(jù)庫中刪除視圖定義。 刪除視圖前,包含此視圖的數(shù)據(jù)庫必須已打開并已設(shè)置為當(dāng)前數(shù)據(jù)庫。 若要刪除視圖,可以: 在項目管理器中先選擇一個數(shù)據(jù)庫,再選定要刪除的視圖,然后選擇“移去”; 或者使用DELETE VIEW或DROP VIEW命令。 例如,下面的代碼從數(shù)據(jù)庫中刪除dz-view視圖和sj-view視圖: DELETE VIEW dz-viewDROP VIEW sj-view & ANSI S

9、QL標(biāo)準(zhǔn)語法 2022-5-31145.1.7 創(chuàng)建多表視圖 要想訪問存儲在不同表中的相關(guān)信息,可以創(chuàng)建一個視圖并加入兩個或更多的表,或在已有的視圖中加入表。 可以使用“視圖設(shè)計器”或CREATE SQL VIEW命令添加表。加入表后,使用表之間定義的連接條件,進一步對視圖結(jié)果進行控制。 要創(chuàng)建多表視圖,可以指定以下方式之一進行: 在項目管理器中,創(chuàng)建一個視圖,并在“視圖設(shè)計器”中加入需要的表。 打開數(shù)據(jù)庫,用CREATE SQL VIEW命令將表名及連接條件加入FROM子句中。2022-5-31151. 定義和修改連接條件 只使用CREATE SQL VIEW命令將表加入視圖,而不定義相應(yīng)的

10、連接條件,會得到表之間的“叉乘”,即表中記錄的任意可能組合。 需要在語句的FROM或WHERE子句指定連接條件。只有符合連接條件的不同表中的記錄才被組合在一起。 如果表間存在永久關(guān)系,將自動用作連接條件。 典型情況下,可使用由表間的主關(guān)鍵字和外部關(guān)鍵字建立的關(guān)系,定義連接條件。 在連接條件中比較它們公有的字段值(通常使用相等作為比較條件)。 例如,要查閱有關(guān)讀者信息,要求包括讀者的借閱信息,可創(chuàng)建一個由dz表和jy 表生成的視圖。在這個例子中,dz表和jy表有同一字段dzbh。 2022-5-31161. 定義和修改連接條件(續(xù)) 若要在視圖中定義連接條件,可以采用以下方式之一: 在項目管理器

11、中,創(chuàng)建和修改視圖,并在“視圖設(shè)計器”中加入需要的表。 打開數(shù)據(jù)庫,用CREATE SQL VIEW命令將表名及連接條件加入FROM子句。 圖5-2說明了視圖設(shè)計器中指定的內(nèi)部連接及它在SELECT-SQL語句中的表示。圖圖5-2 視圖設(shè)計器視圖設(shè)計器2022-5-31171. 定義和修改連接條件(續(xù)) 以下代碼創(chuàng)建一個如上例描述的新視圖,用FROM子句指定視圖的連接條件:OPEN DATABASE 圖書館管理CREATE SQL VIEW 讀者借閱視圖AS;SELECT * FROM dz;INNER JOIN jy; ON dz.dzbh = jy.dzbh 比較第1章的表1-3(借閱信息

12、表)可以發(fā)現(xiàn),“讀者借閱視圖”的dzbh與表1-3的dzbh排列順序是一致的 圖圖5-3 讀者借閱視圖讀者借閱視圖2022-5-31181. 定義和修改連接條件(續(xù)) 連接條件有以下幾個要素:連接類型,建立連接的字段和用于連接字段的比較操作符。 在上面的例子中,連接的類型為內(nèi)部連接,表讀者信息的記錄只有與借閱信息表的一個或多個記錄相匹配,才會被包含在結(jié)果中。 若要改變視圖的結(jié)果以滿足特定需求,可指定: 建立連接的字段。 字段間的比較操作符。 如果視圖中有兩個表,須考慮連接的順序。 連接的類型。 2022-5-31191. 定義和修改連接條件(續(xù)) 在主關(guān)鍵字和外部關(guān)鍵字以外的字段間建立連接在特

13、定的實例中也很有用,但并不常用。 通過比較操作符,可以控制比較和返回的記錄,這種方式類似于過濾器。 例如,如果連接條件中使用的是日期型字段,可選用適當(dāng)?shù)谋容^操作符,使得返回結(jié)果中只包括某段時間內(nèi)的記錄。 選擇不同的連接類型,可以擴展查詢結(jié)果,使結(jié)果中既包括與連接條件匹配的記錄,也包括與連接條件不匹配的記錄。如果視圖中不止兩個表,還可以通過改變FROM子句中的連接順序改變結(jié)果。 2022-5-31201. 定義和修改連接條件(續(xù)) 可用“視圖設(shè)計器”和編程語言修改視圖中的連接類型。 若要修改連接類型,可以采用以下方式之一: 選擇“聯(lián)接”選項卡。 雙擊連接線。 打開數(shù)據(jù)庫,用CREATE SQL

14、VIEW 命令將表名和連接條件加入FROM 子句。 2022-5-31212. 在結(jié)果中包含不匹配記錄 如果要在結(jié)果中包含不匹配的行,可用外部連接。 當(dāng)使用外部連接,不匹配行的空字段將返回NULL值。以下代碼生成的視圖如圖5-4所示。OPEN DATABASE 圖書館管理CREATE SQL VIEW 讀者借閱視圖2 AS;SELECT * FROM dz;LEFT OUTER JOIN jy; ON dz.dzbh = jy.dzbh比較圖5-3和圖5-4可以發(fā)現(xiàn),在圖5-4中多了沒有借書的讀者,例如,讀者“劉哲”。 圖圖5-4 讀者借閱視圖讀者借閱視圖22022-5-31222. 在結(jié)果中

15、包含不匹配記錄(續(xù)) 若要控制那些包含在視圖中的不匹配記錄,可選擇表5-1的連接類型。表表5-1 控制視圖中不匹配記錄可選擇的連接類型控制視圖中不匹配記錄可選擇的連接類型 若要請使用只返回完全滿足連接條件的記錄內(nèi)部連接返回JOIN關(guān)鍵字左側(cè)表中的所有記錄及右側(cè)表中匹配的記錄左外部連接返回JOIN關(guān)鍵字右側(cè)表中的所有記錄及左側(cè)表中匹配的記錄右外部連接返回兩個表中的匹配和不匹配的所有記錄全外部連接2022-5-31233. 定義多表間的連接條件 如果創(chuàng)建包含兩個以上表的視圖,可通過改變連接條件的順序來改變結(jié)果。 例如,要查找有關(guān)被讀者借閱的書籍的信息,可創(chuàng)建一個基于書籍信息表、讀者信息表和借閱信息

16、表的視圖,在它們公有的字段間建立內(nèi)部連接:讀者信息表和借閱信息表都有讀者編號字段,借閱信息表和書籍信息表都有書籍編號字段。此視圖基于如下的SQL語句: OPEN DATABASE 圖書館管理CREATE SQL VIEW 書籍-讀者視圖 AS;SELECT * FROM sj;INNER JOIN jy;ON sj.sjbh = jy.sjbh;INNER JOIN dz;ON dz.dzbh = jy.dzbh 2022-5-31244. 在WHERE子句中使用連接 可以在WHERE子句中指定連接條件,但不能像在FROM子句的連接中那樣指定連接類型。對于遠(yuǎn)程視圖,連接條件通常出現(xiàn)在WHERE

17、子句中。 以下代碼創(chuàng)建的視圖與前例相同,使用WHERE子句指定此視圖的連接條件:OPEN DATABASE 圖書館管理CREATE SQL VIEW 書籍-讀者視圖 AS;SELECT * FROM sj, jy, dz WHERE sj.sjbh = jy.sjbh AND jy.dzbh = dz.dzbh 2022-5-31255.1.8 訪問遠(yuǎn)程數(shù)據(jù) 若要使用遠(yuǎn)程服務(wù)器上的數(shù)據(jù),可以創(chuàng)建遠(yuǎn)程視圖。 為了創(chuàng)建遠(yuǎn)程視圖,必須首先連接一個數(shù)據(jù)源。 1. 連接遠(yuǎn)程數(shù)據(jù)源 一個遠(yuǎn)程數(shù)據(jù)源通常是一個遠(yuǎn)程服務(wù)器,已為它在本地安裝了ODBC驅(qū)動程序,并設(shè)置了ODBC數(shù)據(jù)源的名稱。 為得到有效的數(shù)據(jù)源,

18、必須在本地安裝ODBC。從內(nèi)部定義數(shù)據(jù)源和連接。 2022-5-31262. 定義連接 在VFP中,可以在數(shù)據(jù)庫中創(chuàng)建并保存一個命名連接的定義,以便在創(chuàng)建遠(yuǎn)程視圖時按其名稱進行引用,而且還可以通過設(shè)置命名連接的屬性來優(yōu)化VFP與遠(yuǎn)程數(shù)據(jù)源的通信。 當(dāng)激活遠(yuǎn)程視圖時,視圖連接將成為通向遠(yuǎn)程數(shù)據(jù)源的管道。 若要創(chuàng)建命名連接,采用以下方式之一進行: 在項目管理器中,先從“數(shù)據(jù)庫”列表中選擇“聯(lián)接”,然后再單擊“新建”按鈕,打開“聯(lián)接設(shè)計器”。 先打開數(shù)據(jù)庫,再使用CREATE CONNECTION命令打開“聯(lián)接設(shè)計器” 。 使用帶有連接名稱的CREATE CONNECTION命令。 2022-5-3

19、1272. 定義連接(續(xù)) 例如,為了從ODBC數(shù)據(jù)源獲取所需的有關(guān)信息,可以用以下代碼在圖書館管理數(shù)據(jù)庫中創(chuàng)建連接:OPEN DATABASE 圖書館管理CREATE CONNECTION remote_01 DATASOURCE sqlremote userid password 這時,項目管理器的“聯(lián)接”中將出現(xiàn)remote_01。 在數(shù)據(jù)庫中,創(chuàng)建命名連接并不會用到任何網(wǎng)絡(luò)或遠(yuǎn)程資源,因為VFP只在使用視圖時才激活連接。 在激活連接之前,命名連接只作為一條連接的定義,在數(shù)據(jù)庫的.dbc文件中占據(jù)一行。當(dāng)使用遠(yuǎn)程視圖時,VFP根據(jù)視圖中引用的命名連接,創(chuàng)建一個活動連接與遠(yuǎn)程數(shù)據(jù)源相連,然

20、后將此活動連接作為管道向遠(yuǎn)程數(shù)據(jù)源發(fā)送數(shù)據(jù)請求。 2022-5-31283. 命名連接和數(shù)據(jù)源的使用優(yōu)先權(quán) 在使用帶有CONNECTION子句的CREATE SQL VIEW命令時,既可以使用連接的名稱也可以使用數(shù)據(jù)源的名稱。 VFP首先在當(dāng)前數(shù)據(jù)庫中搜索具有此名稱的連接,如果該數(shù)據(jù)庫中不存在此命名連接, VFP再根據(jù)此名稱查找已建立的ODBC數(shù)據(jù)源。如果當(dāng)前數(shù)據(jù)庫中的命名連接與用戶系統(tǒng)上的ODBC數(shù)據(jù)源同名,則VFP將首先查找并使用命名連接。 2022-5-31294. 顯示ODBC注冊提示 當(dāng)使用一個視圖而又未充分指定其連接注冊信息時, VFP將顯示一個與數(shù)據(jù)源相關(guān)的對話框,提示輸入漏掉的

21、信息。 在進行連接時,也可以控制VFP是否提示輸入未指定的信息。 若要控制ODBC注冊提示的顯示,可以采用以下方式之一進行: 在項目管理器中先選擇連接名,再選擇“修改”按鈕,打開“聯(lián)接設(shè)計器”。 在“顯示ODBC注冊提示”區(qū)域中,選擇一個選項。 使用DBSETPROP()或SQLSETPROP()函數(shù)的DispLogin屬性。2022-5-31305. 使用已有的連接 可以使用已有的命名連接來創(chuàng)建遠(yuǎn)程視圖。 使用項目管理器或DISPLAY CONNECTIONS命令可以在數(shù)據(jù)庫中看到一個可用連接的列表。 若要了解已有連接的情況,可在項目管理器中先選擇一個數(shù)據(jù)庫,然后選擇“聯(lián)接”;或使用DISP

22、LAY CONNECTIONS命令。例如,下面的代碼顯示圖書館管理在數(shù)據(jù)庫中的連接:OPEN DATABASE 圖書館管理DISPLAY CONNECTIONS 2022-5-31316. 創(chuàng)建遠(yuǎn)程視圖 在建立了有效的數(shù)據(jù)源或命名連接之后,就可以使用項目管理器或以編程方式來創(chuàng)建遠(yuǎn)程視圖。 遠(yuǎn)程視圖與本地視圖類似,只是在定義它時需要加入連接名稱或數(shù)據(jù)源名稱。 遠(yuǎn)程視圖的SQL語句使用相應(yīng)服務(wù)器上的語法。 若要創(chuàng)建遠(yuǎn)程視圖,可以采用以下方式之一進行: 在項目管理器中選擇一個數(shù)據(jù)庫,選擇“遠(yuǎn)程視圖”,然后選擇“新建”按鈕,打開“視圖設(shè)計器”。 使用帶有REMOTE和(或)CONNECTION子句的C

23、REATE SQL VIEW命令。2022-5-31326. 創(chuàng)建遠(yuǎn)程視圖(續(xù)) 如果使用了帶有CONNECTION子句的CREATE SQL VIEW命令,就可以不加入REMOTE關(guān)鍵字 VFP根據(jù)CONNECTION關(guān)鍵字是否存在來判斷視圖是否為遠(yuǎn)程 例如,若將圖書館管理數(shù)據(jù)庫中的書籍信息表放到遠(yuǎn)程服務(wù)器上,則可用下面的代碼創(chuàng)建此表的遠(yuǎn)程視圖:OPEN DATABASE 圖書館管理CREATE SQL VIEW書籍遠(yuǎn)程視圖;CONNECTION remote_01;AS SELECT * FROM sj 2022-5-31336. 創(chuàng)建遠(yuǎn)程視圖(續(xù)) 在創(chuàng)建遠(yuǎn)程視圖時,可以使用數(shù)據(jù)源而不使

24、用命名連接。 在使用帶有REMOTE子句的CREATE SQL VIEW命令時,也可以忽略連接名或數(shù)據(jù)源名,這時VFP將顯示“選擇連接或數(shù)據(jù)源”對話框,用戶可以在這個對話框中選擇一個有效的連接或數(shù)據(jù)源。 創(chuàng)建了視圖后,打開“數(shù)據(jù)庫設(shè)計器”,可看到視圖在分層結(jié)構(gòu)中與表具有相同的顯示方式,只不過是視圖的名稱和圖標(biāo)代替了表的名稱和圖標(biāo)。2022-5-3134第第5章章 使用視圖查詢和修改數(shù)據(jù)使用視圖查詢和修改數(shù)據(jù) 創(chuàng)建視圖 使用視圖 在視圖中更新數(shù)據(jù) 集成視圖 處理游離數(shù)據(jù) 優(yōu)化視圖性能 小結(jié)2022-5-31355.2 使用視圖 限制視圖的取值范圍 創(chuàng)建參數(shù)化視圖 提示用戶輸入?yún)?shù)值 打開視圖的多

25、個實例 顯示視圖結(jié)構(gòu) 創(chuàng)建視圖索引 創(chuàng)建視圖的臨時關(guān)系 設(shè)置視圖屬性和連接屬性 關(guān)閉視圖的基表 2022-5-3136使用視圖 視圖建立之后,用戶不但可以用它來顯示和更新數(shù)據(jù),而且還可以通過調(diào)整它的屬性來提高性能。 處理視圖類似于處理表,可以采用下列步驟進行各種操作: 使用USE命令并指定視圖名來打開一個視圖。 使用USE命令關(guān)閉視圖。 在“瀏覽”窗口中,顯示視圖記錄。 在“數(shù)據(jù)工作期”窗口中顯示打開的視圖。 在文字框、表格控件、表單或報表中使用視圖作為數(shù)據(jù)源。 2022-5-3137使用視圖(續(xù)) 要使用一個視圖,可以采用以下方式之一: 在項目管理器中先選擇一個數(shù)據(jù)庫,再選擇視圖名,然后選擇

26、“瀏覽”按鈕,在“瀏覽”窗口中顯示視圖。 使用USE命令以編程方式訪問視圖。 下面的代碼在瀏覽窗口中顯示讀者借閱視圖:OPEN DATABASE 圖書館管理USE 讀者借閱視圖BROWSE 2022-5-3138使用視圖(續(xù)) 一個視圖在使用時,將作為臨時表在自己的工作區(qū)中打開。 如果此視圖基于本地表,則在VFP的另一個工作區(qū)中同時打開基表。 視圖的基表是指由SELECT-SQL語句訪問的表,此語句在創(chuàng)建視圖時包含在CREATE SQL VIEW命令中。 在上面的示例中,使用讀者借閱視圖的同時,讀者信息表和借閱信息表也自動打開。 圖5-5所示為“數(shù)據(jù)工作期”對話框示例。 2022-5-3139

27、使用視圖(續(xù)) 如果此視圖基于遠(yuǎn)程表,則基表將不在工作區(qū)中打開,而只在數(shù)據(jù)工作期窗口中顯示遠(yuǎn)程視圖的名稱。 圖圖5-5 “數(shù)據(jù)工作期數(shù)據(jù)工作期”對話框?qū)υ捒?2022-5-31405.2.1 限制視圖的取值范圍 在訪問遠(yuǎn)程數(shù)據(jù)源時,很可能會訪問大量數(shù)據(jù)。 可以在視圖中限定被選數(shù)據(jù)的范圍,以便在某一時刻只出現(xiàn)所需的記錄,從而降低網(wǎng)絡(luò)通信量,改善視圖性能。 例如,如果想要瀏覽某個讀者的基本情況時,可以僅下載想要的讀者記錄來提高性能。 一種限定視圖作用范圍的方法是在視圖的SQL語句中加入WHERE子句。 若要查詢北京讀者的記錄,可以創(chuàng)建如下SQL WHERE 子句,運行結(jié)果如圖5-6所示。 SELE

28、CT * FROM dz WHERE jyzz = 北京 2022-5-31415.2.2 創(chuàng)建參數(shù)化視圖 參數(shù)化視圖也可以用來限定視圖的作用范圍,而使用參數(shù)化視圖可以避免每取一部分記錄就需要單獨創(chuàng)建一個視圖的情況。 參數(shù)化視圖在視圖的SQL SELECT語句中加一條WHERE子句,從而僅下載那些符合WHERE子句條件的記錄,其中的子句是根據(jù)所提供的參數(shù)值建立的,參數(shù)值可以在運行時傳遞,也可以通過編程方式傳遞。 對于前面的示例,可以創(chuàng)建一個通用視圖,在需要得到某一個城市的讀者記錄時,只需鍵入相應(yīng)城市的名稱即可。2022-5-31425.2.2 創(chuàng)建參數(shù)化視圖(續(xù)) 創(chuàng)建參數(shù)化視圖,可以采用以下

29、方式之一: 首先打開“視圖設(shè)計器”,然后從“查詢”菜單中選擇“視圖參數(shù)”項。 使用CREATE SQL VIEW 命令并帶上“?”符號和一個參數(shù)。 這個參數(shù)可以是一個VFP的表達(dá)式,計算出來的值將作為視圖SQL 語句的組成部分。若計算無效,VFP將提示輸入該參數(shù)值。 2022-5-31435.2.2 創(chuàng)建參數(shù)化視圖(續(xù)) 例如,如果將圖書館管理數(shù)據(jù)庫中的讀者信息表放在遠(yuǎn)程服務(wù)器上,則可用下面的代碼創(chuàng)建一個遠(yuǎn)程參數(shù)化視圖。OPEN DATABASE 圖書館管理CREATE SQL VIEW 男讀者視圖;CONNECTION remote_01;AS SELECT * FROM dz;WHERE

30、dz.dzxb = ?dzxb 在使用這個視圖時,也可以通過編程方式來提供? dzxb參數(shù)值。例如,可以輸入如下代碼:dzxb = 男USE 圖書館管理!男讀者視圖 IN 0BROWSE 2022-5-31445.2.2 創(chuàng)建參數(shù)化視圖(續(xù)) 這時,在男讀者視圖的瀏覽窗口中,VFP顯示男讀者的記錄,如圖5-7所示。 注意:注意:如果參數(shù)是表達(dá)式,則用圓括號將該表達(dá)式括起來,如果參數(shù)是表達(dá)式,則用圓括號將該表達(dá)式括起來,使整個表達(dá)式被當(dāng)作參數(shù)的一部分進行計算。使整個表達(dá)式被當(dāng)作參數(shù)的一部分進行計算。圖圖5-7 男讀者視圖男讀者視圖2022-5-31455.2.3 提示用戶輸入?yún)?shù)值 如果要求輸入

31、的參數(shù)不是一個變量或表達(dá)式,那么用戶也許會希望得到一個提示。 可以將字符串用引號括起來并以此作為視圖參數(shù)。 若在創(chuàng)建視圖參數(shù)時使用“?”符號,后面加上一個用單引號括起的字符串,VFP就不把該字符串看作一個表達(dá)式,而是在運行時將其作為提示,提示用戶輸入?yún)?shù)值。 例如,下面的代碼創(chuàng)建了一個遠(yuǎn)程參數(shù)化視圖,提示用戶為? dzxb參數(shù)提供一個值。OPEN DATABASE 圖書館管理CREATE SQL VIEW 女讀者視圖 ; CONNECTION remote_01 ;AS SELECT * FROM dz ;WHERE dz.dzxb = ?dzxbUSE 女讀者視圖 2022-5-31465.

32、2.3 提示用戶輸入?yún)?shù)值(續(xù)) 在使用上例的視圖時,顯示一個“視圖參數(shù)”對話框,在對話框中會提示:為dzxb輸入值。 在輸入有效的性別值后,VFP將檢索與此性別值相匹配的記錄。 若在上例中輸入“女”,然后瀏覽女讀者視圖,將在瀏覽窗口中看到相應(yīng)的讀者記錄,如圖5-8所示。 注意:注意:使用加引使用加引號的字符串作為號的字符串作為視圖參數(shù),可以視圖參數(shù),可以確保確保VFP在要求在要求得到參數(shù)時,總得到參數(shù)時,總是對用戶作出提是對用戶作出提示。示。 圖圖5-8 女讀者視圖女讀者視圖2022-5-31475.2.4 打開視圖的多個實例 與可在多個工作區(qū)中打開同一個表一樣,可以在不同的工作區(qū)中打開一個

33、視圖的多個實例。 與表不同的是:在默認(rèn)情況下,每次使用視圖時,都要去取一個新的數(shù)據(jù)集合。 若要在多個工作區(qū)中打開一個視圖,可以采用以下方式之一進行: 在項目管理器中先選擇視圖名,然后單擊“瀏覽”按鈕,在“瀏覽”窗口中顯示該視圖,重復(fù)這一過程,在其他工作區(qū)中打開此視圖。 在“數(shù)據(jù)工作期”窗口中,單擊“打開”按鈕,然后選擇視圖名。重復(fù)這一過程,在其他工作區(qū)中打開此視圖。 使用USE命令以編程方式訪問視圖。2022-5-31485.2.4 打開視圖的多個實例(續(xù)) 在使用USE命令以編程方式訪問視圖時,不必重新查詢數(shù)據(jù)源就可以打開視圖的另一個實例。 若要不下載數(shù)據(jù)再次使用視圖,可以: 在USE命令中

34、,使用NOREQUERY子句; 或者在USE命令中,使用AGAIN子句。 下面的代碼使用NOREQUERY子句,在兩個瀏覽窗口中顯示從女讀者視圖第一個實例中得到的臨時表,而不重新查詢遠(yuǎn)程數(shù)據(jù)源:OPEN DATABASE 圖書館管理CREATE SQL VIEW女讀者視圖;CONNECTION remote_01;AS SELECT * FROM dzUSE 女讀者視圖 BROWSESELECT 0USE 女讀者視圖 NOREQUERYBROWSE 2022-5-31495.2.4 打開視圖的多個實例(續(xù)) 在使用NOREQUERY子句時,可以指定一個工作期編號。 如果不指定工作期編號,VFP

35、將對全部工作期進行搜索以查找結(jié)果集合。 若找到了打開的結(jié)果集合,就將在這個結(jié)果集合上再次打開一個臨時表;若沒找到打開的結(jié)果集合,則為該視圖取一個新的結(jié)果集合。 和處理表一樣,若未找到視圖,則打開一個新的視圖臨時表。 2022-5-31505.2.4 打開視圖的多個實例(續(xù)) 如果要求VFP只在當(dāng)前工作期內(nèi)搜索已打開的視圖結(jié)果集合,可以使用AGAIN子句。 下面的代碼在兩個瀏覽窗口中顯示女讀者視圖:OPEN DATABASE 圖書館管理USE女讀者視圖BROWSEUSE女讀者視圖 AGAIN in 0BROWSE 在使用AGAIN子句時,VFP在當(dāng)前工作期中查找一個已存在的視圖臨時表,并打開一個

36、指向該視圖臨時表的附加別名。 打開視圖的另一個實例時,使用AGAIN子句與使用屬于USE的NOREQUERY子句(帶當(dāng)前工作期編號)等效。 2022-5-31515.2.5 顯示視圖結(jié)構(gòu) 若要打開一個不帶數(shù)據(jù)的視圖,可使用USE命令,并加上NODATA子句以編程方式訪問視圖。 下面的代碼在瀏覽窗口中顯示不帶數(shù)據(jù)的女讀者視圖:OPEN DATABASE 圖書館管理USE 女讀者視圖 NODATA in 0BROWSE 2022-5-31525.2.5 顯示視圖結(jié)構(gòu)(續(xù)) 使用帶NODATA子句的視圖總會打開一個新的視圖臨時表。 NODATA子句是獲取視圖結(jié)構(gòu)最快的方法,因為它在遠(yuǎn)程數(shù)據(jù)源上創(chuàng)建最

37、小的臨時表。 使用NODATA子句時,VFP為視圖創(chuàng)建一個永遠(yuǎn)返回“假”值的WHERE子句。 數(shù)據(jù)源上沒有記錄能夠匹配WHERE子句的條件,所以沒有記錄被選擇進入遠(yuǎn)程數(shù)據(jù)源的臨時表。 該視圖可被快速檢索,因為不必等待遠(yuǎn)程數(shù)據(jù)源去建立一個可能很大的臨時表。 2022-5-31535.2.6 創(chuàng)建視圖索引 可以使用INDEX ON命令,為視圖創(chuàng)建本地索引,創(chuàng)建過程與表一樣。 與表的索引不同,在視圖上創(chuàng)建的本地索引非永久保存,它們隨著視圖的關(guān)閉而消失。 注意:在決定是否要在視圖上創(chuàng)建本地索引時,必須考慮視圖結(jié)果集合的大小。對一個大的結(jié)果集合建立索引,要花費很長的時間并降低視圖的性能。2022-5-3

38、1545.2.7 創(chuàng)建視圖的臨時關(guān)系 使用SET RELATION命令,可在視圖索引之間或視圖索引與表索引之間創(chuàng)建臨時關(guān)系。 在使用SET RELATION命令對一個視圖與一個表進行關(guān)聯(lián)時,若要獲得較好的性能,要在關(guān)系中設(shè)視圖為父表,設(shè)表為子表。 在臨時關(guān)系中,子對象必須按其索引排序。 表的結(jié)構(gòu)索引是不斷被維護的,因此可以快速訪問;而對于視圖,VFP要在視圖每次激活時為其重建索引,因此很浪費時間。 如果使用數(shù)據(jù)環(huán)境,視圖將不能被當(dāng)作子對象,因為子對象的索引必須是定義的一部分,而視圖并不支持此功能。 2022-5-31555.2.8 設(shè)置視圖屬性和連接屬性 在創(chuàng)建一個視圖時,這個視圖將從環(huán)境臨時

39、表或從當(dāng)前工作期的臨時表0中繼承屬性設(shè)置,例如,UpdateType和UseMemoSize。 可以使用CURSORSETPROP()函數(shù)并以0作為臨時表編號來更改默認(rèn)的屬性設(shè)置。 在視圖建立并存入數(shù)據(jù)庫之后,可使用DBSETPROP()函數(shù)修改視圖屬性。 在數(shù)據(jù)庫中,修改的視圖屬性將長期保存在數(shù)據(jù)庫中。 2022-5-31565.2.8 設(shè)置視圖屬性和連接屬性(續(xù)) 在使用視圖時,數(shù)據(jù)庫中保存的視圖屬性設(shè)置將被活動視圖臨時表繼承。 可以使用CURSORSETPROP()函數(shù),為視圖臨時表修改活動臨時表的屬性。 但是使用該函數(shù)進行的修改是臨時的,在關(guān)閉視圖后,活動視圖的臨時設(shè)置將消失;在結(jié)束V

40、FP工作期時,0號臨時表的臨時設(shè)置也將消失。 2022-5-31575.2.8 設(shè)置視圖屬性和連接屬性(續(xù)) 連接也以類似方式繼承屬性。 當(dāng)用戶在數(shù)據(jù)庫中創(chuàng)建并保存一個命名連接時,0號連接的默認(rèn)屬性將被繼承,可以使用SQLSETPROP()函數(shù)修改0號連接的默認(rèn)屬性。 在數(shù)據(jù)庫中創(chuàng)建并保存連接之后,可以使用DBSETPROP()函數(shù)修改連接屬性。 在使用連接時,數(shù)據(jù)庫中為連接保存的屬性設(shè)置將被活動連接繼承。 用戶可以使用SQLSETPROP()函數(shù)并使用該活動連接的句柄來修改連接的這些屬性。 2022-5-31585.2.8 設(shè)置視圖屬性和連接屬性(續(xù)) 視圖與連接都可以使用一個有指定名稱的O

41、DBC數(shù)據(jù)源。 若在視圖中使用ODBC數(shù)據(jù)源,連接將繼承工作期的默認(rèn)屬性。 圖5-9展示了視圖和連接的屬性繼承關(guān)系?;揖€代表屬性繼承關(guān)系,黑線代表VFP的命令。 激 圖圖5-9 視圖屬性和連接屬性及其繼承關(guān)系視圖屬性和連接屬性及其繼承關(guān)系2022-5-31591. 下載遠(yuǎn)程視圖時改變默認(rèn)數(shù)據(jù)類型 當(dāng)創(chuàng)建視圖時,視圖中所有字段的DataType屬性設(shè)為默認(rèn)值。 對于固定長度的數(shù)據(jù)類型,用字母(D、G、I、L、M、P、T、Y)表示 對于可變長的數(shù)據(jù)類型,用字母及其后圓括號中的表示精度和范圍的參數(shù)B(D), C(N), N(N, D)來表示。 對本地視圖此屬性為只讀屬性。 可用DBSETPROP()

42、函數(shù)修改遠(yuǎn)程視圖的字段DataType 屬性的設(shè)置,如表5-2所示。2022-5-31602. 使用DataType屬性 可用DataType屬性選擇默認(rèn)值以外的數(shù)據(jù)類型。 例如,要將服務(wù)器上的時間戳型字段下載到VFP中。 默認(rèn)對應(yīng)VFP的DataTime字段的數(shù)據(jù)類型將截斷服務(wù)器時間戳中表示秒的小數(shù)部位。 可用DataType屬性將遠(yuǎn)程時間戳字符映射到VFP的字符字段,以保留秒的小數(shù)部位。 2022-5-31615.2.9 關(guān)閉視圖的基表 在使用視圖時,自動打開的本地基表并不在關(guān)閉視圖時自動關(guān)閉,必須另發(fā)命令關(guān)閉它們,這與SELECT-SQL命令保持一致。 2022-5-31625.3 在視

43、圖中更新數(shù)據(jù) 在視圖中更新數(shù)據(jù)與在表中更新數(shù)據(jù)類似。 使用視圖還可以對其基表進行更新。 視圖在默認(rèn)情況下使用開放式行緩沖,但也可以將其改為表緩沖。2022-5-31635.3.1 更新視圖的基本操作 可以通過交互方式更新視圖中的數(shù)據(jù),也可以使用語言進行更新。 更新視圖數(shù)據(jù)的第一步就是設(shè)置該視圖為可更新。 在多數(shù)情況下,屬性的默認(rèn)設(shè)置將自動使視圖可更新,但只有將SendUpdates屬性設(shè)置為On來通知VFP進行更新時,更新信息才被發(fā)送到數(shù)據(jù)源。 視圖可使用5個屬性控制更新,在表5-3中列出。 視圖屬性默認(rèn)設(shè)置Tables具有可更新字段和至少一個主關(guān)鍵字段的全部表KeyField數(shù)據(jù)庫關(guān)鍵字段和

44、表的遠(yuǎn)程主關(guān)鍵字UpdateName所有字段,形式為Table_name.column_nameSendUpdates除主關(guān)鍵字段的所有字段,默認(rèn)設(shè)置只在工作期內(nèi)有效,初始值為“假”(.F.),若將其改為“真”(.T.),則成為在工作期內(nèi)所創(chuàng)建的全部視圖的默認(rèn)值CompareMemo默認(rèn)為真(.T.),指備注字段包含在WHERE子句中,用來檢測更新沖突表表5-3 表視圖更新屬性及其默認(rèn)設(shè)置表視圖更新屬性及其默認(rèn)設(shè)置2022-5-31645.3.1 更新視圖的基本操作(續(xù)) 在更新數(shù)據(jù)時,雖然以上5個屬性都需要,但SendUpdates屬性是其中的“主開關(guān)”,它控制了是否發(fā)送更新信息。 在應(yīng)用程

45、序的開發(fā)階段,用戶可以先關(guān)閉SendUpdates屬性,設(shè)置其他屬性使想要更新的字段可以被更新。 在測試應(yīng)用程序時,可以打開SendUpdates屬性允許發(fā)送更新數(shù)據(jù)流。 2022-5-31655.3.1 更新視圖的基本操作(續(xù)) 在一些復(fù)雜情況下,默認(rèn)的更新設(shè)置可能不支持用語言創(chuàng)建的視圖進行更新。 若要使其能夠更新數(shù)據(jù),必須檢查每個更新屬性的默認(rèn)設(shè)置,并根據(jù)需要調(diào)整它們。 也可以根據(jù)需要,指定附加的屬性,例如,UpdateType、WhereType等。 若要在“視圖設(shè)計器”中使視圖可更新,可在“視圖設(shè)計器”中,選擇“更新條件”選項卡并檢查默認(rèn)設(shè)置。 2022-5-31665.3.1 更新視

46、圖的基本操作(續(xù)) 通過“視圖設(shè)計器”創(chuàng)建的視圖,默認(rèn)設(shè)置通常允許視圖被更新,用戶所需要做的只是選中“發(fā)送SQL更新”復(fù)選框來打開更新開關(guān)。 如果愿意,還可以修改表、字段、SQL WHERE子句和更新選項。 若要通過設(shè)置視圖更新屬性使視圖可更新,可以使用DISPLAY DATABASE命令檢查當(dāng)前默認(rèn)設(shè)置,然后使用DBSETPROP()函數(shù),根據(jù)需要修改視圖的屬性。 2022-5-31675.3.1 更新視圖的基本操作(續(xù)) 以編程方式指定5個視圖更新屬性的步驟:(1)對Tables屬性至少設(shè)置一個表名。 例如,如果有一個表為kcb(課程表)表,基于此表有一個為kcb_view視圖,可以使用以

47、下函數(shù)設(shè)置表名:DBSETPROP(kcb_view, View, Tables, kcb)(2)用一個或多個本地VFP字段名來設(shè)置KeyField屬性,這些字段名的組合可作為這個可更新表的惟一關(guān)鍵字。 對于上例,可以用以下代碼使kcbm成為關(guān)鍵字段:DBSETPROP(kcb_view.kcbm, Field, KeyField, .T.) 2022-5-31685.3.1 更新視圖的基本操作(續(xù))(3)利用UpdateName屬性,在視圖字段與基表字段之間建立映射關(guān)系。當(dāng)視圖是根據(jù)具有共同字段名的兩個表之間的連接建立起來的時,或者當(dāng)字段在視圖中有別名時,這個屬性尤其有用。DBSETPROP

48、(kcb_view.kcbm, Field, UpdataName, kcb.kcbm)(4)指定要用UpdateField屬性進行更新的字段范圍。只能指定已包括在UpdateName屬性中的字段。DBSETPROP(kcb_view.kcbm, Field, Updatable, .T.)(5)設(shè)置SendUpdates屬性為“真”(.T.)。這是一個主開關(guān),它允許VFP將創(chuàng)建的更新信息發(fā)送到可更新表和可更新字段中。DBSETPROP(kcb_view, View, SendUpdates,.T.) 2022-5-31695.3.2 在視圖中更新多個表 可以在一個視圖中更新多個表。若視圖組合

49、了兩個或多個表,那么設(shè)置相應(yīng)屬性,使得只有視圖查詢中一對多關(guān)系的“多”方可被更新。 視圖的更新是對表進行的。對于視圖訪問的每一個表,其關(guān)鍵字段集合無論對視圖結(jié)果集合還是對基表都是惟一關(guān)鍵字。 若要使一個多表視圖可更新,可以: 在“視圖設(shè)計器”中,選擇“更新條件”選項卡,再選擇需要更新的表和字段名; 或者使用DBSETPROP函數(shù)。 在多數(shù)情況下,VFP的默認(rèn)值允許多表視圖可更新,即使是對于以編程方式創(chuàng)建的多表視圖也是如此。 2022-5-31705.3.3 用數(shù)據(jù)字典定制視圖 視圖存于數(shù)據(jù)庫中,用戶可以對視圖創(chuàng)建下列內(nèi)容: 標(biāo)題。 視圖注釋及視圖的字段注釋。 視圖字段的默認(rèn)值。 字段級和記錄級

50、規(guī)則及規(guī)則的錯誤信息。 視圖的數(shù)據(jù)字典在功能上與數(shù)據(jù)庫表中的相應(yīng)部分非常相似。 用戶必須以語言方式而不能用表設(shè)計器為視圖創(chuàng)建標(biāo)題、注釋、默認(rèn)值和規(guī)則。 2022-5-31715.3.4 為視圖字段創(chuàng)建默認(rèn)值 與表的字段默認(rèn)值相似,視圖的字段默認(rèn)值存于數(shù)據(jù)庫中,并且在每次使用視圖時都可用。 VFP并不對本地創(chuàng)建的默認(rèn)值與遠(yuǎn)程數(shù)據(jù)源創(chuàng)建的默認(rèn)值相比較,但用戶創(chuàng)建的默認(rèn)值必須能讓數(shù)據(jù)源接受。 若要給視圖字段指定默認(rèn)值,可以: 在“視圖設(shè)計器”的“字段”選項卡中,選定一個字段,并選擇“屬性”,輸入字段的默認(rèn)值; 或者使用DBSETPROP()函數(shù)的DefaultValue屬性。 下面的示例創(chuàng)建了一個默

51、認(rèn)值為2的xf字段:USE kcb_view? DBSETPROP(kcb_view.xf, Field, DefaultValue, 2) 2022-5-31725.3.5 在視圖的字段和數(shù)據(jù)行上創(chuàng)建規(guī)則 對遠(yuǎn)程數(shù)據(jù)源規(guī)則創(chuàng)建相應(yīng)的本地版本,可以帶來以下好處: 減少響應(yīng)時間。 減輕網(wǎng)絡(luò)資源的壓力。 在向遠(yuǎn)程數(shù)據(jù)源發(fā)送數(shù)據(jù)前,先進行測試。 避免向遠(yuǎn)程數(shù)據(jù)源發(fā)送錯誤數(shù)據(jù)。 VFP并不將本地創(chuàng)建的規(guī)則與遠(yuǎn)程規(guī)則進行比較,用戶必須保證創(chuàng)建的規(guī)則可被數(shù)據(jù)源接受。 如果遠(yuǎn)程規(guī)則有所更改,本地規(guī)則也必須隨之更改。 2022-5-31735.3.5 在視圖的字段和數(shù)據(jù)行上創(chuàng)建規(guī)則(續(xù)) 若要在視圖字段或記錄

52、上創(chuàng)建規(guī)則,可以: 在“視圖設(shè)計器”的“字段”選項卡中,選定一個字段,并選擇“屬性”,輸入字段的表達(dá)式規(guī)則及規(guī)則提示信息文本; 或者使用DBSETPROP()函數(shù)的RuleExpression和RuleText屬性。 例如,下面的代碼對kcb_view視圖創(chuàng)建了字段級規(guī)則,防止輸入的ks小于16:OPEN DATABASE 成績管理USE kcb_viewDBSETPROP(kcb_view.ks, Field, RuleExpression, ks = 16)DBSETPROP(kcb_view.ks, Field, RuleText, ks must be greater than or

53、equal to 16 ) 也可以使用DBSETPROP()函數(shù)創(chuàng)建數(shù)據(jù)行級規(guī)則。 2022-5-31745.4 集成視圖 可以在其他視圖的基礎(chǔ)上再創(chuàng)建視圖。 理由是:有時需要從多個其他視圖中獲取一部分信息,或者需要將本地和遠(yuǎn)程數(shù)據(jù)集成到單個視圖中。 一個基于視圖的視圖,或基于集成了本地表、本地視圖或遠(yuǎn)程視圖的視圖,稱為多級視圖。 集成了其他視圖的視圖,稱為頂層視圖。 在頂層視圖與本地基表或遠(yuǎn)程基表之間,可以有多層次的視圖。 在使用多級視圖時,頂層視圖所基于的視圖和各級視圖的VFP基表將出現(xiàn)在“數(shù)據(jù)工作期”窗口中,遠(yuǎn)程表不會出現(xiàn)在“數(shù)據(jù)工作期”窗口中。 2022-5-31755.4.1 在視圖

54、中集成本地數(shù)據(jù)和遠(yuǎn)程數(shù)據(jù) 通過創(chuàng)建基于本地視圖和遠(yuǎn)程視圖的新本地視圖,可以在一個視圖中集成本地數(shù)據(jù)與遠(yuǎn)程數(shù)據(jù)。 若要創(chuàng)建集成本地數(shù)據(jù)與遠(yuǎn)程數(shù)據(jù)的視圖,可以: 在項目管理器中先選擇一個數(shù)據(jù)庫,再選擇“本地視圖”,然后單擊“新建”按鈕,打開“視圖設(shè)計器”,在視圖中加入表、本地視圖或遠(yuǎn)程視圖; 或者直接使用CREATE SQL VIEW命令。 例如,可以使用如下代碼創(chuàng)建一個集成了本地xk表和遠(yuǎn)程kcb表中信息的本地視圖:OPEN DATABASE 成績管理CREATE SQL VIEW remote_kcb_view ;CONNECTION remote_01 ;AS SELECT * FROM k

55、cbCREATE SQL VIEW local_xk_remote_kcb_view ;AS SELECT * FROM 成績管理!local_xk_view, ;成績管理!remote_kcb_view ;WHERE local_xk_view.kcbm=Remote_kcb_view.kcbm2022-5-31765.4.2 在視圖中更新本地數(shù)據(jù)與遠(yuǎn)程數(shù)據(jù) 在多級視圖中更新數(shù)據(jù)時,更新將向下延續(xù)一層視圖。 如果要更新多級視圖的基表,則必須為多級結(jié)構(gòu)中的每一個視圖都發(fā)送一條TABLE UPDATE命令。2022-5-31775.5 處理游離數(shù)據(jù) 使用游離數(shù)據(jù)功能,可以用與主數(shù)據(jù)庫相連接的視圖

56、建立數(shù)據(jù)的子集,這樣就脫離了主數(shù)據(jù)庫對游離數(shù)據(jù)進行操作。 可以直接訪問視圖,也可以通過應(yīng)用程序訪問,之后,還可以將數(shù)據(jù)上載回主數(shù)據(jù)庫。 在下面這些情況下,可以使用游離數(shù)據(jù):(1)數(shù)據(jù)大量存放在一個地方。(2)用于地理位置較遠(yuǎn)的情況。(3)與時間有關(guān)的數(shù)據(jù)。 2022-5-3178創(chuàng)建和使用游離視圖數(shù)據(jù) 可用下列函數(shù)或命令創(chuàng)建和使用游離視圖數(shù)據(jù): CREATEOFFLINE()函數(shù) 帶有ADMIN 和ONLINE子句的USE SQL ViewName命令 TABLEUPDATE函數(shù) DROPOFFLINE()函數(shù) 如果要在創(chuàng)建游離視圖的計算機以外的機器上使用此視圖,必須在這臺機器(目標(biāo)機)上建立

57、主數(shù)據(jù)庫文件(.DBC)的拷貝,確認(rèn)目標(biāo)機上的視圖使用了ODBC數(shù)據(jù)源,并分析數(shù)據(jù)需求以決定所需的視圖內(nèi)容。 2022-5-31795.5.1 創(chuàng)建游離視圖 和用聯(lián)機數(shù)據(jù)一樣,在創(chuàng)建游離視圖前,應(yīng)分析需求以決定所需要的視圖設(shè)計。 確定了脫機使用的數(shù)據(jù)子集之后,就可使用已有的視圖或是創(chuàng)建新視圖。 如果已有視圖返回的記錄正是脫機操作時想要的,則可直接使用它;否則就需要以編程方式創(chuàng)建視圖。 游離視圖中包含的數(shù)據(jù)存儲在本地機數(shù)據(jù)庫的一個.DBF文件中。2022-5-31805.5.1 創(chuàng)建游離視圖(續(xù)) 若要使用已有的游離視圖,可使用CREATEOFFLINE()函數(shù)和視圖的名稱。 例如,如果要添加學(xué)

58、生、增加新的課程、需要當(dāng)前選課信息,可以建立一個名稱為stuinfo的視圖,組合了來自xsb表、xk表和kcb表的信息??捎孟铝写a創(chuàng)建視圖:CREATEOFFLINE(stuinfo) 若希望以編程方式創(chuàng)建游離視圖,可使用CREATE SQL VIEW命令,跟之以CREATEOFFLINE()命令。 例如,以下代碼創(chuàng)建一個游離視圖,用于顯示來自聯(lián)機數(shù)據(jù)庫中xsb表和xk表中的數(shù)據(jù)。由于沒有指定更新條件,因此視圖是只讀的。CREATE SQL VIEW showxsb;CONNECTION dsource;AS SELECT * FROM xsb INNER JOIN xk;ON xsb.xh

59、=xk.xhCREATEOFFLINE(showxsb) 2022-5-31815.5.2 顯示和修改游離數(shù)據(jù) 為游離數(shù)據(jù)創(chuàng)建了視圖后,就可以在應(yīng)用程序中像使用其他視圖一樣使用這些視圖:添加、修改、刪除記錄。 多個用戶可以以共享模式同時訪問同一數(shù)據(jù)庫中的游離視圖。 如果不想保留對游離數(shù)據(jù)的任何修改,可以恢復(fù)信息重新反映原始信息。2022-5-31821. 使用游離數(shù)據(jù) 使用游離數(shù)據(jù)視圖,可以像使用聯(lián)機視圖那樣使用表單、報表或應(yīng)用程序來顯示和更新數(shù)據(jù)。 例如,以下代碼打開Showxsb視圖:USE Showxsb 注意:如果在游離視圖中沒有得到所需的數(shù)據(jù)子集,可檢查遠(yuǎn)程視圖的優(yōu)化設(shè)置。 如果使用

60、DBSETPROP()函數(shù)設(shè)置了MaxRecords屬性,則視圖中最多只能包含設(shè)置的記錄數(shù)。 如果在視圖的字段列表中包含一個備注字段,則即使將FecthMemo設(shè)置為“否”(.F.),該備注字段也將自動包含在結(jié)果集合中。 2022-5-31832. 管理游離數(shù)據(jù) 在一些情況下,尤其在多用戶環(huán)境中,很多人會同時操作相同的數(shù)據(jù),在把游離數(shù)據(jù)更新到源數(shù)據(jù)庫之前,可能希望檢查一下那些被改動過的數(shù)據(jù)。 使用帶有ADMIN子句的USE命令,可以查看對游離數(shù)據(jù)的所有修改,還可以有選擇地放棄一些還沒有與數(shù)據(jù)源相連接的那些修改。 例如,以下代碼在管理員模式下打開Showxsb視圖:USE Showxsb ADMIN 2022-5-3

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論