hur.cn - 华软网

 热门搜索

关于动态注册ODBC数据源,一位大哥写的函数,为什么我用了没反应?跟踪了一遍没发现问题,可是到控制面板数据源里面一看,没有!

  作者:未知    来源:网络    更新时间:2019/4/16
关于动态注册Access数据源

//***********************************************
//  函数名:  gf_setodbc_access
//      功能:  完成access数据源的注册功能
//  输入参数:
//    as_database  数据库
//     (即Access数据库资料名字,不含扩展名)
//    as_path   数据库资料所在的目录
//  前往值:
//     true  表示自动配置成功
//     false  表示自动配置失利
//  设计者: Adamswater
//  完成时间: 2005年6月
//***************************************************
boolean lb_rtn
string ls_root,ls_root_dsn,ls_root_Jet,ls_root_Engines
integer li_rtn
string ls_dsnname,ls_dbfullname,ls_driver,temp,ls_version 
string ls_syspath
environment env

integer rtn

ls_syspath = Space( 40 ) 
//获得操作系统的目录
GetSystemDirectoryA(ls_syspath,60)
ls_driver = ls_syspath + "\odbcjt32.dll"
lb_rtn = true
ls_root = "HKEY_LOCAL_MACHINE\software\odbc\odbc.ini"
//数据源名字为:资料名字+“_DT”
ls_dsnname = as_database + "_DT" 
ls_root_dsn = ls_root + "\" + ls_dsnname
ls_root_Engines = ls_root_dsn + "\" + "Engines"
ls_root_Jet = ls_root_Engines + "\" + "Jet"
ls_dbfullname = as_path + "\" + as_database + ".mdb"
//注册数据源的名字
li_rtn = registryset(ls_root,ls_dsnname,regstring!,"")
if li_rtn= - 1 then
return false
end if
//注册数据库名字
li_rtn = registryset(ls_root_dsn,"DBQ",regstring!,ls_dbfullname)
if li_rtn= - 1 then
return false
end if
//注册数据库驱动程序
li_rtn = registryset(ls_root_dsn,"Driver",regstring!,ls_driver)
if li_rtn= - 1 then
return false
end if

//注册其它项
li_rtn = registryset(ls_root_dsn,"FIL",regstring!,"MS Access;")
if li_rtn= - 1 then
return false
end if
li_rtn = registryset(ls_root_dsn,"Description",regstring!,"条形码打印程序")
if li_rtn= - 1 then
return false
end if
li_rtn = registryset(ls_root_dsn,"UID",regstring!,"")
if li_rtn= - 1 then
return false
end if
li_rtn = registryset(ls_root_dsn,"DriverId", RegULong!,25)
if li_rtn= - 1 then
return false
end if
li_rtn = registryset(ls_root_dsn,"SafeTransactions", RegULong!,0)
if li_rtn= - 1 then
return false
end if
//注册"Engines"项
li_rtn = registryset(ls_root_dsn,"Engines",regstring!,"")
if li_rtn= - 1 then
return false
end if
//注册"Jet"项
li_rtn = registryset(ls_root_Engines,"Jet",regstring!,"")
if li_rtn= - 1 then
return false
end if
//注册"Jet"项的各个子项
li_rtn = registryset(ls_root_Jet,"ImplicitCommitSync",regstring!,"")
if li_rtn= - 1 then
return false
end if
li_rtn = registryset(ls_root_Jet,"UserCommitSync",regstring!,"Yes")
if li_rtn= - 1 then
return false
end if
li_rtn = registryset(ls_root_Jet,"MaxBufferSize", RegULong!,2048)
if li_rtn= - 1 then
return false
end if
li_rtn = registryset(ls_root_Jet,"PageTimeout", RegULong!,5)
if li_rtn= - 1 then
return false
end if
li_rtn = registryset(ls_root_Jet,"Threads", RegULong!,3)
if li_rtn= - 1 then
return false
end if
return lb_rtn

注:函数中运用到的api函数声明以下,

Function uint GetSystemDirectoryA(ref string dirtext, uint textlen) library "KERNEL32.DLL"

------华软网友回答------
我是这样调用的
boolean rflag
string db_name,db_path
db_name = "test007"
db_path = "c:\"
rflag = gf_setodbc_access(db_name,db_path)

是否是我调用的有问题,哪位高手指点一下,谢谢~~
------华软网友回复------
那注册表中有没有啊。
------华软网友回复------
li_rtn = registryset(ls_root,ls_dsnname,regstring!,"") 
这东西都不要。。有了这个不行。
------华软网友回复------
ls_root = "HKEY_LOCAL_MACHINE\software\odbc\odbc.ini"
看到吗? 这是要用administator的权限才能够写的, 你如果用的是普通用户, 会遭到限制的,写不进去,所以你会看不到

------华软网友回复------
这样写,在控制面板 上是看不到的,然则如果数据源已经注册成功的话,也能用 ~~~
------华软网友回复------
注册表中有的,你能够到这里下载代码,看看
http://www.pbhero.com/bbs/dispbbs.asp?boardID=3&ID=87&page=1      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。