电竞比分网-中国电竞赛事及体育赛事平台

分享

VFP遠程視圖的四個實際問題

 庋藏天下 2014-12-10

一、緒論

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)了。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多