API函數之四_客戶機服務器體系

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

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章