在本地開發出一個小軟體,用的是asa9的資料庫,連接代碼如下:
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "Connectstring='DSN=zzq'UID='dba'Wd='sql'"
connect;
編譯生成exe檔案后,放到一臺新電腦上運行,提示問題如下:
SQLSTATE=IM002
未發現資料源名稱并未指定默認驅動程式
我就想實作,客戶端不用安裝資料庫,直接就可以運行我的小程式,如何實作,高手幫忙。
uj5u.com熱心網友回復:
新的那臺電腦也需要ASA9 引摯!另外,單機的話,可以使用 mdb 資料庫。
在你開發的電腦上,用資料匯入/匯出工具把asa9 的.db資料庫匯入 .mdb 的就可以了。
uj5u.com熱心網友回復:
access 的mdb 資料庫是windows 系統自帶了資料訪問引摯的,不需要單獨再安裝其它程式。uj5u.com熱心網友回復:
那你的程式是否必須用資料庫呢,如果必須最好看樓上的uj5u.com熱心網友回復:
asa也要在客戶端安裝嗎?應該不用吧,它也是一個檔案.db的。uj5u.com熱心網友回復:
一種是運行runtime packager打包運行環境
另一種是直接復制運行時的庫檔案
pb9運行庫
PB9.0所需檔案:
PBVM90.DLL PowerBuilder 虛擬機
PBDWE90.DLL DataWindow 資料視窗引擎
LIBJCC.DLL PowerBuilder 庫管理
PBTRA90.DLL 資料庫訪問跟蹤
PBODB90.DLL PB的ODBC介面
PBMSS90.DLL Microsoft SQL Server介面
PBSYC90.DLL Sybase SQL Server介面
uj5u.com熱心網友回復:
在客戶端除了需要以上檔案外,還需要配置資料源,如果系統相同的話,把注冊表下的相應部分匯出到客戶機上也行uj5u.com熱心網友回復:
最好使用代碼注冊資料源,我可以提供以下函式匯出的格式,然后保存為srd檔案匯入即可
global type of_set_datasource from function_object
end type
forward prototypes
global function boolean of_set_datasource ()
end prototypes
global function boolean of_set_datasource ();//通過編輯注冊表自動配置ODBC
Integer li_FileNum, loops, i,i_database
Long flen, bytes_read, new_pos
Blob b, tot_b
ULong ul_num
Int Answer,Answer1,Answer2,Answer3,Answer4,Answer5,Answer6,Answer7,Answer8,Answer9,ansApp
String ls_driver,ls_start,ls_driver_yy,ls_start_yy,ls_driver_xt,ls_start_xt,ls_driver_test
String ls_location,apppath,db_path,db_name,ODBCStr,ds_name,ls_dir,ls_dbfile
RegistryGet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Adaptive Server Anywhere 8.0","Driver", RegString!, ls_driver_test)
i_database = RegistryGet("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\hlcm","DatabaseFile", RegString!, ls_dbfile)
//2010-03-02
IF Mid(ls_driver_test,(Len(ls_driver_test) - 10),11) = 'dbodbc8.dll' And i_database = 1 and Mid(ls_dbfile,(Len(ls_dbfile) - 6),7) = 'hlcm.db' THEN //設定好驅動了
IF FileExists(ls_driver_test) And FileExists(ls_dbfile) THEN
//MessageBox("^_^","已經設定好資料源")
RETURN True
END IF
END IF
//RegistryGet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Adaptive Server Anywhere 8.0","Driver", RegString!, ls_driver_test)
//
//IF Mid(ls_driver_test,(Len(ls_driver_test) - 10),11) = 'dbodbc8.dll' THEN //認為已經設定好驅動
// RETURN True
//END IF
//RegistryGet("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\hlcmsql","DatabaseFile", RegString!, ls_dbfile)
//
//IF Not FileExists(ls_dbfile) THEN
// MessageBox("告警","注冊表中指定的資料庫檔案"+ls_dbfile+"不存在")
// RETURN False
//END IF
ls_location = gs_locpath + "\" //獲得該應用的目錄
ls_driver_yy = ls_location + "dbodbc8.dll"
ls_start_yy = ls_location + "dbeng8.exe"
ls_driver_xt = windir + "\" + "dbodbc8.dll"
ls_start_xt = windir + "\" + "dbeng8.exe"
IF Not ( ( FileExists(ls_driver_yy) And FileExists(ls_start_yy) ) Or (FileExists(ls_driver_xt) And FileExists(ls_start_xt) ) ) THEN
MessageBox("引擎錯誤1","系統中沒有資料庫驅動引擎和元件!~r~n系統將終止運行!",StopSign!)
RETURN False
END IF
IF FileExists(ls_driver_xt) And FileExists(ls_start_xt) THEN
ls_driver = ls_driver_xt
ls_start = ls_start_xt
ELSE
ls_driver = ls_driver_yy
ls_start = ls_start_yy
END IF
Answer = RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC Drivers","Adaptive Server Anywhere 8.0",RegString!,"Installed")
IF Answer = -1 THEN
MessageBox("ODBC驅動錯誤2","系統設定Adaptive Server Anywhere 8的驅動出現錯誤",Information!)
RETURN False
END IF
//設定ODBC\ODBCINST.INI
Answer1 = RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Adaptive Server Anywhere 8.0","CPTimeout",RegString!,"not pooled")
Answer2 = RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Adaptive Server Anywhere 8.0","Driver",RegString!,ls_driver)
Answer3 = RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Adaptive Server Anywhere 8.0","Setup",RegString!,ls_driver)
IF Answer1 = -1 Or Answer2 = -1 Or Answer3 = -1 THEN
MessageBox("錯誤3","系統設定注冊表ODBC\ODBCINST錯誤!~r~n系統將終止運行!",Information!)
RETURN False
END IF
db_path = gs_locpath +"\hlcm.db" //設定資料庫路徑及檔案名
db_name = "hlcm" //設定資料庫名稱
ds_name = "hlcm" //設定ODBC資料源名稱
Answer = RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBCINST.INI\ODBC Data Sources",ds_name,RegString!,"Adaptiver Server Anywhere 8.0")
IF Answer = -1 THEN
MessageBox("設定資料源錯誤4","系統設定ODBC資料源錯誤!~r~n系統將終止運行!",Information!)
RETURN False
END IF
//設定ODBC.INI的細節
ls_start = ls_start+" -d -Q -c200m"
Answer1 = RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.ini\"+ds_name,"driver",RegString!,ls_driver)
Answer2 = RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.ini\"+ds_name,"start",RegString!,ls_start)
Answer3 = RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\"+ds_name,"autostop",RegString!,"yes")
Answer4 = RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\"+ds_name,"DataBaseFile",RegString!,db_path)
Answer5 = RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\"+ds_name,"DataBaseName",RegString!,db_name)
Answer6 = RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\"+ds_name,"UID",RegString!,"dba")
Answer7 = RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\"+ds_name,"EncryptedPassword",RegString!,"22f4c70a26ceba1afda291a1fda9")
Answer8 = RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\"+ds_name,"EngineName",RegString!,ds_name)
Answer9 = RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\"+ds_name,"Compress",RegString!,"YES")
IF Answer1 = -1 Or Answer2 = -1 Or Answer3 = -1 Or Answer4 = -1 Or Answer5 = -1 Or Answer6 = -1 Or Answer7 = -1 Or Answer8 = -1 THEN
MessageBox("錯誤5","系統設定ODBC錯誤!~r~n系統將終止運行!",Information!)
RETURN False
END IF
RETURN True
end function
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/80627.html
標籤:數據庫相關
