Welcome

首页 / 软件开发 / VFP / visual foxpro 7.0漫谈

visual foxpro 7.0漫谈2007-05-09今年是开发工具集中更新版本的一年:微软的Visual Studio.Net,Borland 的Delphi 6、Sybase的Power Builder 8都相继推出正式版或是测试版,我们的Visual FoxPro 当然也不会放过这业界大比武的好时机,今年5月微软发布了Visual FoxPro 7,它是继1995年Fox家族第一个可视化成员Visual FoxPro 3以来最具革命意义的版本。

“革命意义”这个词可不是我信口开河、随便使用的,这是国外的Fox社区对Visual FoxPro 7的普遍评价。为什么这么有此一说呢,下文中笔者将结合几个月来的使用感受谈谈对“革命意义”这一评价的理解。就让我们开始吧!

1. 以“事件”驱动数据库

Fox历史上的每一次重要升级都与数据库引擎有关,比如2.0时内置了标准的SQL语句和神奇的索引优化技术Rushmore;3时提出了完整的数据库、数据字典概念,融入通过ODBC访问异构数据库的技术;这次的7作为具有“革命意义”的版本升级,当然对数据库引擎作了升级,这就是Visual FoxPro 7最亮丽的特色—— “数据库容器事件”(Database Container Evens)。我们知道“事件驱动”是Windows系统的运作模式,用“事件驱动”的模式来管理数据库真是一种奇妙而极具威力的方法。Visual FoxPro 7定义了诸如DBC_Activate、DBC_BeforeOpenTable 等60多个数据库容器事件,赋予开发人员全方位的管理数据库对象(数据库、表、连接、本地试图、远程视图、存储过程)的能力,不分巨细、任何操作一概逃不过“事件”机制的监控。可以这样说:在Visual FoxPro 7中对数据库的管理进入一个全新的时代。

2. 数据处理,还是数据处理

这是一个很小的变化——只是对Select-SQL语句增加了一个关键字:READWRITE。就是这个小小的改进,使得Visual FoxPro对Cursor的处理进入了一个“完美”的天地!Visual FoxPro的最主要的特色就是可以灵活、方便的操作极为大量的数据,这个特色在对Cursor的处理上是最能体现得。灵活而强健的Cursor体系是Visual FoxPro区别于其他开发工具最鲜明的标志!

我们知道在Visual FoxPro 里有三种形式的Cursor :可更新Cursor、可读写Cursor、只读Cursor。“可更新Cursor”是指与数据源关联的,Cursor上的数据变动将更新到数据源的Cursor,通过USE 打开的DBF表、设置为“可更新”的本地及远程视图都属于这类Cursor;“可读写Cursor”是指Cursor上的数据可以被维护、但是任何数据变动不会更新到数据源上去,这类Cursor主要产生于那些没有做“更新设定”的本地及远程视图,以及通过SPT直接从异构数据库得到的Cursor;“只读Cursor”是Select-SQL产生的查询结果。顾名思义这种Cursor只能浏览,不能维护——这在复杂的商务系统开发中是一块绊脚石,开发人员希望在的查询结果上作数据维护,产生新的Cursor,再作查询、再修改……在Visual FoxPro 7以前,我们通常使用临时DBF表来解决这个问题,由于要人工维护“中间表文件”,增加磁盘读写次数,很是麻烦。现在好了,READWRITE关键字的支持,使得Visual FoxPro的超级强大的Cursor处理更为强大,趋于完美!

3. XML和Web Service

XML和Web Service是天生的一对,它们也许是今年最热门的技术了,新近推出的开发工具对它们都有支持!Visual FoxPro 7作为新一代开发工具当然对XML与Web Service有特别的关注,它赋予了Fox开发人员强大而易用的工具!

Visual FoxPro 7对MSXML Parser 做了封装,具体表现为三个函数,它们分别是CursorToXML()、XMLToCursor()、XMLUpdateGram(),它们分别实现Cursor到XML描述的转化、XML描述到Cursor的转化以及Cursor中数据变动情况的XML描述(这个功能是针对SQL Server 2000设计的)。

Visual FoxPro 7对Web Service的支持是通过对SOAP(Simple Object Access Protocol)的封装实现的,具体表现在名为webservices.vcx的FFC类库。Visual FoxPro对于Web Service的支持分为两个部分:一是让Visual FoxPro 充当客户端程序,再就是开发基于XML的Web Service;另外Visual FoxPro 7还专门设计了一个Project hook,方便开发人员快速开发Web Service。

Web Service为我们实现了这样的一个梦想:任何地点、任何时间、任何能上网的(Internetable)设备都可以使用我们用Visual FoxPro 开发的服务。据笔者所知,网上有一个用Visual FoxPro开发的Web Service:http://www.foxcentral.net,它提供关于Fox社区新闻的服务,大家可以看看!

到Visual FoxPro 7为止,在Visual FoxPro起码可以通过5种技术实现Web应用:通过强大的字符串处理能力实现了易于掌握的静态Web页发布;以Active Document 方便地将传统的Visual FoxPro应用程序转化为Web 应用程序;通过FoxISAPI+Visual FoxPro 开发的COM实现动态网页开发;通过ASP+Visual FoxPro 开发的COM实现动态网页开发;最后就是这里介绍的基于XML的Web Service。

4. 让Visual FoxPro作为Server运行

这是微软的理想,近年来Fox开发小组好多次提到:Visual FoxPro将作为多层应用的中间层使用,我的理解就是让Visual FoxPro作为Server运行,为客户端程序提供服务!

在这里有四个重要的问题需要解决,在Visual FoxPro 7中都有令人满意的答复。

问题一:Visual FoxPro能开发出稳定、有效率的Server程序吗?能,在1999年发布的Visual FoxPro SP 3中微软赋予了Visual FoxPro开发多线程进程的内组件的能力,并增加了新的运行时刻库VFPnT.DLL(n代表版本号),支持其运行,在这个运行库中,删除了大量老式的和界面控制元素,使得它更小巧。但是由于Visual FoxPro6本身不是很稳定(加打SP4或SP5才有所改善),所以这个很棒的功能在Visual FoxPro 6下并不能充分发挥,直到Visual FoxPro 7出现才使它的显示出英雄本色!

问题二:分布式的事务、动态负载平衡怎么实现?Visual FoxPro 7对COM+有很好的支持,借由COM+就可以解决这两个问题了!

问题三:作为Server程序,客户程序怎样与Server交换数据集合?这是Visual FoxPro 6开发的Server程序的致命弱点,我们知道Visual FoxPro是用来处理数据的,但不能与外界自由交换数据集合会大大降低开发、使用以及程序运行效率!在Visual FoxPro 7里我们XML就可以快速、轻易的传递大型数据集合,真正做到数据集的来去自由。现在回想Visual FoxPro 6中我们用的那种“循环+属性”的做法,真有天上人间的感受!

问题四:能不能让Visual FoxPro开发的Server任由客户使用,叫干什么就干什么?可以的,在Visual FoxPro 7里提供了一个全新的函数:ExecScript()。有了它,就可以一次执行多条客户端送来的符合Visual FoxPro规范的语句:你可以定义变量、做查询、更新数据、修改表结构……

让Visual FoxPro作为Server运行,Visual FoxPro 7做到了,编写这样的程序吧,感觉很爽的!

5. OLE DB的驱动程序

说到这里,有点生微软的气了:DBC的OLE DB 驱动程序微软早在1999年就开发完成了,但直到Visual FoxPro 7里才奉献出来。不过,从现在开始Visual FoxPro也是OLE DB Privider了,以后用ADO访问Fox数据库时效果一定会很好的。这为Visual Basic及ASP开发人员访问Fox提供了方便和效率!还有,这次的OLE DB驱动程序较以前的ODBC驱动程序最明显的改变就是支持访问DBC中的存储过程,这样开发程序时就有更大的弹性了!

6. 很棒的开发环境

这是Visual FoxPro 7给人们最深刻影响的环节,为了提高开发时的效率,微软确实花了不少心血!

IntelliSense。我以前常常羡慕Visual Basic程序员,他们在Visual Basic 5时就拥有了IntelliSense工具,于是他们不必要记忆大量的命令、函数、在对外来的ActiveX、COM编程时也能轻易的得到对象的方法、属性、事件。在Visual FoxPro里,如果说记忆Visual FoxPro本身的东西还没有什么困难的话,对ActiveX、COM就头疼了。现在Visual FoxPro 7也支持IntelliSense了,并且提供了强大的用户定义功能,在Visual FoxPro里这是一个可组态的工具;现在Visual FoxPro 7不仅支持对内部对象、命令、函数的智能输入导航,更支持对ActiveX、COM的智能输入导航,令人兴奋的是:Visual FoxPro的IntelliSense还支持最新的Web Service。完全可以自豪的说:Visual FoxPro的IntelliSense是最棒的,是可以由用户定义的。

Object Browse。与IntelliSense一样,在其他开发环境中早就有了,但并没有因此降低我对它的兴趣。首先,对COM对象、ActiveX的观察工具确实很有用;最重要的是:Visual FoxPro 7的Object Browse与Visual FoxPro开发环境紧密结合在一起--可以很简单的从Object Browse中拖逸COM对象接口到程序中,很简单的就可以“实作”COM对象的接口。

Document View。这是一个程序编辑的辅助工具,它可以列出文件中所有的过程、方法、函数、宏定义、头文件,帮助程序员在大量代码中快速导航。

Task List(任务列表)是一项贴心设计,它的功能有点像“书签”。但比“书签”强大的地方在于:一旦关闭文件“书签”就释放了,而Task List 不会。任何时候点击Task List 项目就可以快速打开相关文件,导航到相关的地点。

上文中,笔者试图从技术的角度分析了Visual FoxPro 7是具有“革命意义”的产品。Visual FoxPro确实是很棒的开发工具,用它可以轻易的开发桌面、C/S、Web Base应用程序,这些程序秉承Visual FoxPro 的特色——灵活而强健!

每次写这类Visual FoxPro的介绍性文章,在最后总要附上对Fox未来的展望,希望能堵住那些说“Visual FoxPro 要淘汰”的人的“臭嘴”!
2001年9月10日在美国举行的“VFP DevCon 2001”会议中,微软的Fox小组在题为“Visual FoxPro 7.0 and Beyond”讲座中,展示了下一个版本的Fox(Visual FoxPro 8)的一些已经成形的特色,其中包括了对WinXP界面风格的全面支持、自增量字段等,具体内容大家可以在线观看现场录像:http://msdn.microsoft.com/vfoxpro/;关于Visual FoxPro的未来,微软公司是有具体承诺的。今年9月微软的首席执行官Steve Ballmer发表了讲话:We"re committed to continually improving our tools to match your evolving demands as application builders.更具体,您可以参看录像:http://msdn.microsoft.com/vfoxpro/prodinfo/ballmer.asp。

浅尝辄止的与大家交流了一下有关Visual FoxPro 7的问题,希望有机会更深入的探讨具体问题!