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; //通過數據庫獲取服務器時間 lose 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函數,以實現工作站的時間與服務器同步。此方法已在開發醫院信息管理系統中加以應用,取得了很好的效果。