powerbuilder sqlite 在PowerBuilder程序中動態添加ODBC數據源

Christian's Homepage

SQLite ODBC Driver An SQLite ODBC Driver [more ...]SQLite Java Wrapper/JDBC Driver A Java wrapper for theSQLite database engine including a JDBC ...
www.ch-werner.de/ 2014-03-08 
 - 百度快照 - 評價 - 翻譯此頁
 
 
 
在PowerBuilder程序中動態添加ODBC數據源 http://www.docin.com/p-475981646.html
 
 
用代碼配置ODBC  http://bbs.pfan.cn/post-133271.html

    一、 引言
  Powerbuilder是客戶端的開發工具,在實際應用中必須與數據庫管理系統配合起來才能運行應用程序,它與數據庫的連接可以通過ODBC接口實現。在ODBC中配置好數據源後,便可在程序代碼中連接數據庫並對數據庫進行各種操作了。目前的大部分PB參考書都只介紹了ODBC的手工配置方法,而沒有介紹如何在代碼中進行ODBC的配置,這樣當程序最終完成並分發到用戶手中後,還需要爲用戶配置ODBC,顯得既麻煩又不符合專業軟件的要求。那麼,怎樣才能在代碼中實現對ODBC的配置呢?其實,Windows中所有的ODBC數據源在系統註冊表中都有記載,因此只要對註冊表中的項目進行相應的修改即可。與ODBC相關的鍵中,HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBCDRIVER中記錄了所有已安裝的ODBC驅動程序;HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI中記錄了各種ODBC驅動程序的相關信息;HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources記錄了各種數據源的類型;HKEY_CURRENT_USER\Software\ODBC\ODBC.INI則記錄了各種數據源的詳細信息。因此,只要在代碼中對這些鍵進行配置,便可達到手工配置ODBC的目的。

  二、在代碼中配置ODBC的實現
  下面以Powerbuilder內置的Sybase SQL Anywhere 5.0數據庫爲例(其他版本類似)介紹ODBC的代碼配置方法。
  1、找出數據庫驅動程序及相關文件
  首先找到相應的數據庫驅動程序,這些文件可以在註冊表的HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI下相應鍵中找到。如Sybase SQL Anywhere5.0爲dbeng50.EXE,WOD50T.DLL,以及一些其他相關的動態鏈接庫,此例中爲Dbl50t.dll,Wl50ent.dll,Wtr50t.dll,Wodbc.gid,Wtr50t.dll。這些文件必須與最終的可執行程序一起安裝到用戶的計算機上,可以與應用程序放在一起,也可以放在一個特定的目錄下(本例爲Windows的system目錄下)。在調試時可先將這些文件複製到指定的目錄下。
  2、在程序中用代碼配置ODBC
  在應用的open事件中對ODBC配置的代碼如下:
  Ulong ul_num
  Int answer,answer1,answer2,answer3,answer4,answer5,ansapp
  String ls_driver,ls_start,ls_location,apppath,db_path,odbcstr
  //獲取操作系統的system目錄,並保存到ls_location變量
  answer=RegistryGet(“KYEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup”,”SysDir”,RegString!ls_location)
  IF answer = -1 THEN
    Messagebox(‘錯誤’,’應用程序無法獲取Windows的系統目錄,系統統將終止運行!’,Stopsign!)
    RETURN
  END IF
  //判斷Sybase SQL Anywhere5.0的驅動程序是否正確安裝
  ls_driver=ls_location+’\WOD50T.DLL’
  ls_start=ls_location+’\dbeng50.EXE’
  IF NOT (FileExists(ls_driver) AND FileExists(ls_start)) THEN
    Messagebox(‘錯誤’,’系統中沒有安裝SQL Anywhere的驅動程序,系統將終止運行!’,StopSign!)
    RETURN
  END IF
  //設置ODBC\ODBCINST.INI\ODBC DRIVERS
  answer=RegistrySet(‘ HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBCDRIVER’,’Sybase SQL Anywhere 5.0’,RegString!,’Installed’)
  IF answer = -1 THEN
    Messagebox(‘錯誤’,’應用程序無法設置ODBC DRIVERS,系統將終止運行!’,StopSign!)
    RETURN
  END IF
  //設置ODBC\ODBCINST.INI\
  answer1=RegistrySet(‘ HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Sybase SQL Anywhere 5.0’,’CPTimeout’,RegString!,’not pooled’)
  answer2=RegistrySet(‘ HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Sybase SQL Anywhere 5.0’,’Driver’,RegString!,ls_driver)
  answer3=RegistrySet(‘ HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Sybase SQL Anywhere 5.0’,’Setup’,RegString!,ls_driver)
  IF answer1 = -1 OR answer2 = -1 OR answer3 = -1 THEN
    Messagebox(‘錯誤’,’應用程序無法設置ODBCINST.INI,系統將終止運行!’,StopSign!)
    RETURN
  END IF
  //設置ODBC DATA SOURCE名稱(anysql爲數據源名)
  answer=RegistrySet(‘ HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC Data Sources’,’  anysql’,RegString!,’Sybase SQL Anywhere 5.0’)
  IF answer = -1 THEN
    Messagebox(‘錯誤’,’應用程序無法設置ODBC DATA SOURCE名稱,系統將終止運行!’,StopSign!)
    RETURN
  END IF
  //獲取應用程序的安裝路徑(ybinput爲應用程序安裝到用戶計算機上後在註冊表中註冊的應用程序名,yibiao.db爲應用程序的數據庫名,與應用程序在同一目錄下,anysql爲數據源名)
  ansapp = RegistryGet(“KYEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\ybinput”,”Path”,RegString!app_path)
  IF ansapp = -1 THEN
    Messagebox(‘錯誤’,’應用程序無法獲取安裝路徑名,系統將終止運行!’,StopSign!)
    RETURN
  ELSE
    db_path=app_path+’yibiao.db’
  END IF
  //設置ODBC.INI的細節
  answer1 = RegistrySet(‘HKEY_current_user\software\odbc\odbc.ini\anysql’,’driver’,RegString!,ls_driver)
  answer2 = RegistrySet(‘HKEY_current_user\software\odbc\odbc.ini\anysql’,’start’,RegString!,ls_start)
  answer3 = RegistrySet(‘HKEY_current_user\software\odbc\odbc.ini\anysql’,’autostop’,RegString!,’yes’)
  answer4 = RegistrySet(‘HKEY_current_user\software\odbc\odbc.ini\anysql’,’DataBaseFile’,RegString!,db_path)
  answer5 = RegistrySet(‘HKEY_current_user\software\odbc\odbc.ini\anysql’,’DataBaseName’,RegString!,’yibiao’)
  IF answer1 = -1 OR answer2 = -1 OR answer3 = -1 OR answer4 = -1 OR answer5 = -1 THEN
    Messagebox(‘錯誤’,’應用程序無法設置ODBC.INI細節,系統將終止運行!’,StopSign!)
    RETURN
  END IF
  odbcstr = ’dsn=anysql;databasename=yibiao;databasefile=’+db_path
  sqlca.dbms = ’odbc’
  sqlca.databse = ’yibiao’
  sqlca.dbparm = ”connectstring=’”+odbcstr+”;uid=dba;pwd=sql’”
  connect using sqlca;
  open(w_main)

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