您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > PB > 正文
在C/S体系中设置工作站与服务器的时钟同步
[文章信息]
作者:禹艳萍 梁丽燕
时间:2003-02-18
出处:皇家pb
责任编辑:   
[文章导读]
在实际应用中,经常要求客户机/服务器体系结构中各工作站的时钟与服务器的时钟保持同步
advertisement
热点推荐
· Mail Direct提高发邮件效率
· 瑞星个人防火墙安装与使用(多图)
· 真正的Win XP系统启动加速
· ACDSee处理图片三招制胜
· 文件加密亮新招—Easy File
[正文]

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

close 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时,工作站自动根据服务器时间校正本机时间。

  三、结束语

  上述方法是创建一个独立的可执行文件来实现工作站与服务器的时间同步;编程时,也可在应用程序的open事件或程序登录对应事件中调用上述f_settime函数,以实现工作站的时间与服务器同步。此方法已在开发医院信息管理系统中加以应用,取得了很好的效果。

 


·"WAP天极之IT新闻资讯,50万元等你拿"    ·天极WAP之游戏狂图,50万元等你下载


发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容阅读排行榜
  • Mail Direct提高发邮件效率
  • 瑞星个人防火墙安装与使用(多图)
  • 真正的Win XP系统启动加速
  • 机甲文化激起千层浪 《机战》封测
  • 『天下竞技』最新情报
  • 两难 拍摄手机 vs 低端DC
  • 拒绝衰减的图象 DVI液晶导购
  • 1066MHz FSB普及无望 i925XE处境尴尬
  • Advertisement

    天极无线
    待机彩图    >>更多
    多彩动画    >>更多
    美妙和弦    >>更多
    天使在唱歌
    壁虎漫步
    PrettyBoy
    LoveLoveLove
    我是你的小小狗
    单身情歌
    十面埋伏
    祝酒歌
    回心转意
    波斯猫
    太委屈
    S.H.E
    潘玮柏
    M2M
    蔡依林
    阿牛
    林志炫
    陈弈迅
    刀郎
    黑龙
    S.H.E
    陶晶莹
    情人玫瑰坊
    音乐风云
    新片速递
    神秘测试
    都市约会
    ·天极彩信天天精彩
    ·图铃梦工厂下载无限!
    ·找寻童真,卡通专题
    ·夏日激情交友社区!
    ·星座运程,预测人生

    CSEEK搜索