分享
 
 
 

认识VF--Visual FoxPro 漫谈

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

BOE.COM Article Resource News Links About US

文章标题

Visual FoxPro 漫谈

作品来源

BOE 数据网络工作室

创建日期 2001年02月23日

最后更新 2002年07月21日

文字数量 约22000字

作者姓名 陈纯

译者姓名 原创作品 无译者

版权声明 版权属于BOE 数据网络工作室

相关下载 --

细节描述 作为市场上最灵活和功能最强大的数据库管理系统,Visual FoxPro拥有悠久而辉煌的发展历史。它初创时是Fox Software公司的FoxBASE产品,“Fox”(这是国际编程界对她的称呼)一种可靠、便捷和高效的程序员用的数据库产品而名闻遐迩。世界上没有一种产品像 Visual FoxPro 那样运行,她是独一无二的!

目录

前言

Visual FoxPro是什么

Visual FoxPro 已经过时了吗

面向对象与面向过程之争

面向记录与面向集合之争

产品定位导致Visual FoxPro变化不易为人们感觉。微软要把Visual FoxPro作为三层构架(或是多层构架)的中间层开发工具

Visual FoxPro 只能局限于桌面应用程序的开发吗

不要以为Visual FoxPro是“低端产品",无论从数据库(DBF Base)品质还是开发环境评价Visual FoxPro, 它都是一个“高端工具”

Visual FoxPro 的语言看上去蛮难的

OOP不仅是指“面向对象”的开发环境,更是一种开发思想、开发技术,Visual FoxPro 在后者上做得更好

Visual FoxPro的界面能力真的很差吗

Visual FoxPro与OLE DB、ADO

Visual FoxPro是一种历史悠久的产品,很多用户是从FoxBASE到FoxPro到Visual FoxPro,这样一步一步过来的。历史的积淀多了,历史的包袱也重了——许多程序员往往抓住老产品而忘了深入钻研新产品的新特性,这是一种悲哀

Visual FoxPro 与其他开发工具的比较

Visual FoxPro 从Visual Studio 中分离出来了

我们失去了什么

Visual FoxPro 与.Net

客观上,有利于Visual FoxPro 的发展

独立面对挑战

Visual FoxPro 7 的特性

巨好的开发环境

数据库事件

XML与Web Service

COM以及COM+

Install Shield Express For Visual FoxPro

Visual FoxPro 7 SP1

我们的 Visual FoxPro 8

已经看到的Visual FoxPro 8 的新特性

微软对Visual FoxPro 8的定位

Visual FoxPro 8 不会是.Net语言

我对Visual FoxPro 8 的期望

选择Visual FoxPro

前言

这篇文章可以说是 BOE 数据网络工作室的开山之作了。它的动工是从2000年国庆节开始的,写写停停,直到那年的农历春节才完成初稿……

后来我有几次修改,算在2002年4月的这个版本,应该是第四版了!

当初,我写这篇文章的动机是:平静的表达我的观点。作为一名 Visual FoxPro 的程序员经常受到别人的质疑、甚至是批驳、挖苦,我不是一个擅长口舌争斗的人,更不敢冒犯“众怒”。于是我就用键盘陆续敲击一些文字,表达我对 Visual FoxPro 的认识,同时表达对各类问题的看法……

近两年来,就我本人来说发生了很多变化:由于工作的关系,我接触了很多其他的开发工具,其中有大家广为熟悉的Delphi,也有国内不见经传的Rapid Plus、InTouch、InSQL、InTruck。体会过种种、经历过许多,我觉得我更有能力完成此文了,我希望站在公正的立场上看待Visual FoxPro,而不是社会上一味的批评、鄙夷,更不是Fox Fans的“天下我是老大”的心态!希望大家能在文章中感到BOE的成熟和进步。

网友们特别喜欢这篇文章,我知道Fox 的 Fans能在此处得到共鸣,其实我写这篇文章也就是要把平时大家关心的话题总结归纳一下,去粗取精、去伪存真……

去年春天 Visual FoxPro 7 就正式发行,好多狐友都在等待简体中文版,很遗憾的是,微软并没有汉化它。我觉得,没有任何必要使用简体中文版的Visual FoxPro 7,原因如此:功能上讲,中文版与英文版完全相同;Visual FoxPro 7的IDE与以前版本没有什么区别,所以对于熟悉Visual FoxPro的用户来说,使用上不会有任何障碍;再就是Help文件,Visual FoxPro 7自带了一个完整、独立的英文版的,而中文Visual FoxPro 6的Help是集成在MSDN里的,巨大无比,其实也没怎么汉化,一般的Fox Fans都不装的,所以就帮助来说,对于不熟悉英语的朋友来说,英语Visual FoxPro 7与中文Visual FoxPro 6是一样的;Visual FoxPro 7从各方面来说,均非Visual FoxPro 6可比拟的,升级开发工具是必然的。所以,希望各位,升级到Visual FoxPro 7吧!

Visual FoxPro是什么

作为市场上最灵活和功能最强大的数据库管理系统,Visual FoxPro拥有悠久而辉煌的发展历史。它初创时是Fox Software公司的FoxBASE产品,“Fox”(这是国际编程界对它的称呼)一种可靠、便捷和高效的程序员用的数据库产品而名闻遐迩。 世界上没有一种产品像 Visual FoxPro 那样运行,它是独一无二的!

许多人在享受了Visual FoxPro的服务后却说不清它是什么。就让我们沿着它的发展轨迹了解了解它吧!这会使您能对它有更深刻的认识。

FoxPro隶属于一种名为Xbase的DBMS类别。Xbase这个术语很常见,他表示诸如FoxPro、dBASEIII PLUS、dBASEIV、FoxBASE+以及ARAGO的语言。Xbase最初起源于一个大型机使用的DBMS,这个DBMS叫做JPLDIS(喷射推动实验室数据库管理和信息检索系统)。这个DBMS 是由美国人Jeb Long在1972年开发成功的。到目前为止全世界的开发者和程序员已经编写了几千万行的Xbase代码。

追溯到80年代末,FoxBASE是dBase的克隆系统。只要是dBASEIII能做的工作,FoxBASE就能做得更好更快。FoxBASE虽然拥有某些全新的特征,但它并没有真正重大的技术突破,只是为了运行得更快更好,而更重要的是它与dBASEIII兼容。

FoxPro 1.0首先背离了与兼容的原则。它开始在图形用户界面的设计和软件开发方法中采用一些新的思路,从而使它领先于当时年前景已不妙的dBASEIV。

从2.0开始,FoxPro才真正形成了它自己的特色。当FoxPro 2.0推出时,它包含了若干项关键技术,给PC数据库开发市场带来了革命性的变化。这些技术是:

加入了Rushmore技术,它能从事许多难以想象的复杂工作。突然之间,带有以百万计数的记录的表格在PC数据库系统中不仅成为可能,而且可以非常容易地加以实现,无需转用其他比较昂贵的技术;Rushmore最重要的优点在于它是完全自动化的,不用用户花费精力和时间。因为有了Rushmore技术,再加上Fox天生的快速,即使在今天Visual FoxPro仍然是最快的桌面数据库引擎。

SQL语句是FoxPro 2.0推出的另一项具有革命性意义的关键技术。Fox的开发人员首次用单一语句取代了整个程序过程,并且这种支持是内含于Fox数据引擎之中的。SQL语言曾经并且现在仍然是强大的数据语言。

FoxPro 2.0还推出了某种所见即所得的开发报表和屏幕的工具。

FoxPro 2.0确实具备了我们今天的Visual FoxPro拥有的一些出色的功能。GUI设计服务、SQL和极快的数据访问,是它明显的特征。

FoxPro 2.5有for DOS、for Windows版,不过那个Windows版只是具有看上去像“Windows”的DOS应用程序的外观。特别是那个DOS下的版本绝对是经典之作,观察身边是不是还有很多这样的系统在运行着?当时有人这样评价:这个软件已经无法再快了,除非硬件升级……

直到1995年春天Visual FoxPro推出时,才出现了FoxPro的又一次重大改进(这时Microsoft已经收购了Fox Software公司)。Visual FoxPro 3.0增加了一些人们企盼已久的特性,使PC数据库开发界大为震惊。我们可以看到:Visual FoxPro与FoxPro是由很大差别的,不要再把Visual FoxPro成为FoxPro了。这些特性是:

数据库容器(Database Container),也叫DBC,它增加了开发人员多年盼望的对存储过程的支持、与表格相关联的数据规则和一系列的附加数据功能。

远程数据的无缝连接。谈到连接远程数据的处理,大家往往会想到RDO、ADO、BDE等处理数据引擎,那么Visual FoxPro利用什么实现远程数据的无缝连接?Visual FoxPro本身的数据处理引擎,这和其他任何开发工具都是不同的!Visual FoxPro数据处理引擎通过ODBC驱动程序与远程数据库服务器“通话”,远程数据库服务器的ODBC驱动程序能将Visual FoxPro数据转化成可由他们解释的数据;相反,Visual FoxPro的ODBC驱动程序也能将远程数据转化成可由Visual FoxPro数据引擎处理的数据。可见,只要远程数据库有ODBC驱动程序,就可以用Visual FoxPro最为客户端软件。常见的SQL Server、Oracle、Access等数据库都提供ODBC驱动程序。

在Visual FoxPro中实际操作远程数据有两种方法,远程视图和SPT技术。视图(View)是可更新的SQL光标,增加了一整套的数据访问方法,用于数据处理、GUI显示和报表制作。它支持两种类型的视图,即本地视图和远程视图。本地视图是基于Visual FoxPro表格的视图,远程视图是基于任何ODBC数据源的视图。另外为了使Visual FoxPro成为完整的C/S开发环境,除视图之外Visual FoxPro还支持SPT(SQL Pass Through)技术来完成视图无法完成的工作,比如数据库服务器的用户管理、存储过程调用等。View与SPT技术的产生后,Visual FoxPro就成为访问远程数据的主要工具。从总体来看,创建整个企业范围内的应用程序和使用存储在远程数据源中的数据,几乎与使用Visual FoxPro表格本身一样容易,处理在数据存取时增加了一些命令、函数,数据处理与普通的Visual FoxPro编程没有任何区别。再次指出:Remote View与SPT技术是由Visual FoxPro数据处理引擎直接支持的,这与在VB、VC++中的外部数据访问技术不同(他们使用组件,如:DAO、RDO、ADO……),所以用Visual FoxPro访问远程数据的效率很高,并能把远程数据与本地数据完美的融合在一起,最大程度地提高开发效率和程序运行效率。

完全支持面向对象技术(OOP)。充分而健壮的实现了面向对象的处理方式大大改善了软件开发条件。健壮的对象模型和创建你自己的类及子类的所用的功能,形成了一种全新的软件开发手段。

Visual FoxPro 5.0是3.0的升级版本,它是一个32位的系统。具备了使用和创建COM服务器的功能,并开始支持在Internet上发布Visual FoxPro。从这个版本开始,Visual FoxPro进入了Visual studio家族,并且Visual FoxPro将不再升级的谣言也是在这个时期出现。

在Visual FoxPro 6.0出现之前,微软计划推出DNA,演化到今天就是.NET,并承诺把Visual FoxPro发展成健壮的中间层工具,所以这以后Visual FoxPro的变化初级用户就不太容易感觉了。

Visual FoxPro 6.0也没有根本上的变化,不过有些变化还是相当明显的。Access和Assign这两种方法在控制放入你的对象中的数据方面很有创意。运用新的Component Gallery(组件库)和Foundation Classes(基础类),你能很容易地转向创建面向对象的应用程序的工作。对COM支持的更好,在Server Pack 3后我们可以用Visual FoxPro创建多线程的COM组件。

Visual FoxPro 7是Fox第一个可视化版本——Visual FoxPro 3以后的最具有革命意义的一次产品升级换代。关于它的特性,稍候本文会有专门段落讲解。

Visual FoxPro的语言是由Xbase、SQL、OOP构成的。我不知道这样分解是否合理,我只是从FoxPro的发展历史得出以上结论的。其实以上三者在Visual FoxPro完美的融合在一起了,已经与Visual FoxPro血脉相连、不可分割,很多语句、函数很难区分它属于哪个门类(也没必要)。再者Xbase这一叫法也不十分妥当,这样容易让人误会,好像Visual FoxPro的语言是没有发展的“死语言”、是十几年前的“老古董”,其实在FoxPro每一次升级中(现在已是Visual FoxPro 7)都会对这部分语言进行修订、增补。我看还是这样:Visual FoxPro语言就叫它:“Visual FoxPro语言”,它既不同于任何以往的Xbase(最多有历史渊源),也不同于其它的编程语言。这就象Delphi那样,是Object Pascal语言,不是以前的Pascal;VB就是VB,不是以前的 Basic。

从Fox进入可视化的时代后,对COM技术的支持一直是Visual FoxPro在过去、现在、将来不断改进的地方。面向对象程序设计(OOP)的最大的好处就在于代码的重复使用。然而,OOP只是一种解决代码重复使用的一种优秀的方案(solution)。单纯利用OOP技术不仅要求所有对象都必须用一种语言完成,并且你还需要得到原程序代码嵌入应用程序(就像我们在Visual FoxPro开发使用Class那样)。如果对象是有你或你的公司完成的这些可能不是什么问题,但如果对象是由其他人或其他公司写的这就是问题了……再者为了节省资源我们常希望把一对象放在远程的计算机上供许多应用程序使用,怎样简单、安全完成这个任务呢?看来,单有OOP是不行的!于是微软提出了Component Object Model(COM)技术,有了它我们就不需要把对象源程序嵌入我们的应用程序中,就可以使用其他语言开发的对象,就可以分布的使用对象了。

COM技术提供四种不同的特性,Visual FoxPro支持所有的COM 特性。

ActiveX documents 允许用户在一个应用程序中编辑另一个应用程序的document。我们把Word文档嵌入或链接到Visual FoxPro中,就可以不离开Visual FoxPro编辑Word文档了。

ActiveX controls 为开发人员提供了增加的系统功能的方法,典型的应用就是各类ActiveX控件的使用来加强用户界面。这里要说明的是Visual FoxPro不支持(7.0也不支持)“集装箱式的”ActiveX 控件,比如Cool bar控件。

Automation 允许用户在一个应用程序中操纵另外一个应用程序或组件,典型的应用就是Visual FoxPro 与Office 的OLE-Automation应用。

Remote Automation 或者称 Distributed COM (DCOM)与Automation技术差不多,只是它支持组件的分布,这就是微软的分布式应用战略。

Visual FoxPro 不支持Active controls(ActiveX)的开发,但支持server components的开发,也就是在Automation、Remote Automation中使用的组件都可以用Visual FoxPro来开发。Visual FoxPro的这种能力是从5.0开始具有的,到了6.0的SP 3已经可以开发出多线程的组件了,这些在上文已经有过论述。以后的 Visual FoxPro 版本一定会对Automation,特别是Remote Automation有更好的支持,无论是开发server components,还是由Visual FoxPro充当客户程序。

综上所述,Visual FoxPro是创建关键任务的、企业范围的、面向对象的单层次、双层次、多层次应用程序的重要开发工具,这些应用程序可以在本地或全球范围内进行配置。

Visual FoxPro 已经过时了吗

恕我直言,这样的问题我真的听腻了。这个问题我听了好几年了。从谣言出现到今天Visual FoxPro的版本已经生了两次变化,就是Visual FoxPro 6.0 与2001年春天推出的Visual FoxPro 7.0。根据微软的官方消息,Visual FoxPro 8(可能是这个名称吧)已经在研发之中了。我不敢保证是否会有Visual FoxPro 9.0(这就像我不敢保证微软是否在那时还存在一样)。可以这样认为,只要不出意外情况(比如微软倒闭、业界发生了重大的变革等),Fox就会平稳地发展!

在国外,一个程序员、一家公司把他们使用的开发工具视作一项投资,作为Visual FoxPro的开发厂商微软公司就必须保护客户的投资权益,这是很基本的商业原则,微软绝对不敢随意淘汰有着50万用户的Fox,除非永远不想赚这50万用户的钱了。

为什么会有Visual FoxPro 要淘汰的传闻呢,我不是很清楚。但这两年微软对Visual FoxPro的不宣传态度却是为这股谣言起到了推波助澜的作用。另外Visual FoxPro 确实是一个容易引起误会的产品,初级用户很容易对它产生“不怎么样的”评判,于是加上那谣言就产生了“Visual FoxPro 就真的要淘汰了”的幻觉了。

为什么说Visual FoxPro 是容易引起误会的产品呢?我总结以下几点原因:

面向对象与面向过程之争

我们说Visual FoxPro是面向对象化的语言,是有根据的。面向对象化的语言必须具备四个特性:抽象(Abstraction)、封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)。对照一下Visual FoxPro,是不是支持这四大特性!

当然,Visual FoxPro 与C++和Object Pascal 一样都是历史悠久的语言,所以语言中有很多面向过程的语素。我知道很多学校在教学中,只是教导学生们使用Visual FoxPro的面向过程的语言特色,而忽视了面向对象的教学,同样的问题也存在于广大的 Visual FoxPro 程序员中。我们必须明白:不能因为我们没有使用Visual FoxPro面向对象的强大功能,而说Visual FoxPro不是面向对象的语言,这就像不能因为天下雨、没有出太阳,而说太阳被天狗吃掉了——多么的幼稚可笑!

我们知道Visual FoxPro对数据的操作沿用了多年来的面向过程的做法,这与现在流行的开发工具有很大的不同。我觉得,微软这样做是有它的道理的:

第一,面向过程的数据处理,更能发挥XBase语言体系的灵活与随意的特色。这一点,你用过其他的数据库开发工具,然后再用用Visual FoxPro就明白了。

第二,不直接提供面向对象的数据处理组件,不代表不允许用户封装自己的数据处理组件。很多优秀的 Fox程序员,都会自己封装专门数据处理组件,这才是Visual FoxPro编程的高尚境界!

面向记录与面向集合之争

根据笔者的浅薄认知,关系型数据库处理可以分为面向记录操作和面向集合操作。

各种开发工具支持的客户端光标体系就是面向记录操作的,它们支持记录之间的绝对定位,更明白地说就是可以在记录之间导航,诸如:SKIP、GO TOP之类的语句。Visual FoxPro 无疑是此道的绝对高手,20年的语言发展,聚集了大量面向记录的语言要素。这是因为这样,我们才会反复强调:Visual FoxPro的Cursor 体系灵活、强大!

各类大型数据库,如Oracle、SQL Server 是面向集合处理的代表,看看正统的SQL 语言,绝对没有数据导航之说,数据记录之间是平等的,一切都要讲关系、摆条件!

随着技术的发展,人们开始注意到,不能分割这两种对数据的操作方式,于是大型数据库支持了游标语素,Fox也支持符合规范的SQL 语言。

产品定位导致Visual FoxPro变化不易为人们感觉。微软要把Visual FoxPro作为三层构架(或是多层构架)的中间层开发工具。

什么是三层构架呢?第一层是用户界面:它包含了用户界面,让使用者输入,输出,查询等工作;第三层是资料层:它就是用来放资料的地方,一般是指后端数据库,主要有包括 Oracle、SQL Server 等,它主要是提供一个很大的地方,来有规则的存放数据;第二层是商务逻辑层(中间层):有人要说了:存取资料,直接从第一层跳到第二层可不可以?当然可以,没有人规定不能走捷径,而且从数据库直接抓资料,既快又好,那为什么搞出个第二层呢?

商务规则是经常变化的,比如上班从8 点改为10 点,那电脑怎那么知道老板因为不景气少让大家上二个小时班呢?它一定无法知道,你必须告诉它,这时问题就来了,如果你有很多部电脑,例如:100 台,你就得一部部换新程序。如果这是一个挂在Internet上的网络程序,难道总让用户download新程序不成?

更重要的是,在大量客户存在的环境里,传统的两层构架根本没有能力承担巨大的工作压力,必须通过某种中间系统实现压力平衡,这就是中间层的另一妙用!

中间层是没有图形界面设计的代码编写,并且是OOP方式的代码编写,不仅要熟悉后台数据库的特性,还要考虑前台界面工具的特性,最重要的是商务逻辑的构架,同时还要求懂得IIS、MTS(COM+)、NT的安全设置等复杂枯燥的东西。有趣的是,近年来 Visual FoxPro 的各种改进,更多的是在这些方面下功夫,到了最新版本的Visual FoxPro 7 更是在此方面增加了若干特性,下面就让我用四个问题来说明Visual FoxPro 在开发中间层方面的贡献:

问题一: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在中间层运行的承诺。但遗憾的是:由于国内用户的水平、国内软件应用的领域,对大多数Fox Fans 无法感受Visual FoxPro日新月异的变化——对他们来说,Visual FoxPro确实“没有改变”!

Visual FoxPro 只能局限于桌面应用程序的开发吗?

技术在进步,软件技术的应用不断在拓宽,Internet 已经是众多开发工具竞相支持的应用领域。Visual FoxPro 从版本 5 开始不断扩充对Internet的支持,到最新的Visual FoxPro 7 更是增加了对Web Service的支持。我们可以把Visual FoxPro 对Internet的支持分为三大部分:

第一,简单的HTML的转换。Visual FoxPro 自带的“Web 发布”就是这类型的工具,利用HTML和DHTML的模版,支持Visual FoxPro数据的Web化,这是一种全静态的 Web 支持。

第二,适合于企业内部使用的 Active Document 技术。是不是希望快速、简单的把Visual FoxPro应用程序转变为Web 应用程序,这个Active Document 技术就是最佳的选择。它支持 App 程序运行在IE中,它的缺点是:在客户端必须安装Visual FoxPro的运行库、客户端与数据库间依然是紧密的有状态的关系,属于F/S构架——只是界面能够运行在IE之中了。它的开发快速以及它依然基于传统构架,决定了这个技术只能运行在企业内部,一般不能在广域网络中发布。

这技术是Visual FoxPro 6提出的,当时在 Tool 菜单里还有一个专门的菜单项。到了而今的Visual FoxPro 7,这个菜单项已经取消了,但并不是说Visual FoxPro 7 不支持Active Document,只是这种并不出色的技术没有必要再放在醒目的位置了。

第三,基于COM 的 Web 应用。

Visual FoxPro 真正能被用于Web 开发,就是通过 COM 支持的。

这里您要有个认识,作为数据库开发工具,Visual FoxPro 不是FronPage这样的用于开发Web 界面的工具(也许未来的 Visual FoxPro 会支持 Web 界面的开发)。Visual FoxPro 完全是作为 Server 运行在网站的后台,为各种应用提供服务。使用 Visual FoxPro 编写的 COM 组件能够被IIS支持,压在后台进行各种运作——这就是真正意义上的Visual FoxPro 的Web应用,也是典型的多层构架的中间层!

这个阶段,Visual FoxPro 对 Web的支持有可以划分为三个层次:

FoxISAPI。

这是最先登场的技术,当年 ASP 技术还没有出现的时候,我们在 IIS 里就可以通过 ISAPI 技术实现动态网页开发。

Web Server

ASP 技术出现了,我们知道 ASP 技术的一大特色就是支持服务器端的组件的应用。用 Visual FoxPro 的编写的 COM 组件就能运行在 IIS 里,供 ASP 调用。

Web Service

这是 Visual FoxPro 7 的新特性,也是当前最热门的技术。它与Web Service的最大不同就是:Web Server 组件只能通过 ASP 程序调用,而Web Service可以供任何系统在全球范围调用,无论客户端的硬件平台、软件平台,只要它支持SOAP、支持XML就可以了。

更夸张一点说:只要能上网,就可以享用 Web Service 提供的服务!

有人也许会问:我可以用VB、VC++建立对象组件时,为何我要用Visual FoxPro 来建立相同的组件? 微软对这一问题有专门的评论,大意为:快、重复使用性、跨语言重复使用性。“快”是指用Visual FoxPro开发的组件撷取、处理资料都极为迅速,并且Visual FoxPro能够非常迅速的建立字符串。到底有多快,我想数据处理、存取的速度大家平时都领教过了,字符串生成速度我这里有个数据不妨一看,这是台湾的一位高手做的试验——将1M的数据写入文本中,结果VC++ 6.0程序用了3.5秒、VB 6.0程序用了11秒、Java 1.1.5用了24秒、Visual FoxPro 6.0用了7秒;“重复使用性”是指Visual FoxPro具备OOP的功能;“跨语言重复使用性”是指Visual FoxPro编写的对象编译以后成为COM、COM+对象组件,这样就可以在其他语言中使用它了。

不要以为Visual FoxPro是“低端产品",无论从数据库(DBF Base)品质还是开发环境评价Visual FoxPro,它都是一个“高端工具”。

许多人认为Visual FoxPro只能用来开发单用户系统或是文件服务器构架的小型网络系统——这是谬误——这种无知的言论在许多讲C/S、三层构架的书中都有(特别是一些VB、PB、Delphi的数据库编程书)。我可以很负责任的告诉大家完全可以用Visual FoxPro开发C/S结构的系统。这里说的C/S构架绝对是正宗的,不是用什么F/S构架在糊弄大家。在C/S构架中我们常常选择Visual FoxPro作为客户端开发工具,以Oracle、SQL Server等网络数据库压在后台,使用Visual FoxPro内置的Remote View和SPT技术,这样就可以完美地解决问题。这里不能详细展开,只特别介绍Visual FoxPro的本地引擎在开发中的作用。Visual FoxPro的本地引擎特别强大(上文我们说过处理百万条记录不费吹灰之力),我们在设计系统时可以十分简单的将远程数据与本地数据结合,很简单、很有效地控制网络数据流量、提高系统工作效率(我看过不少VB、Delphi、PB的书,他们很少在怎样控制网络数据流量、提高系统工作效率论述,不知是不屑一顾,还是其他什么原因)。

我认为Visual FoxPro的本地引擎在C/S构架下起码有三项伟大的用途。其一:非经常变动数据的本地存储。我国的邮政编码与地区的关系是相对稳定的数据,而且数据量也不是太小,我想总有上千个记录(我没仔细考察过具体情况),我们把这些信息存储在客户端的计算机中,就可以在使用邮政编码及其相关信息时从本地得到数据,这样能使高系统效率同时节省网络资源(这是C/S开发的重要原则),只在邮政编码发生变化时在服务器上统一更新,下载更新客户机上的数据。如果用别的软件实现同样的功能,绝对比Visual FoxPro麻烦而且效果绝对不及Visual FoxPro,这因为Visual FoxPro的数据引擎直接支持远程数据读取,能很好的融合本地数据与远程数据;其二:离线数据包。单位里总有人出差,在千万里路之外能不能拿着笔记本为客户发订单、与客户签合同,就像在自己的办公室一样?当他回到公司时只要把笔记本连到服务器中,发送更新就行了。Visual FoxPro的离线视图是经济且高效安全的方案(当然您可以使用远程拨入或建一个Web网站,这些Visual FoxPro可能干)。其实离线数据包还有一个重要的功能:当下载的数据是大量的(除非万不得已请不要这样设计系统),这种情况下使用离线视图可以数据集自动转化为物理表,充分利用Visual FoxPro的高速与灵活,完成后连线更新后端数据源——一切都很简单。我认为:离线视图绝对是Visual FoxPro在C/S系统中的一个卖点,虽然ADO也支持类似的东西,但肯定不及Visual FoxPro有效率;其三:数据驱动。您是否知道,Visual FoxPro中绝大多数文件格式实际上都是DBF文件,如DBC、SCX、FRX等,他们都可以由Visual FoxPro的本地引擎驱动完成复杂的任务。在设计C/S结构时如果要存储用户设置、自定义文件格式,用Visual FoxPro的本地引擎帮忙绝对比其他软件简单,因为你用的是换汤不换药的方法,但它简单、有效率。

Visual FoxPro 开发C/S系统时,最与众不同的特色就是对远程数据的操控是通过本地数据库来实现的,Remote View、Connection都作为本地数据库的对象被管理起来,完美的衔接本地数据与远程数据。这种在客户端建立远程数据逻辑的做法,与最新的ADO.NET有相似之处!

在三层构架中,Visual FoxPro可以充当任意一层的任务,但本人以为大中型系统的数据库部分应以网络数据库为主。客户端界面用Visual FoxPro也是可以的,但一般限于企业内部,在Internet上我们通常使用IE作为客户界面。在三层构架中Visual FoxPro最胜任中间层的开发,它简单(开发难度与普通的Visual FoxPro项目相差不大)、快速的字符串生成、支持COM技术、它支持(MTS)COM+技术、它支持XML(Visual FoxPro 7.0提供3个与XML有关的函数)、它具有强大本地数据引擎、灵活的数据处理方式、它支持多线程的服务组件的开发。

可能有人要问:用ASP+脚本语言一样可以开发Web系统,何必加个中间层。的确,目前在市面上与多讨论Web的书都直接使用脚本语言来开发整个系统,这是十分不正确的做法,甚至有写书还说硬件越来越快,因此使用脚本语言来开发整个系统并没有什么关系。会说出这样话的作者通常都是没有实际开发Web应用经验的人。脚本语言,如VBScript是一种解释性语言,运行效率很低,他们只合适作为胶水程序。开发Web系统正统的做法是:把应用逻辑编写成COM、DCOM对象,然后用少量的脚本语言来驱动/使用这些对象。这样系统开发时工作量会大一些,但它符合开发任何数据库应用程序的最基本的原则:分离应用逻辑与用户界面。这样系统就会变的容易维护了——你可以经常变换那些胶水程序来改变Web页面,应用逻辑变换时你又可以改变某一个逻辑对象,而不用为杂乱且关系复杂的代码发愁。再者,由于Visual FoxPro是高效、灵活的数据处理语言,任何商业逻辑都可以用它来代码化,并且您可以获得几十倍甚至上百倍于ASP+脚本语言的运行效率,以及更为强健的执行效果。

Visual FoxPro 的语言看上去蛮难的。

人们在赞扬 Visual FoxPro 始终是褒扬他的易学易用,我不同意这种观点(我不知道他们站在什么立场上说话)。我看问题的角度是“成为一名还过得去的 Visual FoxPro 程序员”,我的结论是Visual FoxPro 作为一个开发工具并不是好学的。这不是说Visual FoxPro的语法、概念像C那么繁复,而是指:即使是简单的应用,也要掌握很多Visual FoxPro的概念、语法、函数,可能还要较深入了解OOP——往往让人摸不到深浅。比如,拿数据库系统最重要的功能——查询来讲,Visual FoxPro就“花样繁多”。我曾统计过,不算“List、Browse"等交互式命令,Visual FoxPro起码支持4条命令(Find,Seek,Locate,Select-SQL)、3个函数(Lookup(),Seek(),Indexseek()),(当然其中有的已经淘汰)这些命令的关键字、函数的参数众多,有的要求索引, 有的可以用索引但要求优化索引……而这在VB、Delphi中绝对就只是两三个方法的事情。从上面的例子中如果您只看到了Visual FoxPro的繁杂,那么您就完全错了:在VB、Delphi实现查询功能的原理与Visual FoxPro应是一样的,但他们封装了许多环节,而Visual FoxPro就把许多东西更低阶(当然不如VC++那么低层次,但是已经比使用对象的语言难多了)的展示给我们,所以Visual FoxPro的开发者往往比使用其他的开发工具开发者更会思考、更懂得的数据库开发的真谛,因为工具逼迫他们朝这个方向努力……

用Visual FoxPro有助于提高程序员对数据库概念的理解。许多在Visual FoxPro程序员中不是问题的问题往往成为那些使用对象处理数据的程序员的噩梦。比如在Visual FoxPro中数据缓冲、事务处理都是重要的概念(事实上要干活就必须了解这些东西),在其他开发环境中一味强调方便快速往往忽视程序员的基本概念培养,编出的东西要么效率不高、要么老出问题。读书人都懂得:基本概念、基本理论是命根子,这就是Visual FoxPro带给我们的好处。

有趣的是Visual FoxPro繁、难也就到这个程度了 ,他的学习难度曲线是所有语言中最平稳的——不像在有些语言中,基础开发十分容易,一旦深入却难度很高。在Visual FoxPro中初级应用、中级应用、高级应用的难度差异很小——就是那些似曾相识的语句、易于理解的函数。Visual FoxPro的这种高级应用不太难,初级应用不十分容易的特性,对初入门者来讲是无法体会其中的妙处的,这就造成了Visual FoxPro的不太友好形象;

同时,Visual FoxPro的难度却带来了很多的好处(前文我已谈了很多),Visual FoxPro比其他语言在数据处理上更快速、更灵活,数据处理方式更多、更完备。设想一下用Visual FoxPro开发数据对象时,我们可以使用丰富多彩的语句、函数,实现十分复杂、变化多端的功能,用其他语言开发数据对象,它们的功能只能是建立在已有的数据对象的功能之上(这叫继承),变化就少了,功能就弱了。如果要实现Visual FoxPro的Xbase+SQL 那样灵活、强大的功能恐怕要使用底层的API了——这太可怕了!

OOP不仅是指“面向对象”的开发环境,更是一种开发思想、开发技术,Visual FoxPro 在后者上做得更好。

我们讲过Visual FoxPro完全支持OOP的开发,但有趣的是在数据处理方面,微软实际上没有提供什么现成的对象(FFC是Visual FoxPro 6.0才有的,且封装性、适应性都不尽如人意),这一点我不知是Visual FoxPro的福气还是祸害。说“福气”这将逼迫程序员掌握这门并不太简单的技术(可能用“思想方法”更恰当),而不是简单地使用对象。OOP对于中间层的开发来讲是很重要的,因为COM组件必须是建立在OOP思想上的,要开发这种组件就必须掌握OOP技术;讲“祸害”这使Visual FoxPro变得不易于学习和使用了(就我个人而言,真正体会到“用Visual FoxPro应会编制数据处理对象”这一问题也是在使用了Visual FoxPro好长时间之后的事情了)。事实上现在很多诽谤攻击Visual FoxPro的人都没有深刻的认识这一问题——他们只感到Visual FoxPro用起来不及Delphi、PB、VB容易,但他们从不想该怎样开发数据处理对象,到编写COM组件时就要他们的命了。那些“精英们”大多不懂OOP,他们只懂“点”操作符号——仿佛对象的使用就是OOP,他们有什么资格来批评我们呢?

Visual FoxPro的界面能力真的很差吗?

我认为作为数据库系统的开发工具微软为我们提供的那些内置控件加上十几个附送的ActiveX控件已经够用了。

我们讨论Visual FoxPro控件应从两方面入手,第一就是界面美观问题,再就是数据处理、分析是否方便。很多人很在意的前一个问题,我倒是不以为然——控件不多特别是美化界面的控件不多并不代表Visual FoxPro就开发不出赏心悦目的软件,我的感受是软件界面的专业化程度、高级别的审美、整体的效果要比个别的界面特效重要千万倍,实际效果可要好上千万倍。看看国外用Visual FoxPro编制的程序您就会明白这个道理了;我对Visual FoxPro的不满在于数据处理、分析控件不全,特别是缺少了一批数据分析控件。比如没有可以与数据捆绑的图表控件、没有可以列示捆绑交叉表的表格控件、没有可以捆绑数据的数据透视表格控件……在这个问题上Visual FoxPro确实应该向Delphi、PB等软件学习,这是我们对未来的Visual FoxPro的期望!

Visual FoxPro与OLE DB、ADO

ADO是Windows环境下主流的数据存取的解决方案,那些以对象操作数据的语言基本上都使用ADO实现数据存取,如:VC++、VB、Delphi。在Visual FoxPro的开发环境中好像看不到ADO的影子,是不是Visual FoxPro不支持ADO呢?ADO其实是一组COM对象,Visual FoxPro支持COM,当然支持ADO。

我认为:Visual FoxPro对ADO的支持只是停留在较低的水平。这并不是说Visual FoxPro限制了什么ADO的功能(所有功能都能用),而是指:用起来不方便,不像在VB、Delphi中方便。这种不方便主要体现在ADO的Recordset无法与Visual FoxPro的内置控件捆绑。其原因是:Visual FoxPro 不认识ADO的Recordset,只能将记录逐条读取,而不是一下子认得整个Recordset。这样数据就不能被捆绑了,同时也不能对ADO直接使用Visual FoxPro强大的数据处理功能(ADO是用来存取数据而处理数据还要靠客户软件)。

就象Visual FoxPro使用ODBC连接远程数据源那样,ADO通过OLE-DB与数据提供者对话。 (By the way: Visual FoxPro 7是OLE-DB提供者,这样就可以 通过正宗的OLE-DB驱动程序在其他开发工具中使用ADO存取Visual FoxPro数据了 。)

ADO能为Visual FoxPro带来什么?首先要注意的是:ADO与Visual FoxPro的数据引擎是毫无关系的系统,从某种程度上讲ADO的出现为Visual FoxPro提供了一种全新的远程数据处理方式。

ADO是多层应用程序中数据集合传递的最好解决方案。如果我们用Visual FoxPro开发了一个中间层系统,用VB开发了用户界面,当中间层要传递一个cursor到VB的客户端就不可以使用Visual FoxPro的cursor或DBF,因为VB不认得他们。使用ADO的Recordset就可以解决问题,因为大家都认得他;Visual FoxPro 只能通过Visual FoxPro 7支持XML后才能弥补Visual FoxPro本地引擎在应用程序传递数据集的不足。

ADO可以存取非关系型数据库。ADO是微软的Universal Data Access构架的主将,它可以存取Excel等非关系型数据数据库的数据。通过ODBC存取远程数据的Visual FoxPro就无此能力了。但是我使用了ADO存取Excel后很失望,因为连接必须是独占的,所以这种功能带给我们的帮助只是有限的!

ADO可以弥补Visual FoxPro在远程数据存取时的不足之处。譬如Visual FoxPro不认得SQL Server中nText、nVarchar、nChar等数据类型,但ADO可以。

在Visual FoxPro使用ADO存在如下缺点:

Visual FoxPro只能通过COM的方式识别ADO的Recordset,不能像表格那样读写它,这样就出现了两个问题:Recordset无法与Visual FoxPro的内置控件捆绑;无法直接使用Visual FoxPro强大的数据处理功能(ADO是用来存取数据而处理数据还要靠客户软件)。

Visual FoxPro中使用代码实现ADO的全部功能,但代码量大、书写麻烦。

对待以上不足Visual FoxPro开发小组在Visual FoxPro 6推出不久后就发布了一个叫VFPCOM.DLL的组件,可以用它部分解决ADO的Recordset与Visual FoxPro的cursor的转换和ADO事件的绑定 ,Visual FoxPro 更是内置支持 COM 事件绑定。在本文的第一版中,笔者曾有这样的希望:“Visual FoxPro 更具效率的支持ADO”。现在我的看法有了一些改变,我认为在 Visual FoxPro 处理数据,无论是本地、还是远程数据,无论是什么构架的系统,最佳的解决方案认识内置的数据引擎,而不是现在流行的ADO,现在 Visual FoxPro对ADO的支持程度已经足够了!

Visual FoxPro的数据引擎与ADO相比有什么优势呢?

Visual FoxPro数据引擎系统资源耗用小,ADO毕竟是COM组件要花用更多的资源。

作为系统共用组件,使用ADO可能会在不同应用系统中产生ADO的版本问题,这就像我们常遇见的ActiveX的控件版本问题。

ADO只是数据存取组件,它没有数据处理功能,要处理数据必须使用客户应用程序,如VB、Delphi。Visual FoxPro数据引擎同时支持数据存取、数据处理,我已多次强调Visual FoxPro在这两方面的伟大功能;

ADO没有本地数据库作为强大的支持,有需要将远端数据暂时存放在物理文件中ADO绝对不及Visual FoxPro。Visual FoxPro的数据库是桌面数据库中最好的,远端数据暂存其中不仅方便,而且伸缩性强。

使用ADO从数据源获得数据以后,再要对数据集合进行分组、查询、汇总是非常麻烦的事情,但是Visual FoxPro支持对Cursor的数据处理,我们可以使用绝大多数XBase语言(除了ZAP和Pack之类的表维护语言之外),还可以对Cursor执行SQL语句——这种强大的威力,绝非ADO所能比拟。

开发单机程序时,绝对不要使用ADO,这样做既没开发效率也没运行效率;开发C/S系统时我们应选用Visual FoxPro的SPT和Remote View,它们完全可以很完美的解决问题(已经有很多很多成功经验),不需要舍近求远地使用ADO;在中间层开发时,可以考虑使用ADO,我们为在此种情况下使用ADO的开发效率是蛮高的,因为这时所有的代码都要我们用一句、一句的写出来(在其他开发环境也一样),Visual FoxPro的语法简单再加上Visual FoxPro 7的极为强大Intellisense功能(真的很快并且可以由用户自定义),也许我们还会占些便宜的。

虽然ADO与Visual FoxPro是完全无关的系统,但他们却有共同的母亲——FoxPro 开发小组,原来ADO的光标集(Cursor Engine)是他们开发的。如果你同时了解ADO与Visual FoxPro,你会发现ADO的很多思路与Visual FoxPro一模一样……我总是拿这个典故说服那些不相信Visual FoxPro的人:最流行的ADO的光标集是FoxPro 开发小组写的,有什么理由怀疑Visual FoxPro的数据引擎——它是世界上最棒的!

Visual FoxPro是一种历史悠久的产品,很多用户是从FoxBASE到FoxPro到Visual FoxPro,这样一步一步过来的。历史的积淀多了,历史的包袱也重了——许多程序员往往抓住老产品而忘了深入钻研新产品的新特性,这是一种悲哀。

我遇到许多所谓会使用Visual FoxPro的人,还口口声声叫“Query Design”为“RQBE”,朋友那可是DOS时代的概念了。

很多人不仔细钻研Visual FoxPro,只是从其他工具中看到某项功能,凭空想象就说:Visual FoxPro不支持的。Delphi中特别指出它有异构数据关联能力,比如:父表是SQL Server数据,子表是Access数据,要求建立关联,实现“一多关系”。在Delphi要求使用特别的SQL语法来实现该功能。Visual FoxPro的文档里好像没特别说明这项功能,是不是没有呢?如果你深刻理解Visual FoxPro的远程视图及Cursor的用法,答案很容易得到。事实上,用Visual FoxPro能更直接、简单实现的实现:建两条“连接”、两个“远程视图”,对子表加索引,Set relation to,set skip to……

反过来Visual FoxPro能实现的功能,Delphi的BDE(Delphi的本地引擎)却不能:Visual FoxPro的远程视图能够将多个表关联后的结果集设定为“可更新”,并在数据变动后自动产生Update子句分别更新后台数据。例如:对SQL Server中Pubs数据库建立连接,新建远程视图为:

CREATE SQL VIEW TEST VIEW REMOTE CONNECTION CONNECTION1 AS SELECT Publishers.pub_id, Publishers.pub_name, Titles.title_id, Titles.title, Titles.price, Authors.au_id, Authors.au_lname, Authors.au_fname, Authors.phone, Authors.address FROM dbo.publishers Publishers, dbo.titles Titles, dbo.titleauthor Titleauthor, dbo.authors Authors WHERE Titles.pub_id = Publishers.pub_id AND Titleauthor.title_id = Titles.title_id AND Authors.au_id = Titleauthor.au_id ORDER BY Publishers.pub_id

这是四个表间的关系,算是比较复杂的SQL语句。别担心,这一切在Visual FoxPro只不过是用鼠标在“视图设计器”点击几次就行了。在您对视图进行“添加、删除、修改”并发送更新时, Visual FoxPro会进行分析地智能,产生Update字句分别将变化更新到后端若干个表中。而Delphi的BDE只能对Xbase数据源有此的作用,对其他的数据源都无此功能。Visual FoxPro可以支持所有的ODBC数据源(只要数据源本身支持),如:Oracle、SQL Server,Access……当然在Delphi 5.X中可以通过ADO弥补此缺陷,但Visual FoxPro同样支持ADO。Visual FoxPro的程序员要有这样的信心:Visual FoxPro为我们提供了最好的本地引擎!

古人云:欲善其事、必先利其器。所以我们不要指责工具怎么、怎么,多看看自己用好了没有!

Visual FoxPro 与其他开发工具的比较

这其实是一个很傻的话题,选择何种开发工具完全是由于程序员的面临的任务以及个人的喜好决定的。只要您选用的工具能够胜任您从事的项目,只要您对开发工具有足够的造诣以应付多变、复杂的工作,只要这个工具还在继续升级,您就没有理由更换工具,更没有必要掺和到这种无聊的讨论中去。

任何工具都有其优势与弱势,产品定位更是各自不同,每个程序员都觉得自己的选择是最好的,别人都是愚蠢的。以下的讨论只是无聊的笔者发出的无聊的言论,您大可掠过不看。

谈论Visual FoxPro,我们必须注意这样一个问题:Visual FoxPro 是干什么用的。毋庸置疑,它是一种数据库系统的开发工具。 我个人认为,到目前为止在Microsoft公司的所有开发工具中,Visual FoxPro是开发数据库应用程序的最佳产品。我们必须承认这样的事实:从一开始,Visual FoxPro 就是为处理数据而设计的,它运行速度快、功能强大、而且非常灵活。

有很多人老喜欢拿Access与Visual FoxPro 比较,对此我总不屑一顾,且让我们看看微软的评论吧!微软原话如下:“Microsoft Access 是 Office 中的数据库,也是微软所销售的软件中,使用最广且最容易学习的数据库工具。如果你是数据库的新手,如果你要使用Microsoft Office 来建立应用程序,或者你想要一个相当便利的交互式产品,那么就选择Access。Visual FoxPro 是用来建立关系型数据库应用程序的一种功能强大的RAD工具。如果你是一位以建立关系型数据库应用程序维生的数据库开发人员,而且你希望速度与功能都达到极限,那么请选择Visual FoxPro。”(这段话在今年Visual FoxPro 退出Visual Studio后,微软又重复了一次,强调Visual FoxPro是专业开发人员的开发工具,而不是Access 那样的普通用户的办公平台。)

根据我的经验,Access的MDB数据库适用于20万条/表的数据量的应用(它比Visual FoxPro数据库的唯一长处是:所有的数据库组件都在同一个MDB文件里,而Fox的数据库可能有多个文件组成,显得凌乱。),数据量再增加的话,不是说Access不能处理了,而是效率不行了——查询、索引都很慢。Visual FoxPro能处理百万计甚至上千万计的数据量,这都是有实践根据,在过去的20多年里,特别是大型网络数据库没有平民化的年代里,业界就是依靠DBF数据表来管理数据的,毫不夸张Visual FoxPro是能够安全、高效处理大数据量的专业工具。

有多人拿Visual FoxPro与VB、Delphi甚至是VC++做比较,这是很幼稚的,后面三者是编程语言,而Visual FoxPro是数据库 系统的开发工具,天生分工就不同。

我听说过这样的典故:Foxmail最初是用Visual FoxPro编写的(所以叫做FoxMail),后来改用Delphi编写。如果这是事实就很能说明问题,Visual FoxPro是数据库开发工具以它编写邮件客户软件有点勉为其难,即使成功了效率也不会很高,但如果是一个用Visual FoxPro写的管理系统中要求有邮件功能,Visual FoxPro则完全可以做得很好。

Visual FoxPro作为数据库开发工具,它为我们提供了十分强健、高效的数据引擎,它容量大、速度快、灵活、健壮,所以用Visual FoxPro开发单用户数据库绝对比其他所有软件来的高效——曾经有人嘲笑VB处理5、6万条记录就趴下,但我们的Visual FoxPro处理百万条记录也不觉吃力,所以Visual FoxPro的开发人员无论在什么时候都要注意发挥Visual FoxPro的数据引擎的威力,这样才能立于不败之地。VC++很厉害,但真正地用好它不容易, 开发效率也不高。如果使用VC++开发应用程序还象VB那样只会使用控件,那么还是别使用VC++了(这叫挂羊头卖狗肉),再者Visual FoxPro本身是VC++编写的,是历代最优秀的程序员智慧的结晶,为什么有了VC++还要花精力编写Visual FoxPro,这本身就 很说明问题。

又有人把Power Builder请出来与Visual FoxPro作比较,大家都是数据库应用程序开发环境,好像PB比Visual FoxPro厉害。 就数据库系统的开发而言,Visial FoxPro 可以开发单用户系统、网络环境下的文件服务器系统、客户机\服务器系统、Web Server、数据处理的COM组件、Web Service,可以说除了Web界面无法开发之外,凡是与数据库系统有关的开发领域Visual FoxPro都很好的支持。PB的起点在客户机\服务器系统,也能很漂亮的完成工作,此中取舍全凭个人喜好;另外,PB的成本很高。据我所知它的价格十分昂贵(有人戏称说PB是世界五百强才用的起的产品),而Visual FoxPro才卖几千人民币。当然,这个观点您可以不接受——在中国软件是没有价值的,每张只卖5元人民币;还有PB的开发方式与众不同,用了他以后再改学别的会比较困难;最后退一万步讲,您要变换编程工具,我也不赞成改用PB,因为PB再好也是一个数据库开发工具,从这上面讲与Visual FoxPro是一个级别的东西,您想变换工具一定有更多的需求,我看用C#或Delphi会是更佳的选择。

所有这些语言与Visual FoxPro相比,最大的区别就是:Visual FoxPro是程序设计语言与DBMS的完美结合,而Vc++、Delphi、Vb、PB都只是编程工具,而不是DBMS。Visual FoxPro的这一特性,决定了它更合适与任何类型的企事业单位,我无法想象——为了简单的查询还要用Vc++、Delphi、Vb、PB编写一个Exe文件,使用Command窗口多好!

又有人把网络数据库如Oracle、SQL Server与Visual FoxPro相比较,说了Visual FoxPro一大通的坏话,这种人其实很傻,你大可对他嗤之以鼻。大型数据库与桌面数据库在系统开发中的作用是不一样,两者是相辅相成的。我们应该把注意力放在“怎样发挥两者数据库引擎最高效能的问题上”,而不是去争论孰优孰劣。这种争论就好比是评论是男人漂亮、还是女人美丽那样——毫无意义。

Visual FoxPro 从Visual Studio 中分离出来了

2001年2月26日,微软宣布将Visual FoxPro 7从Visual Studio 中分离出来,这是一个好消息还是坏消息呢?我们来分析一下:

我们失去了什么

我们先来观察,Visual FoxPro不成为.Net语言,在技术上损失的是:不能开发基于.Net的Web应用程序。

Visual Studio.Net 是一种擅长于开发Web应用程序的工具,过去与现在微软霸占着"桌面应用程序"应用市场,现在微软要吞噬现在由其他公司控制的大型网络应用市场,于是推出了.Net构架,Visual Studio.Net就是开发基于.Net的应用程序的RAD(快速开发环境)。

笔者认为:起码在可知的一两年内,我们这些用Visual FoxPro写程序的人不会有用Visual FoxPro开发大型Web应用需求,客观上绝大多数企业也不会有自建一个电子商务网站的需求,我们并不会因为Visual FoxPro不是.Net语言而失去我们的市场--普通的企业级(单用户构架、File Server构架、(两层、三层)客户机\服务器构架)的应用。等.Net真正热起来,那将是几年后的事情了!

当然作为.Net语言也可以开发桌面应用程序,Visual FoxPro成为.Net语言不是更好吗?笔者的看法是:不一定。一位网友说:VB.Net的語法像VC++又像JAVA,已經完全不像BASIC語法了,等於是要重新學習另一套語言了,有这种感觉的VB程序员很多,听说国外有很多VB程序员还"忧心忡忡"的。连微软也承认:VB 6与VB.Net是差别很大的语言。

假设VB变化的只是语法特色(这已经够厉害的),那么如果Visual FoxPro现在成为.Net语言,其标志性功能的损失一定比VB更多!我们认为:这其中最不能让大家容忍的就是:Visual FoxPro的数据引擎和数据处理手段将损失殆尽,说实话我们中多数人使用Visual FoxPro就是看中了它在数据处理上的无与伦比优势。.Net语言使用公共运行库(Common Runtime Language),数据库方面的功能是通过外挂ADO等组件完成的。在技术不成熟的现在,让Visual FoxPro运行在CLR上,势必只有三种选择:取消Visual FoxPro的数据处理组件,让它使用组件处理数据;把Visual FoxPro的数据引擎加入公共运行库;Visual FoxPro的数据引擎做成一个组件。可见这三种选择没有一种是合理的,即使成了,那么Visual FoxPro也就成为了一个四不像的东西。

Visual FoxPro 与.Net

Visual FoxPro 能够很好的支持XML、Web Service、COM。通过它们,Visual FoxPro就能与.Net整合在一起,并能开发.Net中最最热门的话题:Web Services。

客观上,有利于Visual FoxPro 的发展

Visual FoxPro作为Visual Studio的一员并不能很好的发展"Fox的事业",这个观点是各国狐友的普遍共识。作为Visual Studio的一员,Visual FoxPro更多的像其他Visual Studio产品看齐,忽视自身特色的发展,忽视用户的需求;产品升级、服务包的提供周期变长(要等其他产品的完工),如果Visual FoxPro 7不分离出来,发布期起码要晚半年。将Visual FoxPro从Visual Studio.Net中分离出来,最起码以上两个问题会有很好的改观,特别是Visual FoxPro会更重视用户的需求。

独立面对挑战

Visual FoxPro从Visual Studio.Net中分离出来最大的坏处是:必须独自面对市场。说白了就是:能不能卖的好?如果Visual FoxPro 7.0的生意还不错,那么Visual FoxPro就会发展的很好--这是很简单的道理。

在微软所有的开发环境中,Visual FoxPro是唯一内嵌数据引擎的——VC、VB都必须外挂数据处理引擎,如:DAO、ADO等,当然VC可以使用底层API调用来完成数据库处理方面的任务——这就是Visual FoxPro的特色--为数据处理而生,但是如果现在盲目的把Visual FoxPro并入Visual Studio.Net的话,Visual FoxPro的这一特色必然不能保存,这对微软、对用户都是损失。VB、VC则没有这个问题--反正它们不内置数据引擎,只要.Net可以调用数据处理组件就可以了!

Visual FoxPro 7 的特性

前面已经提到多次,Visual FoxPro 7 已经在2001年5月中旬正式发布的,6月份在美国上市。现在不少网友已经得到了Visual FoxPro 7的英语正式版,使用之后,产生了种种评判。在美国人们认为,Visual FoxPro 7是继 Visual FoxPro 3以后 Fox 发展史上最具有“革命意义”的版本,评价是很高的;而在国内,不少尝鲜者感叹:这是微软不好意思说SP的产品,简直就是Visual FoxPro 6+SP6……两种评价相差这么大,谁是谁非呢?

笔者在2000年底就得到了它的Bata 1版,2001年7月得到了英语正式版。初次见面确有失望之处——界面改观太小了——除了几个窗口可以停放、菜单上多了几个图标之外,几乎与Visual FoxPro 6没有区别,最无法容忍的是可视化控件一个也没有增加……

我耐着性子读着帮助了解Visual FoxPro 7的新特性,慢慢的我有了这样的感受:有了Visual FoxPro 7我决不用Visual FoxPro 6,这也是我对Visual FoxPro 7的评判,虽然它不完美,有的地方不尽如人意,我还是觉得给它打个80分总是应该的。接下来笔者就谈谈使用的感受:

巨好的开发环境,这主要体现在六个方面:

IntelliSense(智能感知输入提示)、Object Browse、Document View、Task List(任务列表)、最近使用过的文件记录、窗口停放。

IntelliSense。我以前常常羡慕VB程序员,他们在VB 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 项目就可以快速打开相关文件,导航到相关的地点。

就像Word那样,Visual FoxPro 会记忆用户最近使用过文件,这样就能减少用户查找文件的时间。

窗口停放。显示器越来越大、分辨率越来越高,程序员的桌面空间越来越小——开发环境对内部工具窗体的管理很要紧——合理组合,提供更大工作空间。在我用过的开发工具中,我最喜欢Visual FoxPro的环境配置,不满意的是:命令窗口、数据工作期窗口、属性窗口的凌乱。现在好了——Visual FoxPro 7支持了工具窗口停放,达到了节约空间的目的。

Visual FoxPro 7 对开发环境的改善有细微之处的变化、更有大部头的作品。它吸收了各种开发环境的优点,融入了Fox自己的特色,值得称道。

数据库事件

Visual FoxPro 7 最亮丽的特色是60个左右的数据库事件,这是自Visual FoxPro 3以来一次最大的对数据库引擎的改善。这些事件对管理整个数据库有很重大的意义,我们可以把维护数据库的代码写在事件中,只要有相应的操作就会触发,这样就网罗了所有的相关动作,而不是像以前那样写在应用程序中!数据库的事件应用面可能很广,发挥它的作用还得靠大家的智慧!

XML与Web Service

Visual FoxPro 7 支持 XML 文档与 Fox 光标的转换,真是一件令人兴奋的事情,以前我们开发COM应用程序时总为数据集合传递感到头疼——本人的解决方案是——模仿ADO的做法,让客户程序以循环的方式得到记录集;当COM组件要得到记录集时,好像就更麻烦了……现在好了,业界新标准——XML可以文本(字符串)的方式传递数据集合,真是一件美事!

Visual FoxPro 7 支持XML,同时对SOAP也有内置的支持,这样就使得Visual FoxPro 7成为.NET构架下的工具了,我们可以使用Visual FoxPro7轻松的开发、发布Web Service,这样我们的应用程序就可以在任何时间、任何地点被任何支持Internet的设备调用,为它们提供服务。

Web Service可是当前业界最最热门的话题,Visual FoxPro是微软公司推出的第一个能开发Web Service的工具。支持 Web Service,使得Visual FoxPro 程序员具备了开发新型分布式应用程序的能力。

COM以及COM+

COM组件开发的感觉特爽,不仅是开发效率的提高,更是COM组件运行的效果明显改善。Visual FoxPro 是从5.0开始支持COM组件的开发,6.0版本开始走向成熟,6.0的SP3以后支持多线程组件的开发,7.0版本中开发COM组件明显比6.0版本运行效果好,可以说是成熟、完美的技术了。

我以为Visual FoxPro 7对COM的支持可以分为两个部分:Visual FoxPro充当COM的客户程序、Visual FoxPro作为COM服务程序。

Visual FoxPro 7 支持COM组件的“Interface”实作,支持早期绑定。这都是伟大的革新,我们知道COM本身不支持“继承”,所以我们无法写出基于某个COM组件的“子类”,但我们可以通过“实作”COM组件的“Interface”,来实现多重“继承”……

同时用Visual FoxPro 7编写的COM组件,比以往任何一个版本的Fox都可靠,并且完全支持Windows 2000的COM+规范。微软在宣传Visual FoxPro 7时指出:Visual FoxPro的COM组件可以被用作工业现场的无界面数据处理,可见其稳定性。

Install Shield Express For Visual FoxPro

Install Shield 是主流的安装程序制作软件,在Visual FoxPro 7 里微软就用 Install Shield Express For Visual FoxPro 限制功能版代替了原先的安装向导。更可贵的是,这个版本的Install Shield提供了中文语言包,也就是说可以生成中文界面的安装程序了。有了Install Shield ,我们就能做出最合乎潮流的安装程序。

新特性还有不少,您就自己看吧!还可以参看笔者撰写的《Visual FoxPro 7漫谈》一文。

软件的升级对我们用户是否有好处,主要是看他为您解决了多少难题、减轻了多少痛苦。Visual FoxPro 7对于高级用户可能更有吸引力,当然普通用户也一定会对它的超级开发环境有兴趣。

Visual FoxPro 7 SP1

2002年1月16日,微软发布了Visual FoxPro 7的SP1。这是一个彻底的补丁包——几乎没有推出任何新特性。

加装SP1能够改善Visual FoxPro 7对XML的支持,根据笔者测试,再不安装SP1的时候,XMLTOCURSOR()函数无法正确解析中文字符,而安装了SP1以后,这个问题就解决了!

我们的 Visual FoxPro 8

当我们还在讨论Visual FoxPro 7的时候,Visual FoxPro 8已经像我们走来了!

Visual FoxPro 8的产品代号是"Toledo" ,是有FoxPro社区选出来的。

已经看到的Visual FoxPro 8 的新特性

2001年9月初,在美国举行的“VFP DevCon 2001” 会议中,微软Fox小组成员召集了名为“Visual FoxPro 7.0 and Beyond”的主题演讲,Calvin Hsia 为到会的开发人员演示了几个已经完成的Visual FoxPro 8的新特性,虽然都是些不大的改进。笔者个人觉得2003年Visual FoxPro 8将正式发行,但至于那是他叫不叫Visual FoxPro 8我就不知道了,也许微软会为它改个名字……

支持自增长字段。

用一个属性实现,表格控件当前行的突出色彩现实,并且在表格失去光标时,依然高亮度显示当前行。

页框控件的得页标头支持上、下、左、右四个方位的放置。

控件的ToolTip支持多行显示。

所有控件支持Windows XP的界面风格。

微软对Visual FoxPro 8的定位

在 FoxPro Advisor 杂志里,有一篇名为《Memo from Microsoft》 的文章,登载了微软Visual FoxPro 产品经理 Ken Levy 对2002年 Visual FoxPro 发展的计划,其中专门提到了Visual FoxPro 8 的产品定位,原文是:

The main top-down goals for Toledo are to provide a better rich client, improve distributed Web client features, improve developer productivity, and increase discoverability for ease of use. You can see that the product direction focuses on features VFP developers have requested.

Visual FoxPro 8 将在客户端开发上做重大的改进、加强,这与当年微软对 Visual FoxPro 5、6 的定位截然不同——强调Visual FoxPro 在Visual Studio中的作用,强调Visual FoxPro开发中间层应用、COM组件。现在Visual FoxPro 离开了Visual Studio,产品重新定位,顺应开发者的需求,提出了 Rich Client(胖客户端)定位!

还有就是Visual FoxPro 8可能可以开发Web Form了,也就是所谓的 distributed Web client features。

Visual FoxPro 8 不会是.Net语言

Ken Levy 还表示,Visual FoxPro 8将坚持现有的体系构架,而不会运行在.NET common language runtime (CLR) engine 上,成为.Net语言。

我对Visual FoxPro 8 的期望

以下只是笔者一家之言。

远程数据访问

Fox历史上的每一次重要升级都与数据引擎有关,比如2.0时加入了内置的SQL语句和Rushmore技术;3.0时提出了完整的数据库概念,加入了远程数据处理的技术;7.0推出了数据库事件的概念。笔者以为,Visual FoxPro 8可能在远程数据的处理上有改进,我们知道现在的Visual FoxPro是通过ODBC对远程数据实现访问的,ADO主要使用OLE DB来访问远程数据,PB这样的软件更是有底层通道访问各种主流数据库;最新的ADO.NET中,微软更增加了对SQL Server 7.0及2000的直接(底层)访问,当然对其它数据库仍然采用OLE DB来访问。现在我们在Visual FoxPro中,要想通过OLE-DB访问远程数据必须使用ADO组件,但从实际应用来看ADO并非是Fox访问远程数据的主流方法,所以Visual FoxPro 8 应该会在访问远程数据方面提出更加具备效率的方法:或是对SQL Server的底层通道,或是使用OLE DB连接到远程数据……(哈哈,这时我去年写的,今年已经从微软得到证实:Fox 小组正在改进Visual FoxPro与SQL Server的通讯。看来,我的感觉蛮准的!)

无论访问怎么通道变化,对用户是感觉不到的,就像现在用户感觉不到我正在通过ODBC连接SQL Server的数据一样,只是效果更好。 (注:ODBC仍然是绝对主流、稳定的远程数据访问方式,只是速度略微慢于OLE DB;但它的兼容性绝对好于OLE DB下的ADO。所以未来的几年中ODBC仍然是值得信赖的远程数据访问的解决方案,特别是Visual FoxPro用户)。

当然,随着Fox用户越来越多的使用SQL Server作为后台数据库,Visual FoxPro 8 会在加强开发环境,例如:数据字典,用户可以方便的查看、维护数据源的表、视图、存储过程、触发器等对象,以提高开发效率。

报表工具

Visual FoxPro 8将会对报表工具进行大幅度的改进,首先是将报表最为一个对象处理,是报表变得很容易访问、控制;再就是提升报表的性能,例如多细节带区报表……;报表预览更自由,预览窗口将不再是模式窗口,由于窗口可以是任意指定的表单……;报表显示的数据可以与报表一起保存,这样报表就可以作为一份历史文档……

当然,微软也有可能将Crystal Report内置到Visual FoxPro里去,但我坚信:Visual FoxPro 8一定会在报表问题上给我们一个答复!

调用API更方便

我觉得直接调用API不是最佳的编程方法,但有时没有办法,只得调用。Visual FoxPro 8会支持“结构”这样的数据类型,可视控件都会带有句柄属性,这样就可以在Visual FoxPro中简便的使用API的各项功能,不像现在明明是很常见的API调用,在Visual FoxPro中却很麻烦……

界面的改进

我直言不讳:Visual FoxPro的界面效果简直是微软的耻辱!如果Visual FoxPro 8在这方面会为我们带来一些清新空气的话,这里有两种可能:我想微软会在现有的基础上升级整个界面以及内置的可视化控件,使他们符合Window的发展潮流,更规范、更流行;也可能Visual FoxPro 8将加入.Net系统,继承那个公共运行库提供的美好的界面。笔者以为:如果微软准备改善Visual FoxPro难看的界面,采取第一种方案的可能更大。(哈哈,我有猜得差不多!)

以上的猜想(更是美好的愿望)在加上编译加密的愿望可能是所有用户对微软的期望,就让我们看看,微软会为我们带来什么吧!

选择Visual FoxPro

笔者是一名程序员,不是搞行政的、做推销的,说话办事总讲个实在、一就是一、虚夸是不喜欢的。说心里话,Visual FoxPro在它的应用领域既不像那些大吹大擂的人说的那样神奇、世界第一,更不像社会上那些一知半解、不懂装懂的人讲的那样不济,我的观点是用好Visual FoxPro足以与任何当前流行的开发工具抗衡,其中关键是:您是不是高手,您是不是把Visual FoxPro用在了它合适的领域。

我们为什么选择Visual FoxPro作为我们的开发工具,因为他对我们有用,别的工具对我们来说用的没有它的得心应手,用了Visual FoxPro我们能够开发出经得起比较、经得起市场风浪、经得起生产实践考验的系统,这对我们来说就足够了!!!

在本文的即将结束之际,笔者想让大家看看用亚马逊网站(www.amazon.com)上Visual FoxPro 7的一段英文介绍,虽然有广告色彩,这段文字却真实、全面的概括了 Visual FoxPro 的特色、用途:

Microsoft Visual FoxPro 7.0 enables you to build high-performance desktop, client/server, and Web database applications with its database development system. Employ its powerful data engine to manage large volumes of data, its object-oriented programming to reuse components across applications, and its built-in XML support to quickly manipulate data. Visual FoxPro 7.0 provides the tools and powerful data engine developers need to manage large volumes of data, whether they are organizing tables of information, running queries, or building full-featured database applications for end users. It helps developers achieve maximum productivity through a powerful development environment and easy-to-use visual design tools, and provides the flexibility to build all types of database applications, and to build and consume COM+ components and Web Services.

Make applications accessible to third-party tools, such as screen readers, voice-recognition devices, and automated test harnesses. You can also make Visual FoxPro data easily accessible to non-Visual FoxPro-based clients. Build interoperable applications and components through the ability to represent Visual FoxPro data as XML and to import XML data into Visual FoxPro tables. Control user actions with code that executes when databases are opened, closed, or modified. You will reduce coding time by obtaining powerful, extensible language assistance as you type. View and quickly navigate to procedures, functions, and methods in source code, dock common tools such as command, data session, and debug windows. You can create setups for your custom applications using a special version of the popular InstallShield Express developed exclusively for Visual FoxPro. The enhanced code editor reduces coding time with support for bookmarks and shortcuts, find capabilities, and case conversion.

最后,我想告诉大家一个好消息:2001年9月24日,微软的CEO Steve Ballmer 发表了关于 Visual FoxPro 7.0的讲话。他除了介绍Visial FoxPro 7的新特性之外,还代表微软承诺:微软将继续推动Visual FoxPro的发展,为全球开发人员提供更好的支持!

原文如下:

Hi, I'm Steve Ballmer from Microsoft, and it's my great pleasure to be able to talk to you about a newly released version 7 of Visual FoxPro. Visual FoxPro 7 is a great tool for building database solutions of all sizes. From multi-tiered database applications, to data-intensive COM components, and XML Web services.

I hope you've heard by now about .NET, Microsoft's platform for next generation XML Web services. Visual FoxPro 7's support for XML standards, such as SOAP and WSDL, make it easy to create .NET Web services in the same environment you know and love today.

Along with full support for WindowsXP, Visual FoxPro 7's XML support allows integration with .NET Enterprise Servers such as SQL Server 2000 and our BizTalk Server. And XML support in OfficeXP makes it easier than ever for Visual FoxPro 7 developers to import and export spreadsheets. Microsoft is committing to improve Visual FoxPro and continue to serve the needs of FoxPro developers worldwide.

The developer community is core of us. We value the bet you're making on us. The time and energy you put into building great Visual FoxPro applications for Windows, and we won't let you down.

We're committed to continually improving our tools to match your evolving demands as application builders. We think we've got exactly the right line up with Visual FoxPro and Visual Studio .NET, allowing you to continue to innovate and do incredible things for the customers we all serve.

I hope you agree with us that Visual FoxPro 7 is an exciting release. And I hope you join me in supporting Ken Levy and the rest of the Fox team here at Microsoft as we build a bigger, and better, and a more successful FoxPro developer community. Thanks a lot.

因此,我们的看法是:如果你想开发出色的应用程序并想保护你的投资,那么选用Visual FoxPro准没错。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有