我用的是pb9.0 asa8.0
比如 我新建一個應用,在應用中新建函式f_regdatasource() 是個自動選擇資料源的函式,
有三個引數 (資料庫名,用戶名,密碼),建好了在應用的open事件中運行,但是為什么每次我點run以后,還是蹦出選則資料源的
視窗讓我自己選擇?那位高手能指點一下?謝謝了
下面是f_regdatasource()函式的內容
integer li_rc,li_filenum
string ls_dir,ls_dbfile,ls_datasource,ls_dbname,ls_config
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
uj5u.com熱心網友回復:
應該是你注冊SQLANYWHERE有問題。以下代碼使用無問題,存為uf_set_db.srf后匯入PBL使用。
$PBExportHeader$uf_set_db.srf
global type uf_set_db from function_object
end type
forward prototypes
global function integer uf_set_db (string as_dsn, string as_db_name, string as_db_parm)
end prototypes
global function integer uf_set_db (string as_dsn, string as_db_name, string as_db_parm);//注冊SQLANYWHERE資料庫
//這里可以在本程式內將SQLANYWHERE注冊到作業系統內
//這里寫的是PB9自帶的ASA8的注冊,如果你使用其他版本,只需要將8改為相應的版本即可。
Int answer,answer1,answer2,answer3,answer4,answer5,answer6,answer7
String ls_driver,ls_start,ls_location,ls_value,db_path,ls_path
ls_path = GetCurrentDirectory ( )
if right(ls_path,1) = '\' then
ls_path = mid(ls_path, 1, len(ls_path) - 1)
end if
ls_driver = ls_path + '\dbodbc8.dll'
ls_start = ls_path+'\dbeng8.exe'
if not (FileExists(ls_driver) AND FileExists(ls_start)) THEN
Messagebox('錯誤',ls_path+'目錄中沒有安裝dbeng8.exe和dbodbc8.dll檔案!',StopSign!)
return 0
else
RegistrySet("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\dbeng8.exe","path",RegString!,ls_path)
RegistrySet("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\dbeng8.exe","",RegString!,ls_start)
end if
//設定ODBC\ODBCINST.INI\ODBC DRIVERS
answer1=RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC DRIVERS','Adaptive Server Anywhere 8.0',RegString!,'Installed')
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('錯誤','應用程式無法設定ODBC DRIVERS,運行不能繼續!',StopSign!)
RETURN 0
END IF
db_path=ls_path+'\'+as_db_name+".db"
answer=RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\ODBC Data Sources',as_dsn,RegString!,'Adaptive Server Anywhere 8.0')
answer1=RegistrySet('HKEY_LOCAL_MACHINE\software\odbc\odbc.ini\'+as_dsn,'driver',RegString!,ls_driver)
answer2=RegistrySet('HKEY_LOCAL_MACHINE\software\odbc\odbc.ini\'+as_dsn,'start',RegString!,ls_start+' -d -Q -c1024')
answer3=RegistrySet('HKEY_LOCAL_MACHINE\software\odbc\odbc.ini\'+as_dsn,'autostop',RegString!,'yes')
answer4=RegistrySet('HKEY_LOCAL_MACHINE\software\odbc\odbc.ini\'+as_dsn,'DataBaseFile',RegString!,db_path)
answer5=RegistrySet('HKEY_LOCAL_MACHINE\software\odbc\odbc.ini\'+as_dsn,'DataBaseName',RegString!,as_db_name)
answer6=RegistrySet('HKEY_LOCAL_MACHINE\software\odbc\odbc.ini\'+as_dsn,'uid',RegString!,"dba")
answer7=RegistrySet('HKEY_LOCAL_MACHINE\software\odbc\odbc.ini\'+as_dsn,'pwd',RegString!,"sql")
if answer=-1 or answer1=-1 or answer2=-1 or answer3=-1 or answer4=-1 or answer5=-1 or answer6=-1 or answer7=-1 then
Messagebox('錯誤','應用程式無法設定ODBC SYSTEM DATA SOURCE,運行不能繼續!',StopSign!)
RETURN 0
end if
sqlca.DBMS = "ODBC"
sqlca.dbparm = as_db_parm
//connect;
//if sqlca.sqlcode <> 0 then
// MessageBox ("連接資料庫錯誤", sqlca.sqlerrtext)
// return 0
//end if
return 1
end function
uj5u.com熱心網友回復:
請問匯入以后如何使用?呵呵,我是新手,請多指教,謝謝了我已經匯入了,在pbl的樹狀目錄下看到這個檔案了,然后呢?
uj5u.com熱心網友回復:
uf_set_db這個函式有三個引數分別是:資料源,資料檔案,啟動引數string ls_dbparm
int i
ls_dbparm = "ConnectString='DSN=my_test;UID=dba;PWD=sql'"
//連接資料庫,回傳值i若=0說明連接資料庫程序中出錯了。
i = uf_set_db("my_test","my_test",ls_dbparm)
if i = 0 then return
connect;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/116460.html
標籤:數據庫相關
