pb用脚本写与access自动配置odbc连接的问题

oldabc 2009-03-31 08:18:18
pb9.0用脚本写与access自动配置odbc连接的代码怎么写


最好不要少代码。
会很麻烦
感谢
...全文
167 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
newease 2009-04-07
  • 打赏
  • 举报
回复
都已经给出正确答案了,该可以结贴了
yyoinge 2009-04-06
  • 打赏
  • 举报
回复
string ls_1
ls_1 = Space( 200 )
//获得操作系统的目录
GetSystemDirectoryA(ls_1,60)
//
string ls_dsn, ls_filename
ls_dsn = '你的数据库实例名' //由你自己定
ls_filename = '你的access数据库文件的绝对路径'
//
RegistryDelete("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\" + ls_dsn, "DatabaseFile")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\" + ls_dsn, "DBQ", ls_filename)
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\" + ls_dsn, "Driver", ls_1+ "\odbcjt32.dll")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\" + ls_dsn, "DriverId",ReguLong!,25)
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\" + ls_dsn, "FIL", "MS Access;")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\" + ls_dsn, "SafeTransactions", ReguLong!,0)
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\" + ls_dsn, "UID","admin")


sqlca = create transaction
sqlca.DBMS = "ODBC"
sqlca.Database = ls_dsn
sqlca.UserId = "dba"
sqlca.DbPass = ""
sqlca.LogPass = ""
sqlca.ServerName = ""
sqlca.LogId = ""
sqlca.DbParm = "ConnectString='DSN=你的数据库实例名;UID=admin;PWD=你的数据库的密码',CommitOnDisconnect='No'"

sqlca.AutoCommit = false
connect using sqlca;
if sqlca.sqlcode = -1 then
rollback using sqlca;
messagebox("连接错误 ", "事务名称:sqlca~n错误代码:" + string(sqlca.sqldbcode) + "~n错误信息:" + sqlca.sqlerrtext )
destroy sqlca
end if
softvery 2009-04-01
  • 打赏
  • 举报
回复
连接ASSESS可以使用OLE DB 更为方便

SQLCA.DBMS = "OLE DB"
SQLCA.AutoCommit = False
SQLCA.DBParm = "PROVIDER='Microsoft.Jet.OLEDB.4.0'"
WorldMobile 2009-03-31
  • 打赏
  • 举报
回复
1楼的大侠太强了,呵呵
wlalw131415 2009-03-31
  • 打赏
  • 举报
回复
string path,pathb,dbpath,result
int k
path="HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\access002"
pathb="HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources\"
dbpath=GetCurrentDirectory( )+"\DB\student_infor.mdb"
k=registryget(path, "DBQ", result)
if k=1 then
RegistryDelete("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\access002","BPQ")
registrySet(path, "DBQ", RegString!,dbpath)
end if
if k<>1 then
registrySet(path, "DBQ", RegString!,dbpath)
registrySet(path, "Driver", RegString!,"c:\windows\system32\odbcjt32.dll")
registrySet(path, "DriverId", ReguLong!,25)
registrySet(path, "FIL", RegString!, "MS Access")
registrySet(path, "UID", RegString!, "")
registrySet(path, "PWD", RegString!, "")
registrySet(path, "SafeTransactions", ReguLong!, 0)
registrySet(pathb, "DSN_access", RegString!, "Microsoft Access Driver(*.mdb)")
end if


// Profile abcd
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = True
SQLCA.DBParm = "ConnectString='DSN=abcd'"



connect using sqlca;
if sqlca.sqlcode=0 then
open(w_login)
else
messagebox("出错","数据库连接失败!"+sqlca.sqlerrtext,stopsign!)
end if
dawugui 2009-03-31
  • 打赏
  • 举报
回复
关于动态注册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"

743

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 脚本语言
社区管理员
  • 脚本语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧