C/S体系中设置工作站与服务器时钟同步

来源:不详 责任编辑:栏目编辑 发表时间:2013-07-01 08:27 点击:
摘要: 在实际应用中,经常要求客户机/服务器体系结构中各工作站的时钟与服务器的时钟保持同步;本文基于SYBASE数据库、Powerbuilder开发工具说明了一种解决方法。 

一、前言 

PowerBuilder通过数据窗口对象,可方便、直接地对数据库进行操作,故已成为当前开发Client/Server模式应用的首选开发工具。在开发医院信息管理系统时,我们采用了PowerBuilder 作为前台开发工具,Sybase作为后台数据库。 

医院信息管理系统中,有很多模块都要求工作站的时间与服务器保持同步,如:门诊收费系统要求能均匀地向各司药窗口分派处方、住院药房摆药要根据病房发送医嘱的时间顺序进行等。为解决此问题,我们编写了相应的程序,主要思路是:采用动态游标获取服务器时间, WIN32的API函数设置本机时间,具体实现方法如下: 

二、实现方法: 

1、 连接数据库 

PowerBuilder支持多种数据库管理系统(DBMS),如Sybase、Oracle、Informix、Microsoft SQL Server等;根据不同的数据库类型,采用专用接口或ODBC连接数据库,建立接口配置文件(DB Profile)。 

2、 创建应用对象,在应用对象事件中编写脚本 

1>、应用对象open事件的脚本如下: 


startupfile = "settime.ini"
sqlca.DBMS= ProfileString (startupfile, "database", "dbms", "")
sqlca.database=ProfileString(startupfile,"database","database","")
sqlca.userid=ProfileString(startupfile,"database","userid","")
sqlca.dbpass=ProfileString(startupfile,"database","dbpass", "")
sqlca.logid=ProfileString(startupfile, "database", "logid","")
sqlca.logpass=ProfileString (startupfile, "database","LogPassWord", "")
sqlca.servername=ProfileString(startupfile,"database",ervername","")
sqlca.dbparm= ProfileString (startupfile, "database", "dbparm", "")
connect;
f_setlocaltime() //调用自定义函数完成设置本地工作站时间
 

2>、应用对象Close事件中的脚本如下: 

DISCONNECT Using SQLCA; 

3、 定义WIN32的API函数为外部函数 

在Script画笔工作区中,选择Declare > Global External Functions...,定义WIN32的API函数为外部函数,定义如下: 


FUNCTION LONG SetLocalTime (ref systemtime systimeptr) LIBRARY "Kernel32.dll"
 

4、 定义存取时间参数的结构 

单击PainterBar或PowerPanel中的Structure Painter按钮,定义一个名为:systemtime的结构,组成结构的变量与对应的数据类型如下: 


integer wyear
integer wmonth
integer wdayofweek
integer wday
integer whour
integer wminute
integer wsecond
integer wmillisecond
 

5、创建用户自定义函数来完成设置工作站时间 

创建一个名为f_settime的自定义函数,脚本如下: 


systemtime s_systime //声明前面已定义结构类型的变量
datetime nettime
declare cur_time dynamic cursor for sqlsa; //声明动态游标
prepare sqlsa from "select getdate()";
open dynamic cur_time ;
fetch cur_time into :nettime; //通过数据库获取服务器时间
lose cur_time;
s_systime.wmonth=month(date(nettime))
s_systime.wday=day(date(nettime))
s_systime.wyear=year(date(nettime))
s_systime.whour=hour(time(nettime))
s_systime.wminute=minute(time(nettime))
s_systime.wsecond=second(time(nettime))
s_systime.wmillisecond=30
SetLocalTime(s_systime) //调用WIN32 API函数,设置工作站时间。
 

6、创建可执行应用程序 

在PowerBar或PowerPanel中单击Project按钮打开Project Painter。Select Project对话框出现,单击New创建一个新的工程对象,输入可执行程序名(如:settime.exe),单击OK。然后单击build,即可创建可执行文件。 

7、将可执行程序安装至各工作站 

将生成的可执行程序(如:settime.exe)放入各工作站的Windows的启动菜单,即可在每次启动Windows时,工作站自动根据服务器时间校正本机时间。 

三、结束语 

上述方法是创建一个
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • SQL注入攻击及其防范检测技术研究
    • Sql-Server应用程序的高级Sql注入
    • 学生信息管理系统数据库原理课程设计报告
    • sql常见面试题
    • SQL SERVER 2005性能之跟踪
    • 经验总结:登录和优化IBM DB2的执行速度
    • db2管理工具小结
    • MySQL服务器的启动与停止
    • 浅谈数据库的接口技术
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1