本文发表于期刊《微型电脑应用》2001年12期。
如何实现c/s模式下客户机与服务器采用统一的时间
马根峰 李刚 左奇伟 王平
(重庆邮电学院 重庆 400065)
摘要 存储过程是DBMS中的重要技术。合理地使用存储过程,不仅会减轻服务器的负担,而且还可以轻松解决一些问题。本文一开始介绍了客户机与服务器时间不一致给某些系统所带来的不良后果,继而以实例讲解了以DELPHI或VB作为前端开发工具、MS SQL Server作为后台数据库系统使用存储过程的解决方案。
关键词 Client /Server;存储过程;VB;DELPHI;Transact_SQL
how to realize dopting the uniform time with the server in the application of Client/Server for all the client
MA Gen-feng Li Gang Zuo Qi-wei Wan Ping
Chongqing University of Posts and Telecommunacations,Chongqing(400065)
ABSTRACT: Stored procdure is the important technique in DBMS (Data Base Management System). Using the stored procedure reasonably. can not only reduce the burden of the server but also resolve some question
easily.
Firstly the article introduces bad aftereffect of the uniform clock between the server and all the client . Then illustrate resolvent using stored procedure with VB or DELPHI as the client developing tools
and MS SQL Server as the server .
KEY WORDS: Client /Server;Stored procedure;VB;DELPHI;Transact_SQL
一、问题的提出
Client/Server结构的关系数据库系统因为具有高性能、高效率、开放、易扩充、可伸缩等优越的特性,所以得到了广泛的应用。
在Client/Server结构的关系数据库应用系统中,不乏这样的应用:要求用户在客户端中插入、修改数据时,要在数据库的相应表中记录这些数据插入、修改的时间以供统计分析使用。为了保证今后按时间进行的统计分析的准确性,各个客户端向数据库服务器DBMS提供的必须是统一的时间。
比如,笔者正在从事开发的<<重庆邮政物流配送商品信息与仓储管理系统的开发与研究>>系统中,为了对商品的销售量做出正确的预测,必须保证商品的销售记录中的销售时间是正确的,否则将会造成预测值出现错误,因而影响到生成的商品采购单的准确性。
二、解决方案
我们可以在数据库服务器的DBMS中建立这样的一个存储过程,它的功能是读取数据库服务器的系统时间,并作为一个输出参数输出。这样,每当客户端启动时,客户端就可以调用这个存储过程来取得数据库服务器的系统时间,以数据库服务器的系统时间来设置客户机的系统时间,从而使得各个客户机与数据库服务器采用统一的系统时间。只要将数据库服务器的时间设置准确,就可以保证客户端在保存数据时使用统一的时间。
下面,我们就选用MS SQL Server来创建一个存储过程,在客户端来调用这个存储过程并设置客户机的系统时间。
三、Transact_SQL设计与程序设计
1、用Transact_SQL来设计存储过程
建立一个存储过程SP_GETDATE,功能是读取数据库服务器的时间并作为输出参数输出,其Transact_SQL语句如下:
CREATE PROCEDURE SP_GETDATE
@Parm_date DateTime OUTPUT
AS
SELECT @Parm_date=GETDATE()
RETURN
2、 前端用DELPHI实现。
首先,建立一个BDE数据源getdatetime连接到MS SQL Server对应的数据库后,增加一个数据模块DM。
其次,在DM上添加一个Tdatabase控件DB,其AliasName属性为getdatetime,DatabaseName属性为northwind,。
最后,在DM上增加一个TstoredProc控件,其DatabaseName为getdatetime,StoredProcName选择SP_GETDATE;1。
B、 DELPHI代码设计。
编译环境:DELPHI 5。操作系统:Windows 9X中文版
var
DateTime_server:Tdatetime;
VarSysTime:Systemtime;
begin
//读取数据库服务器的时钟
with dm.Sp_ getdate do
begin
Prepare ;
ExecProc;
DateTime_server:=Params[1].AsDateTime; //读取服务器日期
//将日期格式转化成Win32 API的TSystemTime格式
DateTimeToSystemTime(DateTime_server, varSysTime );
end;
//调用API函数来设置客户机的时钟
setsystemtime(varSysTime );
end;
3、前端用 VB实现。
A、 数据环境DataEnvironment设计。
首先,添加一个数据环境设计器DE。
其次,在DE上创建一个CONNECTION对象CN,在其Data Link Properties对话框的Provider属性页选择Microsoft OLE DB provider for SQL Server,在Connection属性页的Server name 中输入或选择数据库服务器名,输入用户口令和密码,选择MS SQL Server中对应的数据库。
最后,在DE中从存储过程sp_getdatetime创建一个Command对象cmd_sp_getdatetime,其Connection属性为CN,Object属性为dbo.sp_getdate。
B、 VB的代码设计。
编译环境:VB6。操作系统:Windows 9X中文版
Dim DateTime_Server As Date
Dim strDateTime As String
‘执行命令DE.cmd_sp_getdate读取数据库服务器的时间
DE. cmd_sp_getdatetime DateTime_Server
StrDateTime=Format(DateTime_Server,”yyyy-mm-dd hh:mm:ss”)
‘设置客户机的时钟
Date=Cdate(Mid(strDateTime,1,10)) ‘取出日期部分并转化成Date类型
Time=Ctime(Mid(strDateTime,12,8)) ‘取出时间部分并转化成Time类型
四、结束语
前面探讨了C/S模式中客户端如何获得服务器的系统时间并设置客户机的系统时间,并给出了存储过程的Transact_SQL语句及前端开发工具DELPHI、VB的实现代码。不难看出,VB的确是一门傻瓜语言,某些场合用户可以不必了解较为底层的知识,就可实现对应的功能。在这里是指对WIN32 API函数的调用,当然VB也可以用调用WIN32 API函数的方法来实现上面的功能。
参考文献:
[1] (美) Stephen Wynkoop · SQL Server 7.0开发指南 · 北京:电子工业出版社,1997.10
[2] 房增华,徐远超 · Delphi 5 数据库编程实战与精通 · 北京:清华大学出版社2000.7
[3] (美) Jeffrey P. McManus · Database Access With Visual Basic 6 · 北京 :机械工业出版社,1999.10
[4] 莫卫东,白鹏,张晓,张福萍 · Visual Basic 6.0 高级编程技巧----ADO数据访问篇·西安:西安交通大学出版社,2000.1
作者简介:
马根峰 硕士 重庆邮电学院自动化学院
李刚 硕士 重庆邮电学院计算机学院
左奇伟 硕士 重庆邮电学院光电学院
王平 博士 教授 重庆邮电学院自动化研究所
|
请发表评论