• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

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

发布: 2008-4-21 11:56 | 作者: 禹艳萍 梁丽燕  | 来源: ddvip.com | 查看: 33次 | 进入软件测试论坛讨论

领测软件测试网  摘要

  在实际应用中,经常要求客户机/服务器体系结构中各工作站的时钟与服务器的时钟保持同步;本文基于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函数,以实现工作站的时间与服务器同步。此方法已在开发医院信息管理系统中加以应用,取得了很好的效果。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网