摘要
在实际应用中经常要求客户机/服务器体系结构中各工作站的时钟与服务器的时钟保持同步本文基于SYBASE数据库Powerbuilder开发工具说明了一种解决方法
一前言
PowerBuilder通过数据窗口对象可方便直接地对数据库进行操作故已成为当前开发Client/Server模式应用的首选开发工具在开发医院信息管理系统时我们采用了PowerBuilder 作为前台开发工具Sybase作为后台数据库
医院信息管理系统中有很多模块都要求工作站的时间与服务器保持同步如门诊收费系统要求能均匀地向各司药窗口分派处方住院药房摆药要根据病房发送医嘱的时间顺序进行等为解决此问题我们编写了相应的程序主要思路是采用动态游标获取服务器时间 WIN的API函数设置本机时间具体实现方法如下
二实现方法
连接数据库
PowerBuilder支持多种数据库管理系统(DBMS)如SybaseOracleInformixMicrosoft SQL Server等根据不同的数据库类型采用专用接口或ODBC连接数据库建立接口配置文件(DB Profile)
创建应用对象在应用对象事件中编写脚本
>应用对象open事件的脚本如下
startupfile = settimeini
sqlcaDBMS= ProfileString (startupfile database dbms )
sqlcadatabase=ProfileString(startupfiledatabasedatabase)
sqlcauserid=ProfileString(startupfiledatabaseuserid)
sqlcadbpass=ProfileString(startupfiledatabasedbpass )
sqlcalogid=ProfileString(startupfile database logid)
sqlcalogpass=ProfileString (startupfile databaseLogPassWord )
sqlcaservername=ProfileString(startupfiledatabaseervername)
sqlcadbparm= ProfileString (startupfile database dbparm )
connect;
f_setlocaltime() //调用自定义函数完成设置本地工作站时间
>应用对象Close事件中的脚本如下
DISCONNECT Using SQLCA;
定义WIN的API函数为外部函数
在Script画笔工作区中选择Declare > Global External Functions定义WIN的API函数为外部函数定义如下
FUNCTION LONG SetLocalTime (ref systemtime systimeptr) LIBRARY Kerneldll
定义存取时间参数的结构
单击PainterBar或PowerPanel中的Structure Painter按钮定义一个名为systemtime的结构组成结构的变量与对应的数据类型如下
integer wyear
integer wmonth
integer wdayofweek
integer wday
integer whour
integer wminute
integer wsecond
integer wmillisecond
创建用户自定义函数来完成设置工作站时间
创建一个名为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; //通过数据库获取服务器时间
close cur_time;
s_systimewmonth=month(date(nettime))
s_systimewday=day(date(nettime))
s_systimewyear=year(date(nettime))
s_systimewhour=hour(time(nettime))
s_systimewminute=minute(time(nettime))
s_systimewsecond=second(time(nettime))
s_systimewmillisecond=
SetLocalTime(s_systime) //调用WIN API函数设置工作站时间
创建可执行应用程序
在PowerBar或PowerPanel中单击Project按钮打开Project PainterSelect Project对话框出现单击New创建一个新的工程对象输入可执行程序名(如settimeexe)单击OK然后单击build即可创建可执行文件
将可执行程序安装至各工作站
将生成的可执行程序(如settimeexe)放入各工作站的Windows的启动菜单即可在每次启动Windows时工作站自动根据服务器时间校正本机时间
三结束语
上述方法是创建一个独立的可执行文件来实现工作站与服务器的时间同步编程时也可在应用程序的open事件或程序登录对应事件中调用上述f_settime函数以实现工作站的时间与服务器同步此方法已在开发医院信息管理系统中加以应用取得了很好的效果