明辉手游网中心:是一个免费提供流行视频软件教程、在线学习分享的学习平台!

用VisualFoxpro开发主从结构数据库系统

[摘要]孙向海 方旭升  目前流行的数据库开发平台很多,如DELPHI、VB、PB等,有关用它们如何开发基于C/S 模式的应用系统的书籍、文章也较多,但是却很少见到关于用Visual Foxpro (VFP...
孙向海 方旭升

  目前流行的数据库开发平台很多,如DELPHI、VB、PB等,有关用它们如何开发基于C/S 模式的应用系统的书籍、文章也较多,但是却很少见到关于用Visual Foxpro (VFP)开发C/S 结构的文章,即使有也只是泛泛而谈,讲的不具体,读者看了之后,仍然不知道如何去开发。还有好多人对VFP的认识还是停留在FOXBASE和FOXPRO的基础上,经常有人问,"用VFP能开发C/S结构的系统吗?",于是我一次又一次的充当了VFP的解说员。其实用VFP开发基于C/S 模式的系统是可以的,而且原来所熟悉的各种技术在开发主从结构时仍然完全适用,而我国有许多MIS系统开发人员都比较熟悉FOX系列的软件,因此在此基础上掌握VFP开发C/S结构的MIS系统,对于这些人来讲加快了开发进程,延续了知识的生命周期。因此我想把自己用VFP开发C/S 系统中的方法和经验写出来,好让那些对VFP不太了解或者没有用它开发过C/S 结构的读者对VFP有重新的认识。

  一. 建立数据库、建立ODBC 数据源

  主从结构最大的优点就是将工作合理分配于服务器与工作站以便让它们同时发挥所长,主从结构包括三个重要的部分-网络操作系统、数据库服务器及前端应用程序。我们可以采用Visual FoxPro+SQL Server 7.0 + Windows NT Server 的组合方式。我们首先需在SQL Server 上建立所需的数据库如:Ningguo ,并创建所需要的表,如maintable等。在SQL Server 上的数据库建完之后,我们可以为刚才创建的数据库创建一个用户如:newguest,这样我们就可以进行下一步操作。

  在前台的工作站上,操作系统采用Window 98/95 即可,在工作站建立连接到SQL Server的ODBC 数据来源(Data Source)。 我们新建了一个数据源first,连接到 SQL Server 上的Ningguo 数据库。

  二.建立和数据库相连的连接

  下面我们就进入与Visual Foxpro 相关的部分。在以 Visual Foxpro 所开发的主从结构中,远程视图(Remote View)扮演着关键性的角色。远程视图使得程序设计师能够将现有的技术直接应用于主从结构系统的开发上,而无须增加太多的负担。当我们想要在 Visual Foxpro 中存取其他数据库系统的数据纪录时,便必须借助于远程视图。在建立一个远程视图之前,必须在数据库中建立一个连接(Connection),它记录了登入SQL Server 的相关信息并定义连接通道的一些设定信息。在数据库设计器中新建一个连接,  分别在数据源、用户标识、密码、数据库所对应的输入框中输入如前文所述的名称,然后验证连接即可,当然也可以用连接串连接,如:dsn=first;uid=newguest;pwd=123;database=ningguo,或许在某些情况下,我们在应用系统执行期间以程序控制方式更改连接的相关设定,我们就可以用DBSETPROP()函数,比如我们要更改名为connect1 的连接串,可用如下的命令叙述:

  OPEN DATABASE test

  dbsetprop("connect1","connection","connectstring",;

  "dsn=first;uid=newguest;pwd=123;database=ningguo")

  三.建立远程视图

  在连接成功的情况下,我们就可以建立远程视图。我们既可以在数据库设计器中用视图向导建立视图,也可以用命令来建立视图。下面以向导为例来进行说明,在向导中我们可以使用数据源或者连接来创建视图,一般而言,让远程视图透过已定义的连接来连接到所需的数据来源较好,因为连接本身就包含较完整的连接定义信息,而用数据源则每次使用远程视图时便会出现 SQL Server Login 对话框,显然这是用户所不希望看到的。接着选择视图所对应的SQL Server 中的来源表即可。

  我们就视图所需要的字段、联接条件、筛选条件、排序、分组、更新条件应分别进行设置,以满足我们的需要,要提到的是前后端的数据类型对应的问题,Visual Foxpro 中的数据类型与 SQL Server 中的数据类型不尽相同,不过前后端的数据类型有一固定的关系。比如,某一个字段在SQL Server 上的数据类型是 money ,而在远程视图中此字段的数据类型将是货币值类型,又例如,某一个字段在SQL Server 上的数据类型是 text ,而在远程视图之中此字段的数据类型将是备注型,我们往往需要手动去调节对应的字段类型,例如,所有的 SQL Server 上的datetime 类型到了远程视图中都要变成 date 型。我们可以在相应的页面来确定联接关系、指定过滤条件、指定排序依据,特别要注意的是在"更新页面"栏,如果我们想要建立一个可更新的视图,必须选中"发送SQL更新"栏,这样针对视图所作的任何变动,会主动反映到后端的SQL Server 中去,你就可以直接使用所熟悉的Visual Foxpro 来更新后端数据。另外,我们指定键值栏、可更新字段、更新冲突的检查方式以及后端的 SQL Server 如何执行更新操作,视图的建立就完成了。

  远程视图一旦建立完成,我们就可以利用它来显示与更新数据。由于远程视图在外观与使用上皆与表大同小异,因此即使其来源数据实际上是位于SQL Server 中,我们无须有任何顾虑,过去替 Visual Foxpro 本身的数据建立平行输出/入界面、报表及标签的方法完全适用于远程视图。我们可以在表单设计工具、报表设计工具与标签设计工具中,将远程视图加至表单、报表或标签的数据环境组件中,并快速建立出数据源为远程视图或其某字段的控制项。但是在实际应用中,我们往往会遇到这样的情况,如符合条件的数据纪录很多,或者经常要使用离线方式的系统,我们除了简单的使用远程视图之外,还必须灵活的运用"有条件的远程视图"和离线式视图(Off-line View),尽量减少服务器端的数据下载量,减轻网络的负荷,一些不常更新的数据甚至可以以DBF的形式直接放置在客户端,提高整个系统的运行效率。

  四.SQL Pass-Through (SPT) 技术的运用

  要使一个主从结构系统趋于完善,除了用远程视图来构筑主从结构的主体,还必须辅以SQL Pass-Through 技术。所谓 SQL Pass-Through ,意指我们可以将任何符合 SQL Server 语法的命令叙述从前端透过连接通道送至后端的 SQL Server 来执行,与SQL Server 进行其他直接有效的沟通。利用 SQL Pass-Through 我们还可以直接去执行储存在SQL Server 上的储存式程序(Stored Procedure),和系统储存式程序(System Stored Procedure),比方说,我们可以从前端去执行SQL Server的系统储存式程序sp_addlogin ,来要求加入一个使用者帐号。一般而言,SPT函数的使用流程如下所示:

  (1) 首先使用SQLCONNECT()或SQLSTRINGCONNECT() 函数来连接值所需的数据源。

  (2) 成功的连接到SQL Server 之后,即可以透过连接通道进行所需的各项处理。比如,我

  们可以使用SQLEXEC()函数将SQL命令送至SQL Server执行。

  (3) 完成所有的操作后,应用SQLDISCONNECT()函数切断与数据源的连接。下面我们就

  举一个典型的运用SQL Pass-Through的例子:

  SET TALK OFF

  CLEAR ALL

  CLOSE ALL

  SQLSETPROP(0,"DispLogin",3) &&登录失败时不显示ODBC登录对话框

  nConnectHandle=SQLSTRINGCONNECT("dsn=first;uid=newguest;pwd=123;database=ningguo")

  IF nConnectHandle<0

  MessageBox("无法与数据库连接",0+48,"异常情况")

  ELSE

  MessageBox("连接成功",0+48,"提示信息")

  SQLEXEC(nConnectHandle,"Select * from maintable")

  Browse

  Use in sqlresult

  ………..&&其他操作

  SQLDISCONNECT(nConnectHandle) &&切断连接

  ENDIF

  通过这样简单有效的代码,我们就能对数据库进行有效的操作,以确保数据的完整性和安全性。在此列出所有的SQL Pass-Through 函数供大家参考:

  (1) 连接建立与切断 SQLCONNECT() SQLSTRINGCONNECT() SQLDISCONNECT()

  (2) SQL命令叙述的执行与控制 SQLCANCEL() SQLEXEC() SQLMORERESULTS() SQLPREPARE() SQLCOMMIT() SQLROLLBACK()

  (3) 数据来源信息 SQLCOLUMNS() SQLTABLES()

  (4) 存取连接通道的属性 SQLGETPROP() SQLSETPROP()

  在用SQL Pass-Through时,程序设计师能够拥有较高的主导权与控制权,因此若能够将远程视图和SQL Pass-Through 技术紧密的结合起来,互补有无,我们的主从系统就可以无所不能了。

  五.结束语

  可以说,Visual Foxpro 是一个相当不错的开发基于C/S结构的数据库应用系统的前端软件,在Internet 广为流传的今天,最新一代的系统结构早就已发展至N-tier 结构,亦即我们所说的多阶层结构。N-tier 结构其实是从主从结构为基础所衍生而来的,我们甚至可以说主从结构就是2-tier 结构。因此,只有彻底学会主从结构,并了解Visual Foxpro 在主从结构中所扮演的角色,才能在将来的竞争中立于不败之地。

  参考文献:

  (1)Visual Foxpro6.x 中文版程序设计 -应用实务篇 章立民 中国铁道出版社 1999.10

  (2)中文Visual Foxpro6.0 高级编程 合力工作室 清华大学出版社 1999.7