运用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 著,微软(中国)有限公司 译,北京希望电脑公司
出品