摘要: 在实际应用中,经常要求客户机/服务器体系结构中各工作站的时钟与服务器的时钟保持同步;本文基于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