Visual FoxPro(以下简称VFP)是微软公司Visual系列开发工具中的一种。在VFP 6.0中,与外部数据源进行数据交换的方式有导入导出数据、远程视图、SQL Pass Through以及数据升迁等几种方式。其中,导入导出数据是完成对静态数据(或文本)的数据转换,而对动态数据源的访问则主要是使用Windows中的ODBC技术。本文介绍在设计客户/ 服务器体系结构的应用程序时,如何使用VFP来实现与外部数据源的数据交换。
导入导出数据
导入导出数据是指利用VFP的内部转换机制由一个静态文件生成一个指定的新文件的过程。可以被转换的文件类型主要有:Excel文件、Paradox数据库文件、Lotus电子表格中的数据以及其他形式的文本文件。
导入数据是指将一个外部文本转换成一个新的DBF文件。例如:将A盘上的一个abc.xls文件转换成Example数据库下的CBA.DBF表,可用如下命令完成:
import from a:\abc.xls Database Example Name cba Type xls
导出数据是指将一个打开的VFP数据表(DBF)文件转换成一个其他形式的外部文件,同时还可以使用范围或条件子句对被复制的数据进行过滤。例如:
use cba
copy to abc for fieldl=“aaaaa”,type xls
上述代码将CBA.DBF文件中满足条件“fieldl=,“aaaaa””的记录转换为Excel文件abc.xls。
远程视图
远程视图以视图的方式通过ODBC与外部数据源建立连接,从而达到访问或更新外部数据源的目的。它是客户/服务器体系结构中经常运用的一种访问外部数据源的方法。在VFP中建立远程视图的方式主要有两种:采用VFP中的视图向导和程序方式。在使用程序方式时,一般需要两个步骤:
● 通过ODBC与外部数据源建立一个命名连接;
● 定义视图。
建立一个远程视图后,用户就可以像调用一个自由表一样来使用它。在使用远程视图的过程中,应当注意以下几个问题:
● 远程视图只能对后台数据库进行查询、插入、更新和删除等操作,不能进行数据定义。它的事务处理只限于对本地数据库的操作,而无权管理后台数据库。
● 尽量不要使用远程视图对后台数据库进行多表插入的操作,以免产生非法NULL值或引起数据不一致。
● 尽量使用SQL语句完成对后台数据库的操作,以免在执行时产生二义性。
例如,我们要访问一个远程SQL Server上的my-db库中的my-tab表,可由如下的语句来完成(假定sql为已在ODBC中建立的与SQL Server 服务器的my-db数据库相连的数据源):
create connection example datasource sql userid usr-1 password sqlpass
/*建立一个名为example的与SQL Server服务器的连接*/
create sql view my-r-view remote connection example as select * from my -tab
/*建立一个名为my-r-view的远程视图。该视图依赖于example连接,视图访问的是my-tab表中的所有字段。*/
use my-r-view
/*打开my-r-view视图*/
browse
/*浏览视图中的内容*/
SQL Pass Through技术
SQL Pass Through(以下简称SPT)技术能使用户直接访问ODBC函数,并把SQL语句发送给服务器执行。与远程视图相比,它能够更直接地控制后台服务器上的数据库:
● 可以使用服务器的特有功能,如存储过程和基于服务器的内部函数等;
● 可使用服务器所支持的SQL扩展功能,而且可进行数据定义、服务器管理和安全性管理等;
● 对后台数据库的更新、删除和插入等操作拥有更多控制权,对远程事务也拥有更多控制权。
该方法的缺点在于不能使用图形化的设计器,而且必须在命令窗口或程序中直接输入SQL命令。
在SPT中经常使用的函数主要有:连接管理函数(如SQLCONNECT、SQLSTRINGCONNECT、SQLDISCONNECT等)、SQL语句的执行和控制函数(如SQLEXEC、SQLMORERESULTS、SQLCOMMIT、SQLROLLBACK等)。下面给出一个应用实例来说明这些函数的使用及其参数的设定:
Store sqlstringconnect(“dsn=sql; uid=usr-1; pwd=sqlpass”)to gnconnhandlc
/*将连接函数的返回值存入连接句柄gnconnhandlc中)
If gnconnhandlc<=0
/*当连接句柄gnconnhandlc的值小于或等于零时,表明连接失败*/
Messagebox(“建立连接失败”,16,“SQL Connect Error”)
Else
Sqlexec(gnconnhandlc,“select*from my-tab”)
/*当连接成功后向服务器发送一个查询语句,并将返回的结果集存入一个临时表中*/
Sqlcancle(gnconnhandlc)
/*停止sqlexec()的执行*/
Sqldisconnct(gnconnhandlc)
/*断开与sql数据源的连接*/
Brow
/*浏览返回的结果集*/
Endif
数据库升迁
利用VFP的数据库升迁向导,可以实现将本地数据库转换为远程数据库的功能。借助这一功能,我们可以很方便地将使用VFP建立的数据库、表和视图等从本地系统迁移到另一个远程服务器上。虽然在VFP中,该方法只限于对SQL Server和Oracle Server的访问,但通过使用SQL Pass Through函数在服务器上创建远程表,然后再用VFP建立远程视图访问这些服务器上的表,我们就可以为任何远程ODBC数据源建立客户/服务器模式的应用程序。
有了这一功能,可以极大地方便客户/服务器应用程序的开发工作。用户可先在单机上开发应用程序,待基本功能模块设计调试成功后,再运用数据库升迁的方法将本地数据库、表转换到远程服务器上,并把本地视图升迁为远程视图,继而将开发调试工作的重点转移到客户机与服务器间的数据通信以及数据库服务器的管理等方面。