|
一、緒論 VFP 是一種較好的客戶/ 服務(wù)器應(yīng)用系統(tǒng)開發(fā)工具,用VFP 開發(fā)C/S 系統(tǒng)的關(guān)鍵是如何訪問遠程數(shù)據(jù)( 遠程服務(wù)器中的Table/View)。可以使用VFP 提供的SQL Pass-Through 函數(shù)訪問遠程數(shù)據(jù),但最常用的方法是使用遠程視圖(Remote View) 去訪問遠程數(shù)據(jù)。本文結(jié)合本人的使用經(jīng)驗對遠程視圖的使用技巧加以介紹。 二、遠程視圖的環(huán)境設(shè)置 在設(shè)計遠程視圖時,需要對遠程視圖的有關(guān)環(huán)境信息進行設(shè)置。使用Tools 菜單中的Options.... 選項來設(shè)置Remote Data 選項。其選項設(shè)置說明如下: *Share Connection: 指出今后設(shè)計的遠程視圖是否使用共享連接。使用共享連接可大大減少數(shù)據(jù)庫服務(wù)器中客戶訪問許可數(shù),但會影響客戶機的訪問速度。 *SQL Updates/Criteria: 指出對后臺數(shù)據(jù)進行update 操作的條件。 它有四種可能: ①Key Field only ②Key and Updatable Fields ③Key and Modified Fields ④Key and Time Stamp。 一般選擇③較合適。 *SQL Updates/Method: 指出對后臺數(shù)據(jù)的更新方法。 它有兩種選擇:①SQL Delete then Insert ②SQL update。 一般選擇②比較合適。 *Connection Defaults: 主要用于SQL Pass-Through 函數(shù)訪問遠程數(shù)據(jù),對于遠程視圖則不需要放置。 三、遠程視圖的設(shè)計 有兩種方法設(shè)計遠程視圖,一是使用View Designer;二是使用SQL 語句。用View Designer 可設(shè)計較為簡單的視圖,而使用SQL 的Create Remote View 語句則可進行復(fù)雜視圖的設(shè)計。如果試圖去用View Designer 觀察或修改( 用Create 創(chuàng)建的視圖) 則極有可能被破壞它( 例如:若創(chuàng)建視圖的語句中含有exists 子句, 則一定會被破壞!) 1. 用Create 命令設(shè)計 例如:假定連接名為WYFconnect,兩個遠程表為SealList 和ShipList. Create 命令可如下: CREATE SQL VIEW ViewTest REMOTE CONNECTION WYFconnect AS SealList.* FROM SealList, ShipList WHERE SealList IS NOT NULL AND SealList AND 箱號NOT IN 箱號FROM ShipList WHERE ShipList. 箱號IS NOT NULL AND ShipList. 船名=SealList. 船名 使用該方法可以在程序中動態(tài)地構(gòu)造滿足不同條件的遠程視圖(View Designer 不能構(gòu)造帶參數(shù)的遠程視圖)。例如:設(shè)m.ShipName 為一可變內(nèi)存變量,其創(chuàng)建語句為: CREATE SQL VIEW ViewTest REMOTE CONNECTION WYFconnect AS * FROM SealList WHERE 船名=m.ShipName. 2. 用View Designer 設(shè)計 啟動View Designer 選擇連接名后出現(xiàn)設(shè)計圖, 在其上部可以加入遠程服務(wù)器中的表或視圖,在其下部進行參數(shù)/ 條件設(shè)置: * Criteria: 設(shè)置遠程數(shù)據(jù)值上的記錄必須滿足的條件,類似于下SQL 語句中的Where 子句。在這里可以構(gòu)造復(fù)雜條件,但條件中使用的函數(shù)和語法規(guī)則必須是后臺數(shù)據(jù)庫支持的,例如:不能使用DTOC( 日期)=‘90/01/01’,而必須使用Convert(char(10), 日期)=‘90/01/01’, 因為后臺數(shù)據(jù)庫不支持DTOC() 函數(shù)。 *Fields: 選擇結(jié)果集中的字段,在這里要強調(diào)的是Function/Expression 的使用,使用它可構(gòu)造出與源表字段不同的字段,如:T. 船名+‘’+T. 中文AS 船舶。實踐證明Function/Expression 中不能使用雙引號,而只能使用單引號。 *Order by 和Group by: 對結(jié)果分組、分類。要求符合后臺數(shù)據(jù)庫所支持的SQL 語法。 *Update Criteria: 設(shè)置視圖的有關(guān)替換參數(shù), 具體如下: ①要選中Send SQL Update ②SQL where 一般選擇Key and Modify Fields ③Update Using 一般選擇SQL Update ④務(wù)請選擇關(guān)鍵字段和可更改字段( 在鑰匙符號下面和鉛筆符號下面加“√”),否則將無法正確完成Insert/update 功能。 四、遠程視圖的使用 1. 緩沖與鎖定設(shè)置 對于遠程視圖,建議使用緩沖機制來提高遠程視圖的工作效率和使用的方便性。首先在Option 菜單中設(shè)置Data 組件,需設(shè)置下列參數(shù): ①選擇Open Exclusive 以讓庫共享打開,庫中的遠程視圖則可共享使用; ②Locking And Buffering 設(shè)置:選中Automatic File locking 和Multiple Record Locks,并將Buffering 設(shè)置成Fields Buffering,加鎖方式設(shè)置為“記錄級樂觀鎖定”。在具體設(shè)計Form 時,對數(shù)據(jù)環(huán)境中的每一個遠程視圖光標可重新根據(jù)需要來設(shè)置鎖定和緩沖機制。如果不重新設(shè)置,它取Form 的缺省設(shè)置。 2. 數(shù)據(jù)的寫入與前臺刷新 對于采用了Buffering 技術(shù)的遠程視圖,當修改/ 刪除/ 增加了記錄時,需用TableUpdate(.T.,.T.) 函數(shù)來確保數(shù)據(jù)寫到后臺數(shù)據(jù)庫中;若要取消對緩沖區(qū)中視圖數(shù)據(jù)的修改,需用TableRevert(.T.) 函數(shù)。例如:
View1 Append Blank Begin Transaction if TableUpdate(.T.,.T.) EndTranseaction else RollBack =TableRevert( ·T ·) endif 如果該遠程視圖與別的表/ 遠程視圖發(fā)生級聯(lián)修改/ 刪除/ 增加關(guān)系,則需使用事務(wù)機制,以確保數(shù)據(jù)的完整性。 如果對應(yīng)視圖的后臺表/ 視圖數(shù)據(jù)發(fā)生變化時,使用下述方法讓前臺客戶機中的數(shù)據(jù)與實際后臺數(shù)據(jù)一致: ① 〈遠程視圖名〉 USE〈遠程視圖名〉&& 再次打開即可 ② 〈遠程視圖名〉 =Requery() && 刷新緩沖區(qū)值 五、遠程視圖使用中碰到的若干問題 1. 如何在一個遠程視圖中多次使用同一遠程數(shù)據(jù)源? 依靠別名。例如: A. 船名,A. 航次,B. 姓名as 操作員,C. 姓名as 倉庫員from Shipname A, worker B, worker C where A. 操作員代碼=B.Code and A. 倉庫員代碼=C.Code 2. 設(shè)計遠程視圖時 語句的語法應(yīng)符合VFP 或后臺數(shù)據(jù)庫? 后臺數(shù)據(jù)庫支持的SQL 語法。例如:Create SQL View AAA Remote Conection BB As A.* From Shipname A Where Convert(Char(10), 進港日期)=‘1998/05/30’ 3. 遠程視圖能否使用Pack 和Recall 語句? 不能使用pack 語句,例如: use View1; delete for 〈條件〉 && 加刪除標志 pack && 錯誤,必須使用TableUpdate () 函數(shù) 對于Recall 命令,如果已執(zhí)行了TableUpdate(),則執(zhí)行無效; 若未發(fā)Tableupdate(), 則可用Recall 來取消刪除標記。 4. 本地視圖的數(shù)據(jù)源有遠程視圖,如何刷新本地視圖? 例如:有兩個遠程視圖Rview1 Rview2, 創(chuàng)建本地視圖的命令為:Create SQL view As A.* B.* from Rview1 A,R view2 B where A. 箱號=B. 箱號 刷新view 之前必須先刷新Rview1 和Rview2: =requery (“Rview1”) =Requery (“Rview2”) =Refresh (“view”) 六、小結(jié) 遠程視圖是VFP 訪問遠程數(shù)據(jù)服務(wù)器中數(shù)據(jù)的有利武器,有了前面的介紹,就可得心應(yīng)手地設(shè)計C/S 應(yīng)用系統(tǒng)了。 |
|
|