摘要
在實際應用中經常要求客戶機/服務器體系結構中各工作站的時鐘與服務器的時鐘保持同步本文基於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函數以實現工作站的時間與服務器同步此方法已在開發醫院信息管理系統中加以應用取得了很好的效果
From:http://tw.wingwit.com/Article/program/SQL/201311/16287.html