8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

VFP远程视图使用面面观

IT171中文网 管理员组 2013-11-4 435

[backcolor=rgb(255,255,255)]摘要:远程视图是Visual Foxpro 5.0 中开发Client/Server 应用系统的基础,本文首先介绍了远程视图有关参数的放置技巧,然后介绍如何去设计、使用远程视图,最后讨论了使用远程视图的四个实际问题。
一、绪论[/backcolor]
[backcolor=rgb(255,255,255)]VFP 是一种较好的客户/ 服务器应用系统开发工具,用VFP 开发C/S 系统的关键是如何访问远程数据( 远程服务器中的Table/View)。可以使用VFP 提供的SQL Pass-Through 函数访问远程数据,但最常用的方法是使用远程视图(Remote View) 去访问远程数据。本文结合本人的使用经验对远程视图的使用技巧加以介绍。[/backcolor]
[backcolor=rgb(255,255,255)]二、远程视图的环境设置[/backcolor]
[backcolor=rgb(255,255,255)]在设计远程视图时,需要对远程视图的有关环境信息进行设置。使用Tools 菜单中的Options.... 选项来设置Remote Data 选项。其选项设置说明如下:[/backcolor]
[backcolor=rgb(255,255,255)]*Share Connection: 指出今后设计的远程视图是否使用共享连接。使用共享连接可大大减少数据库服务器中客户访问许可数,但会影响客户机的访问速度。[/backcolor]
[backcolor=rgb(255,255,255)]*SQL Updates/Criteria: 指出对后台数据进行update 操作的条件。[/backcolor]
[backcolor=rgb(255,255,255)]它有四种可能:[/backcolor]
[backcolor=rgb(255,255,255)]①Key Field only ②Key and Updatable Fields[/backcolor]
[backcolor=rgb(255,255,255)]③Key and Modified Fields ④Key and Time Stamp。[/backcolor]
[backcolor=rgb(255,255,255)]一般选择③较合适。[/backcolor]
[backcolor=rgb(255,255,255)]*SQL Updates/Method: 指出对后台数据的更新方法。[/backcolor]
[backcolor=rgb(255,255,255)]它有两种选择:①SQL Delete then Insert ②SQL update。[/backcolor]
[backcolor=rgb(255,255,255)]一般选择②比较合适。[/backcolor]
[backcolor=rgb(255,255,255)]*Connection Defaults: 主要用于SQL Pass-Through 函数访问远程数据,对于远程视图则不需要放置。[/backcolor]
[backcolor=rgb(255,255,255)]三、远程视图的设计[/backcolor]
[backcolor=rgb(255,255,255)]有两种方法设计远程视图,一是使用View Designer;二是使用SQL 语句。用View Designer 可设计较为简单的视图,而使用SQL 的Create Remote View 语句则可进行复杂视图的设计。如果试图去用View Designer 观察或修改( 用Create 创建的视图) 则极有可能被破坏它( 例如:若创建视图的Select 语句中含有exists 子句, 则一定会被破坏!)[/backcolor]
[backcolor=rgb(255,255,255)]1. 用Create 命令设计[/backcolor]
[backcolor=rgb(255,255,255)]例如:假定连接名为WYFconnect,两个远程表为SealList 和ShipList. Create 命令可如下:[/backcolor]
[backcolor=rgb(255,255,255)]CREATE SQL VIEW ViewTest REMOTE CONNECTION WYFconnect AS SELECT SealList.* FROM SealList, ShipList WHERE SealList IS NOT NULL AND SealList AND 箱号NOT IN (SELECT 箱号FROM ShipList WHERE ShipList. 箱号IS NOT NULL AND ShipList. 船名=SealList. 船名[/backcolor]
[backcolor=rgb(255,255,255)]使用该方法可以在程序中动态地构造满足不同条件的远程视图(View Designer 不能构造带参数的远程视图)。例如:设m.ShipName 为一可变内存变量,其创建语句为:[/backcolor]
[backcolor=rgb(255,255,255)]CREATE SQL VIEW ViewTest REMOTE CONNECTION WYFconnect AS SELECT * FROM SealList WHERE 船名=m.ShipName.[/backcolor]
[backcolor=rgb(255,255,255)]2. 用View Designer 设计[/backcolor]
[backcolor=rgb(255,255,255)]启动View Designer 选择连接名后出现设计图, 在其上部可以加入远程服务器中的表或视图,在其下部进行参数/ 条件设置:[/backcolor]
[backcolor=rgb(255,255,255)]*Select Criteria: 设置远程数据值上的记录必须满足的条件,类似于下SQL Select 语句中的Where 子句。在这里可以构造复杂条件,但条件中使用的函数和语法规则必须是后台数据库支持的,例如:不能使用DTOC( 日期)=‘90/01/01’,而必须使用Convert(char(10), 日期)=‘90/01/01’, 因为后台数据库不支持DTOC() 函数。[/backcolor]
[backcolor=rgb(255,255,255)]*Fields: 选择结果集中的字段,在这里要强调的是Function/Expression 的使用,使用它可构造出与源表字段不同的字段,如:T. 船名+‘’+T. 中文AS 船舶。实践证明Function/Expression 中不能使用双引号,而只能使用单引号。[/backcolor]
[backcolor=rgb(255,255,255)]*Order by 和Group by: 对结果分组、分类。要求符合后台数据库所支持的SQL 语法。[/backcolor]
[backcolor=rgb(255,255,255)]*Update Criteria: 设置视图的有关替换参数, 具体如下:[/backcolor]
[backcolor=rgb(255,255,255)]①要选中Send SQL Update[/backcolor]
[backcolor=rgb(255,255,255)]②SQL where 一般选择Key and Modify Fields[/backcolor]
[backcolor=rgb(255,255,255)]③Update Using 一般选择SQL Update[/backcolor]
[backcolor=rgb(255,255,255)]④务请选择关键字段和可更改字段( 在钥匙符号下面和铅笔符号下面加“√”),否则将无法正确完成Insert/update 功能。[/backcolor]
[backcolor=rgb(255,255,255)]四、远程视图的使用[/backcolor]
[backcolor=rgb(255,255,255)]1. 缓冲与锁定设置[/backcolor]
[backcolor=rgb(255,255,255)]对于远程视图,建议使用缓冲机制来提高远程视图的工作效率和使用的方便性。首先在Option 菜单中设置Data 组件,需设置下列参数:[/backcolor]
[backcolor=rgb(255,255,255)]①选择Open Exclusive 以让库共享打开,库中的远程视图则可共享使用;[/backcolor]
[backcolor=rgb(255,255,255)]②Locking And Buffering 设置:选中Automatic File locking 和Multiple Record Locks,并将Buffering 设置成Fields Buffering,加锁方式设置为“记录级乐观锁定”。在具体设计Form 时,对数据环境中的每一个远程视图光标可重新根据需要来设置锁定和缓冲机制。如果不重新设置,它取Form 的缺省设置。[/backcolor]
[backcolor=rgb(255,255,255)]2. 数据的写入与前台刷新[/backcolor]
[backcolor=rgb(255,255,255)]对于采用了Buffering 技术的远程视图,当修改/ 删除/ 增加了记录时,需用TableUpdate(.T.,.T.) 函数来确保数据写到后台数据库中;若要取消对缓冲区中视图数据的修改,需用TableRevert(.T.) 函数。例如:[/backcolor]

[backcolor=rgb(255,255,255)]Select View1[/backcolor]
[backcolor=rgb(255,255,255)]Append Blank[/backcolor]
[backcolor=rgb(255,255,255)]Begin Transaction[/backcolor]
[backcolor=rgb(255,255,255)]if TableUpdate(.T.,.T.)[/backcolor]
[backcolor=rgb(255,255,255)]EndTranseaction[/backcolor]
[backcolor=rgb(255,255,255)]else[/backcolor]
[backcolor=rgb(255,255,255)]RollBack[/backcolor]
[backcolor=rgb(255,255,255)]=TableRevert( ·T ·)[/backcolor]
[backcolor=rgb(255,255,255)]endif[/backcolor]
[backcolor=rgb(255,255,255)]如果该远程视图与别的表/ 远程视图发生级联修改/ 删除/ 增加关系,则需使用事务机制,以确保数据的完整性。[/backcolor]
[backcolor=rgb(255,255,255)]如果对应视图的后台表/ 视图数据发生变化时,使用下述方法让前台客户机中的数据与实际后台数据一致:[/backcolor]
[backcolor=rgb(255,255,255)]①Select 〈远程视图名〉[/backcolor]
[backcolor=rgb(255,255,255)]USE〈远程视图名〉&& 再次打开即可[/backcolor]
[backcolor=rgb(255,255,255)]②Select 〈远程视图名〉[/backcolor]
[backcolor=rgb(255,255,255)]=Requery() && 刷新缓冲区值[/backcolor]
[backcolor=rgb(255,255,255)]五、远程视图使用中碰到的若干问题[/backcolor]
[backcolor=rgb(255,255,255)]1. 如何在一个远程视图中多次使用同一远程数据源?[/backcolor]
[backcolor=rgb(255,255,255)]依靠别名。例如:Select A. 船名,A. 航次,B. 姓名as 操作员,C. 姓名as 仓库员from Shipname A, worker B, worker C where A. 操作员代码=B.Code and A. 仓库员代码=C.Code[/backcolor]
[backcolor=rgb(255,255,255)]2. 设计远程视图时Select 语句的语法应符合VFP 或后台数据库?[/backcolor]
[backcolor=rgb(255,255,255)]后台数据库支持的SQL 语法。例如:Create SQL View AAA Remote Conection BB As Select A.* From Shipname A Where Convert(Char(10), 进港日期)=‘1998/05/30’[/backcolor]
[backcolor=rgb(255,255,255)]3. 远程视图能否使用Pack 和Recall 语句?[/backcolor]
[backcolor=rgb(255,255,255)]不能使用pack 语句,例如:[/backcolor]
[backcolor=rgb(255,255,255)]use View1;[/backcolor]
[backcolor=rgb(255,255,255)]delete for 〈条件〉 && 加删除标志[/backcolor]
[backcolor=rgb(255,255,255)]pack && 错误,必须使用TableUpdate () 函数[/backcolor]
[backcolor=rgb(255,255,255)]对于Recall 命令,如果已执行了TableUpdate(),则执行无效; 若未发Tableupdate(), 则可用Recall 来取消删除标记。[/backcolor]
[backcolor=rgb(255,255,255)]4. 本地视图的数据源有远程视图,如何刷新本地视图?[/backcolor]
[backcolor=rgb(255,255,255)]例如:有两个远程视图Rview1 Rview2, 创建本地视图的命令为:Create SQL view As Select A.* B.* from Rview1 A,R view2 B where A. 箱号=B. 箱号[/backcolor]
[backcolor=rgb(255,255,255)]刷新view 之前必须先刷新Rview1 和Rview2:[/backcolor]
[backcolor=rgb(255,255,255)]=requery (“Rview1”)[/backcolor]
[backcolor=rgb(255,255,255)]=Requery (“Rview2”)[/backcolor]
[backcolor=rgb(255,255,255)]=Refresh (“view”)[/backcolor]
[backcolor=rgb(255,255,255)]六、小结[/backcolor]
[backcolor=rgb(255,255,255)]远程视图是VFP 访问远程数据服务器中数据的有利武器,有了前面的介绍,就可得心应手地设计C/S 应用系统了。[/backcolor]
[backcolor=rgb(255,255,255)]参考文献[/backcolor]
[backcolor=rgb(255,255,255)][1 ]E.sander 等著visual FoxPro3.0 实用指南机械工业出版社1996[/backcolor]
[backcolor=rgb(255,255,255)]The Skills of Using Remote View in Visual Foxpro 5.0[/backcolor]
[backcolor=rgb(255,255,255)]Wuyefu and Yuanxiaoling[/backcolor]
[backcolor=rgb(255,255,255)]Dept. Computer, Wuhan Transaction University , WuHan430063[/backcolor]
[backcolor=rgb(255,255,255)]ABSTRACT: In the paper, it is introduced how to choice option parameters and to use remote view in Visual Foxpro 5.0. In the end, the solution to some problems is also discussed.[/backcolor]
[backcolor=rgb(255,255,255)]KEYWORDS: Remote view, Remote Data, Connection, Lock, buffering[/backcolor]

最新回复 (5)
全部楼主
返回
发新帖
我也是有底线哒~