熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL語言 >> 正文

在C/S體系中設置工作站與服務器的時鐘同步

2013-11-13 12:38:15  來源: SQL語言 

  摘要

  在實際應用中經常要求客戶機/服務器體系結構中各工作站的時鐘與服務器的時鐘保持同步本文基於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
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.