过IProvider接口获得数据和更新数据集。
3) ClientDataSet组件。 客户数据集组件,是从TdataSet继承下来的组件, 用来访问服务器端的IProvider接口,位于客户端。
4) 连接组件。 包括DCOMConnection、SocketConnection、CORBAConnection 等连接组件,分别支持DCOM、TCP/IP、CORBA协议,为客户程序定位应用程序服务器位置和提供IProvider接口。在结构上,客户程序通过标准数据控制组件与用户交互,通过应用服务器提供的IProvider接口获得或更新数据。直接访问数据库服务器的是应用服务器,其关键部件是远程数据模块,在远程数据模块上,数据集组件通过数据引擎与数据库服务器连接访问数据库,DataSetProvider组件输出IProvider接口,通过DataSet属性与数据集组件相连,这样客户端通过IProvider接口就可以访问数据。
客户层 中间层数据层
Data Module Remote Data Module
Midas.dll
3. 系统
考虑到系统数据库与研招系统的兼容性,系统采用VFP 数据库,也可方便升级为SQLserver 数据库。系统采用"瘦客户端"的理念,客户端只进行数据的回传
工作,数据处理交由服务器完成,大大减少了网络数据流量[4]。
3.1 系统结构图
服务器安装应用服务器程序和存放数据库,应用服务器程序连接数据库,并为客户端提供远程调用的接口,计算机1,2,3,4...是客户端,用来录入成绩和分布式查询等,它把更新的数据提交给服务器,向服务器提出查询请求等。
3.2 系统实现
3.2.1 创建应用程序服务器
服务器端应用程序主要完成数据导入、系统备份、恢复、导出、统计、查询、打印等功能。
1)用VFP 创建一个
vfp 数据库,此数据库中包含两个表:成绩表(ssbk.dbf)、用户表(user.dbf)。
根据需要设计相关的字段,及设置字段的长度。将其放在应用程序文件夹下的db 文件夹中。
2)创建一个新的应用程序,作为应用服务器。在项目中添加一个远程数据模块(Remote DataModule)(如图3),设置它的CoClassname(数据模块名称)等相关属性。
3)在远程数据模块中添加一个ADOConnection 组件和ADOQuery 组件,设置ADOConnection的ConnectionString 属性,根据向导来设置,也可以在程序中进行设置,设置路径为相对路径,以免应用程序位置改变后找不到数据库;设置ADOConnection 的LoginPrompt 为"False",以便在连接数据库时不弹出输入用户名和密码的对话框;把ADOQuery 组件的connection 属性为ADOConnection 的名字;为了提高查询效率,采用参数查询,在ADOQuery 组件的SQL 属性中添加
sql 语句"select * from ssbk where ksbh=:s_ksbh","s_ksbh"为查询参数,可在Parameters 属性中查看设定的参数。
4)在远程数据模块中添加一个DataSetProvider 组件,其DataSet 属性设为ADOQuery 的名字。
5)根据需要添加相关的窗体和组件,并为应用程 序服务器和相关的组件编写事件代码,实现业务规则。本系统采用SocketConnection 链接,故在服务器端需运行SckSrvr.exe,为此,设计在登录成功后运行及关闭应用程序时关闭SckSrvr.exe。
在登录事件中加入如下代码:
ShellExecute(handle,nil,pchar('scktsrvr.exe'),nil,nil,SW_SHOWNORMAL);
在应用程序关闭时:
procedure Tmainform.exitmClick(Sender: TObject);
var HWndscktsrv:HWnd;
begin
HWndscktsrv:= FindWindow(nil,'Borland Socket Server');
if HWndscktsrv<>0 then
SendMessage(HWndscktsrv,WM_CLOSE,0,0);
application.Terminate;
end;
6)编译、运行该应用程序,即可实现应用服务器
注册。
3.2.2 创建客户端应用程序
客户端应用程序主要完成成绩录入、统计、查询等功能。
1) 创建一个新的应用程序,作为客户端应用程