运用VFP和SQL SERVER建立C/S学籍管理系统的研究与实践

作者:方兵、董建钢、楼润玉

 

[摘要]本文论述了如何运用VFP和SQL SERVER建立电大学籍管理系统管理,与先进的SQL SERVER数据库相结合,用VFP做C/S系统的客户端编写网络版的管理软件,使得学籍管理更高效、科学。

 

[关键词]学籍管理,Visual FoxPro,SQL SERVER,数据升迁,ODBC数据源,远程视图

 

随着杭州电大近几年来招生人数的大幅度增长,学籍管理的工作量也在成倍增长,杭州电大原有的单机版程序已经远远满足不了实际的工作需要。而无论是中央电大的教务管理软件CRTVU还是省电大的教务管理ZJTVU在功能上侧重于中央电大及省电大的管理,为下级电大的实际管理需要考虑较少。在兼容中央电大CRTVU和省电大ZJTVU数据的基础上,兼顾杭州电大原有的大量宝贵数据,编写杭州电大自己网络版学籍管理程序迫在眉睫。

 

一、电大学籍管理软件的发展:

80年代末,最流行的数据库系统是dBaseIII和FoxBASE,FoxBASE是dBase的克隆系统,dBASEIII能做的工作,FoxBASE会做得更好更快,更重要的是它还能与dBASEIII兼容。当时无论是省电大还是杭州电大的学籍管理工作者都采用FOXBASE来编写学籍管理软件。后来随着FoxPro 2.5、Visual FoxPro 3.0、Visual FoxPro 5.0、Visual FoxPro 6.0软件的发布,杭州电大学籍管理科于1998年开始用Visual FoxPro技术重新编写了《毕业管理系统》、《成绩分析系统》、《成人、普专生管理系统》、《历届生管理系统》、《注册视听生管理系统》、《专升本管理系统》、《远程专科管理系统》、《普专毕业证书打印系统》、《成人毕业证书打印系统》及《现代远程教育录取系统》等一系列学籍软件。其中《毕业管理系统》、《普专毕业证书打印》、《成人毕业证书打印》、《现代远程教育录取系统》被省电大采用,并在全省电大推广使用至今。

当时由于电大的学生数量不多,以上的单机版软件已能足以满足电大学籍管理的需要。近几年来电大发展十分迅速,单机版的软件已经不能适应学籍管理的需要了。

 

单机版学籍管理软件的缺陷:

1、不支持多用户;

2、不能远程操作;

3、数据安全性不能得到保证;

4、数据管理效率不高;

 

编写CLIENT(客户)/SERVER(服务器)系统是现代化学籍管理的趋势

C/S属于2层系统,适合于中小型应用系统。我们曾经考虑用VFP本身来做C/S系统,但是使用效果不是很理想,因为VFP的数据管理功能不是很强,比如数据共享的加锁解锁都需要程序来操作,在程序设计上有一定的难度。目前比较理想的方法是VFP/SQL SERVER系统。

 

采用VFP和SQL SERVER来做学籍管理的C/S系统主要有以下几个方面的考虑:

1、数据的兼容性需要。

电大学籍管理的数据几乎全是*.dbf文件,用VFP和SQL SERVER来做学籍管理的C/S系统可以直接兼容现有的全部宝贵数据,节省大量的人力,Visual FoxPro可以胜任这项要求。

2、Visual FoxPro有着其它语言和开发工具不可比拟的灵活性。

随着 Visual FoxPro 的发布,Microsoft 已经把 FoxPro 定位在客户/服务器结构的前端(客户端)。Visual FoxPro 包含了大量访问后端信息的途径,加上相当快的本地数据库引擎和数据字典,它提供了真正的客户/服务器开发所需的最好选择。

3、SQL SERVER是微软功能最强大的数据库系统。

SQL SERVER是微软发布的RDBMS(关系数据库管理系统),ORACLE,INFOMIX,POWERBUILD,也都是类似的系统。他们就相当于仓库的管理系统,但功能又不仅仅是数据管理。微软的数据库产品从功能和规模由小到大排列依次是:ACCESS,VFP,SQL SERVER。对于稍微大一点的系统,SQL SERVER则是需要有专人管理的,这就是DBA(数据库管理员:DATABASEADMINISTRATOR)的位置。

SQL SERVER是一套功能强大的软件系统,可以安装在专门的NT数据SERVER上,也有个人版可以安装在WIN95/98上,主要是为了程序员方便测试。它的功能主要有这么几块:数据库的管理和维护,用户/安全管理,数据的发布/转换。

 

二、用VFP/SQL SERVER做C/S系统的几个步骤

1、将VFP的数据升迁到SQL SERVER中

要利用现有的数据就必须要将原有的VFP数据进行升迁。VFP的数据库,可以直接用VFP自带的升迁向导转到SQL SERVER上,但必须把所有的表都放到数据库里,自由表不能直接升迁,而实际上升迁上去的又只是表,数据库本身不能转到SQL SERVER里。要把VFP数据升迁到SQL SERVER上,必须先在SQL SERVER里建立相应的数据库(注意SQL SERVER里的数据库名不要与VFP本地数据库名相同)。SQL SERVER的管理是通过ENTERPRISEMANAGER(EM)来进行的。通过它建立数据库,每个数据库里可以包含数据表,用户/用户群,视图,存储过程等等。改用SQL SERVER后,原来的VFP程序是需要进行修改,而且有的时候修改还是比较大,但笔者感觉用C/S写出来的程序反而比单机版更精简一些

2、设置ODBC数据源和删除ODBC数据源

VFP和SQL SERVER的连接是通过ODBC或者OLEDB(ADO)来进行的。一般情况下可以打开控制面板的ODBC数据源进行设置。但我们希望能在程序里动态设置数据源,因为:、可以不用去为每个用户的机器手动设置,、为了数据的安全性,使用完后,把ODBC数据源删掉。

所以本文中只讨论用程序的方法设置ODBC数据源和删除ODBC数据源,利用控制面板的ODBC数据源进行设置的方法请参照VFP的相关资料。

*用 API 函数来设置和删除 ODBC 数据源。

*函数名字是 SQLConfigDataSource,其中第二项参数是数字(1-增加 2-修改 3-删除)

DECLARE INTEGER SQLConfigDataSource IN odbccp32 INTEGER, INTEGER, STRING, STRING

lnWindowHandle=0

lcODBCDriver='SQL Server' && DRIVER 类型

lcODBCName='sjy'   && 数据源名字

lcODBCDesc='hzddsjy' && 数据源描述

lcODBCServer='HZDD'     && SQL SERVER名字

lcODBCDatabase='sjy'   && 要连接SQL SERVER服务器的数据库名字

** 先试图修改已有的 ODBC,如果不存在,返回 0。

lreturn=SQLConfigDataSource(lnWindowHandle, 2, lcODBCDriver, ;

'DSN=' + lcODBCName + CHR(0) ;

+ 'Description=' + lcODBCDesc + CHR(0) ;

+ 'Server=' + lcODBCServer + CHR(0) ;

+ 'Database=' + lcODBCDatabase + CHR(0))

IF lreturn=0 && 不存在

   ** 添加新的 ODBC

   lreturn=SQLConfigDataSource(lnWindowHandle, 1, lcODBCDriver, ;

   'DSN=' + lcODBCName + CHR(0) ;

   + 'Description=' + lcODBCDesc + CHR(0) ;

   + 'Server=' + lcODBCServer + CHR(0) ;

   + 'Database=' + lcODBCDatabase + CHR(0))

   IF lreturn=0 &&失败

      MessageBox('添加ODBC数据源失败',16,'BUFFER')

   ENDIF

ENDIF

 

**删除ODBC数据源

**用完后,可以在表单DESTROY事件里删除ODBC。 如果不想重复设置参数,可以把这些参数加到表单作为属性。

DECLARE INTEGER SQLConfigDataSource IN odbccp32 INTEGER, INTEGER, STRING, STRING

lnWindowHandle=0

lcODBCDriver='SQL Server' && DRIVER 类型

lcODBCName='sjy'   && 数据源名字

lcODBCDesc='hzddsjy'   && 数据源描述

lcODBCServer='HZDD'    && SQL SERVER名字

lcODBCDatabase='sjy'   && 要连接SQL SERVER服务器的数据库名字

**先修改,或者其是否存在

lreturn=SQLConfigDataSource(lnWindowHandle, ;

   2, lcODBCDriver, ;

   'DSN=' + lcODBCName + CHR(0) ;

   + 'Description=' + lcODBCDesc + CHR(0) ;

   + 'Server=' + lcODBCServer + CHR(0) ;

   + 'Database=' + lcODBCDatabase + CHR(0))

IF lreturn=1 &&ODBC存在,删除它

      lreturn=SQLConfigDataSource(lnWindowHandle, ;

      3, lcODBCDriver, ;

      'DSN=' + lcODBCName + CHR(0) ;

      + 'Description=' + lcODBCDesc + CHR(0) ;

      + 'Server=' + lcODBCServer + CHR(0) ;

      + 'Database=' + lcODBCDatabase + CHR(0))

      IF lreturn=0

         MessageBox('删除ODBC源失败,16,'BUFFER')

      ENDIF

ENDIF

CLEAR DLLS  && 清除DLL

 

3、从VFP连接到SQL SERVER

VFP连接到SQL SERVER也有两种方法:程序的方法和在本地数据库中手工建立,本文仅讨论以程序的方法建立VFP到SQL SERVER的连接。

Open database hzddcj exclusive

*SQL连接的用户名与密码

MY_USERID="sjy"    &&SQL的用户名

MY_PASSWORD="sjy123"   && SQL的用户名

MY_DATASOURCE="sjy"    && 要连接SQL SERVER服务器的数据库名字

********创建远程数据连接

handle=sqlconnect(my_datasource,my_userid,my_password)

If handle<0

 Messagebox("未连接到数据服务器,退出!    ",0+48+0,"警告")

 Close all data

 Retu

Endif

sqldisconnect(handle)

Set database to "hzddcj"

**********建立“远程连接”

Create connection "远程数据" datasource &my_datasource userid &my_userid password &my_password

 

4、远程视图的建立和删除

远程视图的建立和删除也有两种方法:在本地数据库中手工建立和程序的方法,本文仅讨论以程序的方法建立和删除远程视图。

*建立远程视图

****此处本地数据库名以hzddcj为例:

Open database hzddcj exclusive

***建立远程视图,视图名为myview1

***假设SQL上的数据库中有ajbyc表,库结构为(学号,C,9;姓名,C,10;性别,C,2;专业名称,C,30):

Create sql view myview1 ;

 remote connection 远程数据  AS ;

 SELECT *;

 FROM ajbyc ajbyc;

 WHERE ajbyc.学号 = ?xh;

 order by ajbyc.学号

 

DBSetProp("myview1","view","tables",'ajbyc')

 

***删除远程视图

Close all database

Open database hzddcj exclusive &&打开本地数据库hzddcj

Set database to hzddcj

Myviewname=" myview1"

Delete view &myviewname

Pack database

Wait clear

 

通过以上四个步骤已经在VFP中用程序的方法建立了与SQL SERVER的连接,现在我们可以利用远程视图来编写学籍管理的C/S程序了。

 

三、VFP和SQL SERVER建立C/S学籍管理系统的优势

目前杭州电大学籍科已经用VFP和SQL SERVER建立C/S学籍管理的部分系统,并投入使用。在今年的毕业审核、毕业证书办理中发挥了巨大作用。在使用过程中,C/S的学籍管理系统显示出单机版不能比拟的优势:

1、支持多用户:

多个用户可以同时操作C/S学籍管理系统,解决多用户同时成绩录入、毕业审核等一系列单机版程序不能解决的问题。

2、支持远程操作:

可以远程操作C/S学籍管理系统,不仅支持多个不同科室通过校园网操作,理论上也支持各县电大通过宽带网操作。

3、高效的数据管理:

数据全部在服务器上,提高了数据管理的效率,不需要象单机版一样将数据进行传递。

4、数据安全性高:

SQL SERVER的数据安全性比较高,可以对用户权限进行限制。

5、系统简单灵活易维护;

VFP和SQL SERVER建立C/S学籍管理系统程序简单,容易维护。

 

参考文献:

1、《Visual FoxPro 6.0中文版程序员指》,Microsoft  Corporation   著,微软(中国)有限公司   译,京希望电脑公司  出品,新出音管[1998]164号,ISBN 7-980021-24-X/TP.17

2、《Visual FoxPro 6.0中文版语言参考手册》,Microsoft  Corporation   著,微软(中国)有限公司   译,北京希望电脑公司  出品