integer li_rc,li_filenum
string ls_dir,ls_dbfile,ls_datasource,ls_dbname,ls_config,ls_database
boolean lb_exist
ls_datasource = as_dbname
ls_dbname = as_dbname
ls_dir = GetCurrentdirectory()
ls_dbfile = ls_dir+'\'+ls_dbname+'.db'
ls_config = ls_dir + "\config.ini"
boolean lb_exeist
lb_exist = FileExists(ls_dbfile)
if not lb_exist then
messagebox("提示","在當前目錄下不存在:"+ls_dbname+".db")
halt
end if
lb_exist = FileExists(ls_config)
//判斷組態檔是否存在
if lb_exist then
li_rc = profileint("config.ini","start","first",0)
//如果存在則獲取組態檔的start段的first的鍵值
//如果鍵值不存在則賦值為0
else
li_FileNum = FileOpen(ls_config,LineMode!,Write!,Shared!,Append!)
FileWrite(li_FileNum,"[start]~r~n first = 1")
li_rc = 1
//如果不存在,則按一定的格式創建組態檔
end if
if li_rc = 1 then
//第一次讀取組態檔
if RegistrySet("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\"+"Adaptive Server Anywhere 8.0","Driver",RegString!,"dbodbc8.dll") = 1 then
messagebox("提示","資料源已注冊成功!")
end if
//注冊資料源
else
RegistrySet("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\"+"Adaptive Server Anywhere 8.0","Driver",RegString!,"dbodbc8.dll")
RegistrySet("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Data Sources",ls_datasource,RegString!,"Adaptive Server Anywhere 8.0")
RegistrySet("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\"+ls_datasource,"Drive",RegString!,"dbodbc8.dll")
RegistrySet("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\"+ls_datasource,"PWD",RegString!,"SQL")
RegistrySet("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\"+ls_datasource,"DataFile",RegString!,ls_dbfile)
RegistrySet("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\"+ls_datasource,"AutoStop",RegString!,"Yes")
RegistrySet("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\"+ls_datasource,"Integrated",RegString!,"No")
RegistrySet("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\"+ls_datasource,"DatabaseName",RegString!,ls_dbname)
RegistrySet("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\"+ls_datasource,"Debug",RegString!,"No")
RegistrySet("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\"+ls_datasource,"DisableMultiRowFetch",RegString!,"No")
setprofilestring("config.ini","start","first","0")
//修改組態檔的初始值,以后不再讀取該檔案
end if
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm="ConnectString='"+"DSN="+ls_datasource+";UID="+as_uid+";PWD="+as_pwd+"'"
//連接資料庫
connect using sqlca;
if sqlca.sqlcode <> 0 then
if li_rc = 0 then
setprofilestring("config.ini","start","first","1")
messagebox("提示","請重新連接")
else
messagebox("與資料庫連接失敗","在連接資料庫時發現錯誤。")
end if
return false
else
return true
disconnect;
end if
是自動尋找資料源的代碼,在自己電腦上運行程式沒問題,但換到別的沒有pb的電腦就完了,在連接資料庫時發現錯誤……
uj5u.com熱心網友回復:
沒細看,看看這個吧global type f_odbcrefister from function_object
end type
forward prototypes
global function integer f_odbcregister ()
end prototypes
global function integer f_odbcregister ();string ls_sys[],ls_driver[],st_driver,st_path,st_odbcdsn
string ls_me
integer li_rtn
ls_me="jnjjc"
//83463643 M
ls_sys[1]="HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Microsoft Access Driver (*.mdb)"
ls_sys[2]="HKEY_CURRENT_USER\Software\"+ls_me+"\蘇路通公路流量管理系統\"
ls_sys[3]="HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources"
ls_sys[4]="HKEY_CURRENT_USER\Software\ODBC\ODBC.INI"
li_rtn = RegistryGet(ls_sys[1], "Driver", RegString!, st_driver)
IF li_rtn = -1 THEN
messagebox("錯誤","未安裝Microsoft Access Driver (*.mdb) !",information!,ok!)
// RETURN
END IF
li_rtn = RegistryGet(ls_sys[2], "Path", RegString!, st_path)
IF li_rtn = -1 THEN
messagebox("錯誤","讀取安裝路徑出錯 !",information!,ok!)
RETURN 0
END IF
li_rtn = RegistryGet(ls_sys[3], "slt", RegString!, st_odbcdsn)
IF (li_rtn = 1 and st_odbcdsn = 'Microsoft Access Driver (*.mdb)') THEN
// messagebox("錯誤","讀取安裝路徑出錯OK !",information!,ok!)
RETURN 1
END IF
string envfile,ls_source[],ls_drivepath,ls_temp
integer i
ls_source[1]="slt"
ls_source[2] ="yes"
ls_source[3] =st_path+"\"+"data\road_database.mdb"
ls_source[4] ='MS Access;'
li_rtn=RegistrySet(ls_sys[3], ls_source[1] , RegString!, "Microsoft Access Driver (*.mdb)")
IF li_rtn = -1 THEN
messagebox("錯誤","讀取系統檔案或寫注冊表出錯 !",information!,ok!)
RETURN 0
END IF
ls_sys[4]=ls_sys[4] + "\" + ls_source[1]
li_rtn=RegistrySet(ls_sys[4], "DBQ" , RegString!, ls_source[3])
IF li_rtn = -1 THEN
messagebox("錯誤","讀取系統檔案或寫注冊表出錯 !",information!,ok!)
RETURN 0
END IF
li_rtn=RegistrySet(ls_sys[4], "Driver" , RegString!, st_driver)
IF li_rtn = -1 THEN
messagebox("錯誤","讀取系統檔案或寫注冊表出錯 !",information!,ok!)
RETURN 0
END IF
li_rtn=RegistrySet(ls_sys[4], "DriverId" , ReguLong!,25)
IF li_rtn = -1 THEN
messagebox("錯誤","讀取系統檔案或寫注冊表出錯 !",information!,ok!)
RETURN 0
END IF
li_rtn=RegistrySet(ls_sys[4], "FIL" , RegString!, ls_source[4])
IF li_rtn = -1 THEN
messagebox("錯誤","讀取系統檔案或寫注冊表出錯 !",information!,ok!)
RETURN 0
END IF
li_rtn=RegistrySet(ls_sys[4], "SafeTransactions" , ReguLong!, 0)
IF li_rtn = -1 THEN
messagebox("錯誤","讀取系統檔案或寫注冊表出錯?!",information!,ok!)
RETURN 0
END IF
li_rtn=RegistrySet(ls_sys[4], "UID" , RegString!, '')
IF li_rtn = -1 THEN
messagebox("錯誤","讀取系統檔案或寫注冊表出錯 !",information!,ok!)
RETURN 0
END IF
li_rtn=RegistrySet(ls_sys[4]+'\Engines\jet', "ImplicitCommitSync" , RegString!,'')
IF li_rtn = -1 THEN
messagebox("錯誤","讀取系統檔案或寫注冊表出錯 !",information!,ok!)
RETURN 0
END IF
li_rtn=RegistrySet(ls_sys[4]+'\Engines\jet', "MaxBufferSize" , ReguLong!, 2048)
IF li_rtn = -1 THEN
messagebox("錯誤","讀取系統檔案或寫注冊表出錯 !",information!,ok!)
RETURN 0
END IF
li_rtn=RegistrySet(ls_sys[4]+'\Engines\jet', "PageTimeout" , ReguLong!, 5)
IF li_rtn = -1 THEN
messagebox("錯誤","讀取系統檔案或寫注冊表出錯 !",information!,ok!)
RETURN 0
END IF
li_rtn=RegistrySet(ls_sys[4]+'\Engines\jet', "Threads" , ReguLong!, 3)
IF li_rtn = -1 THEN
messagebox("錯誤","讀取系統檔案或寫注冊表出錯 !",information!,ok!)
RETURN 0
END IF
li_rtn=RegistrySet(ls_sys[4]+'\Engines\jet', "UserCommitSync" , RegString!, 'yes')
IF li_rtn = -1 THEN
messagebox("錯誤","讀取系統檔案或寫注冊表出錯 !",information!,ok!)
RETURN 0
END IF
return 1
end function
uj5u.com熱心網友回復:
把err資訊貼出來uj5u.com熱心網友回復:
一看帖子題目就知道有問題,就是我不知道怎么改。uj5u.com熱心網友回復:
lz要干嘛?uj5u.com熱心網友回復:
都是很好的建議! 值得學習轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/109289.html
標籤:數據庫相關
