pb9.0下 自动注册odbc数据源
pb吧
全部回复
仅看楼主
level 5
开发工具和技术更新 使用powerbuilder 的程序员越来越少,再加上sybase被sap收购,
估计powerscript语言在市场逐步淡化,但会加强sybase数据库的发展。
有的电脑安装有Adaptive Server Anywhere(asa) 有的电脑没有
为了实现两种情况下的odbc连接,同时又不影响正常pb开发中的数据库管理
,将连接参数封装
第一步:首先定义连接参数的结构
global type str_db_property from structure string DBMS //(必须)所使用的数据库管理系统的名字,如Sybase,Oracle,ODBC,MSS Microsoft SQL Server。
string Database //连接的数据库名 string LogID //登录到数据库服务器上的用户名,有的DBMS不需要此项,但Sybase和Oracle需要指定这个参数。
string LogPass //登录到数据库服务器上的用户口令。这个属性可设可不设,但Sybase和Oracle需要指定口令。
string ServerName //服务器名
string UserID //连接数据库所用的用户名。有的DBMS不需要此项(ms sqlserver)
string DBPass //用户连接数据库的口令。
string Lock="RC" //隔离级别 RC默认提交读 RU未提交读 RR可重复读 TS序列化 资料参考:sqlserver 事务隔离级别
boolean AutoCommit=false //
string DBParm //连接参数 //以上为连接参数,一下为结果属性 //long SQLCode //指示最近一次SQL操作失败或成功。它的取值为: 返回结果 0 无错误。 -1 出现一个错误。 100 没有检索到数据。
//long SQLDBCode //数据库错误代码,同的数据库的含义不同。
//string SQLErrText //数据库错误内容,相应于SQLDBCode属性中错误码的文字说明
//long SQLNRows //最近一次SQL操作影响的行数,数据库不同其含义也不同。
//string SQLReturnData //返回DBMS执行SQL的附加信息,不同的DBMS其值不同。 //一下为asa8.0使用属性,加载asa驱动
string Sybasedb //sybase数据库位置 *.db
string Dbeng8path //asa Dbeng8.exe
string Dbodbc8path //asa Dbodbc8.dll
string Asaname="aa_erp" //可以设置默认数据源名称
end type 在以上机构定义中,可以设置属性的默认值,也可以不设,在调用时再赋值。第二步:封装为函数,方便调用 forward prototypes
public function integer uf_db_gettrans (ref transaction l_tran, str_db_property str_property, integer types)
end prototypes public function integer uf_db_gettrans (ref transaction l_tran, str_db_property str_property, integer types);
choose case types
case 1 //ms sqlserver专用
l_tran.DBMS =str_property.DB***_tran.Database =str_property.Database
l_tran.LogPass =str_property.LogPass
l_tran.ServerName = str_property.ServerName
l_tran.LogId = str_property.LogId
l_tran.Lock = str_property.Lock
l_tran.AutoCommit = str_property.AutoCommit
l_tran.DBParm=str_property.DBParm
case 2 //asa 8.0
string ls_root
string ls_root_table
ls_root="HKEY_CURRENT_USER\software\odbc\odbc.ini"
ls_root_table=ls_root+"\"+str_property.Asaname
//判断是否有asa驱动程序
string ls_drivervalue
string ls_driverpath="HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC Drivers"
RegistryGet(ls_driverpath,"Adaptive Server Anywhere 8.0",regstring!,ls_drivervalue)
if ls_drivervalue<>"Adaptive Server Anywhere 8.0" then
RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC Drivers","Adaptive Server Anywhere 8.0",RegString!,"Installed")
RegistrySet("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Translators","Adaptive Server Anywhere 8.0 Translator",RegString!,"Installed")
2013年01月29日 03点01分 1
level 5
RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Adaptive Server Anywhere 8.0","Driver",RegString!,str_property.dbeng8path)
RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Adaptive Server Anywhere 8.0","Setup",RegString!,str_property.dbeng8path)
RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC Data Sources",str_property.Sybasedb,RegString!,"Adaptive Server Anywhere 8.0")
end if
//odbc-asa配置信息
registryset(ls_root+"\odbc data sources",str_property.Asaname,regstring!,"Adaptive Server Anywhere 8.0")
registryset(ls_root_table, "Driver",regstring!,"d:\Program Files\Sybase\SQL Anywhere 8\win32\dbodbc8.dll")
registryset(ls_root_table, "UID",regstring!, str_property.UserID)
registryset(ls_root_table, "PWD",regstring!,str_property.DBPass)
registryset(ls_root_table, "DatabaseFile",regstring!,str_property.Sybasedb)
registryset(ls_root_table, "DatabaseName",regstring!,str_property.Database)
registryset(ls_root_table, "AutoStop",regstring!, "Yes")
registryset(ls_root_table, "Compress",regstring!, "No")
registryset(ls_root_table, "Integrated",regstring!, "No")
l_tran.DBMS = "ODBC"
l_tran.AutoCommit =false
l_tran.database="sc"
l_tran.DBParm = "Connectstring='DSN="+str_property.Asaname+";UID=dba;PWD=sql''"
end choose
return 0
end function 以上函数封装中,提供了sqlserver的连接和asa8的连接对于里面的连接参数和其他数据库连接,可以修改和追加. 具体的连接参数DBParm,可以参考powerbuilder开发环境中的帮助文档.(查看方式如下)
点击菜单help->content 在弹出的界面中输入d
bp
aram ,然后点击列表中 “DBParm parameters:and supported database interfaces”
该帮助提供了大部分数据库连接的参数信息,
对于transaction 属性可以点击browser-》system 选项卡查看 transaction的属性
第三步:调用
str_db_property str_property
//sql server登陆参数
str_property.DBMS="MSS Microsoft SQL Server"
str_property.Database="sc"
str_property.LogID="sc"
str_property.LogPass="aJolM23BSf"
str_property.ServerName="192.168.2.182"
str_property.UserID="dba"
str_property.DBPass="sql"
str_property.Lock="RC"
str_property.AutoCommit=false
str_property.DBParm=""
//一下为asa8.0使用属性
str_property.Sybasedb="E:\bb.db" //sybase数据库位置
str_property.Dbeng8path="f:\sc\dbeng8.exe" //asa 连接文件
str_property.Dbodbc8path="f\sc\dbodbc8.dll" //asa 连接文件
str_property.Asaname="aa_erp" //数据源名称
sql_myca=create transaction
uf_db_gettrans(sql_myca,str_property,2)
connect using sql_myca; if sql_myca.sqlcode=0 then
messagebox("提示","sqlserver 连接成功")
end if 上述调用方法中,需在全局变量中声明 tranaction sql_myca 整个过程完毕
2013年01月29日 03点01分 2
1