关于动态注册ODBC数据源
关于动态注册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 2006-11-15 23:52 用PB连接Access数据库(.mdb文件)在注册表中的ODBC配置相关项
//***************************************************************************/
ODBC相关的键,主要有下面几项:
HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBCDRIVER 记录所有已安装的ODBC驱动程序;
HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI 记录各种ODBC驱动程序的相关信息;
HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources 记录各种数据源的类型;
HKEY_CURRENT_USER\Software\ODBC\ODBC.INI 记录各种数据源的详细信息。
//***************************************************************************/
//ODBC下Access数据库的键的配置
HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\数据源名称(如TEST)
//说明:"..."="HKEY_CURRENT_USER\Software\ODBC"
//键值设置
...\ODBC.INI\数据源名称(如TEST)\DBQ REG_SZ 数据库文件所在路径
...\ODBC.INI\数据源名称(如TEST)\Driver REG_SZ odbc驱动所在路径(C:\WINNT\System32\odbcjt32.dll)
...\ODBC.INI\数据源名称(如TEST)\DriverId REG_DWORD 0x00000019(25)
...\ODBC.INI\数据源名称(如TEST)\FIL REG_SZ MS Access;
...\ODBC.INI\数据源名称(如TEST)\SafeTransactions REG_DWORD 0x00000000(0)
...\ODBC.INI\数据源名称(如TEST)\UID REG_SZ
//子键没有也可以
//子键配置(...\ODBC.INI\数据源名称(如TEST)\Engines) 无(默认)
//子键配置(...\ODBC.INI\数据源名称(如TEST)\Engines\Jet)
...\ODBC.INI\数据源名称(如TEST)\Engines\Jet\ImplicitCommitSync REG_SZ
...\ODBC.INI\数据源名称(如TEST)\Engines\Jet\MaxBufferSize REG_DWORD 0x00000800(2048)
...\ODBC.INI\数据源名称(如TEST)\Engines\Jet\PageTimeout REG_DWORD 0x00000005(5)
...\ODBC.INI\数据源名称(如TEST)\Engines\Jet\Threads REG_DWORD 0x00000003(3)
...\ODBC.INI\数据源名称(如TEST)\Engines\Jet\UserCommitSync REG_SZ Yes
//***************************************************************************/
//PB中相关注册表操作函数
RegistryGet ( key, valuename, { valuetype }, valuevariable )
RegistryKeys ( key, subkeys )
RegistrySet ( key, valuename, valuetype, value )
RegistryValues ( key, valuename )
//valuetype:
RegString!
RegExpandString!
RegBinary!
ReguLong!
ReguLongBigEndian!
RegLink!
RegMultiString!
//***************************************************************************/
//获取操作系统的system目录,并保存到ls_location变量
li_sysdir = RegistryGet("KYEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup","SysDir",RegString!ls_location);
IF li_sysdir = -1 THEN
Messagebox('错误','应用程序无法获取Windows的系统目录,系统将终止运行!',Stopsign!);
RETURN;
END IF
//然后根据系统目录得出odbc驱动(odbcjt32.dll)的路径
//***************************************************************************/
//数据库事务连接
SQLCA.DBMS = "ODBC"
SQLCA.Database = 数据库文件名
SQLCA.AutoCommit = False
SQLCA.DBParm = ""
sqlca.DbParm="Connectstring='DSN=数据源名称;UID=sa;PWD=;"
connect using sqlca; 2006-11-15 23:52 PowerBuilder连接Sybase SQL Server的注意事项
首先, 确认Open Client 已经安装, 并正确配置, 且能够通过wisql 或Sybase Advantage查询SERVER端数据库中的数据.
PowerBuilder连接不上Sybase数据库, 主要原因有以下几点:
1) locales.dat 未正确设置
locales.dat 是Client端字符集设置文件, 一般在c:\sybase\locales\ 目录下。若操作系统平台是Windows 95, 则修改[NT]节下的相关内容;若操作系统平台是Windows 3.x, 则修改[win3]节下的相关内容。
a、应该有一行有关中国的国别设置:
locale = chs, us_english, iso_1
b、Client端的缺省字符集设置应该和Server端的字符集设置一致。
本例中将Client端的缺省字符集设为iso_1:
locale = default, us_english, iso_1
2) 重装SQL SERVER后未运行pbsyc.sql
pbsyc.sql用于在Sybase数据库中创建PowerBuilder所需的系统表和存储过程,它在PowerBuilder安装盘的server目录下。当PowerBuilder第一次连接数据库之前,或Sybase重装之后,需要在isql或SybaseAdvantage中,用"sa"登录到"master"数据库,运行pbsyc.sql . 另外,若连接的是Adaptive Server 11.5,需要先对pbsyc.sql文件做如下改动:
将"@@"替换为"@",但保留"@@error"和"@@isolation"
3) PowerBuilder是32位的,但Open Client是16位的,由于PowerBuilder需要通过Open Client实现与数据库的连接,所以Open Client必须与PowerBuilder同为32位,或同为16位。
4) 未安装Sybase的直连接口(Native Driver)或ODBC接口(ODBC Driver)PowerBuilder需要通过Native Driver或ODBC Driver才能访问数据库,所以若需要访问Sybase数据库,Native Driver或ODBC Driver是必需的。
5) Open Client中定义的Server Name与PowerBuilder应用中SQLCA.ServerName 设置的值不一致。
6) 未将PowerBuilder的DLL库的路径名加到系统搜索路径上由于PowerBuilder应用程序运行时需要一些DLL库的支持,所以需要将PowerBuilder的DLL库的路径加到系统搜索路径上。
下面是系统缺省的DLL库安装路径:
长文件名安装时:(PB6.0)
c:\Program Files\Powersoft\Shared\
长文件名安装时:(PB5.0)
c:\Program Files\Common Files\Powersoft Shared\
短文件名安装时:
c:\pwrs\sys32\ 2006-11-15 23:52 PowerBuilder连接Sybase SQL Server的注意事项
首先, 确认Open Client 已经安装, 并正确配置, 且能够通过wisql 或Sybase Advantage查询SERVER端数据库中的数据.
PowerBuilder连接不上Sybase数据库, 主要原因有以下几点:
1) locales.dat 未正确设置
locales.dat 是Client端字符集设置文件, 一般在c:\sybase\locales\ 目录下。若操作系统平台是Windows 95, 则修改[NT]节下的相关内容;若操作系统平台是Windows 3.x, 则修改[win3]节下的相关内容。
a、应该有一行有关中国的国别设置:
locale = chs, us_english, iso_1
b、Client端的缺省字符集设置应该和Server端的字符集设置一致。
本例中将Client端的缺省字符集设为iso_1:
locale = default, us_english, iso_1
2) 重装SQL SERVER后未运行pbsyc.sql
pbsyc.sql用于在Sybase数据库中创建PowerBuilder所需的系统表和存储过程,它在PowerBuilder安装盘的server目录下。当PowerBuilder第一次连接数据库之前,或Sybase重装之后,需要在isql或SybaseAdvantage中,用"sa"登录到"master"数据库,运行pbsyc.sql . 另外,若连接的是Adaptive Server 11.5,需要先对pbsyc.sql文件做如下改动:
将"@@"替换为"@",但保留"@@error"和"@@isolation"
3) PowerBuilder是32位的,但Open Client是16位的,由于PowerBuilder需要通过Open Client实现与数据库的连接,所以Open Client必须与PowerBuilder同为32位,或同为16位。
4) 未安装Sybase的直连接口(Native Driver)或ODBC接口(ODBC Driver)PowerBuilder需要通过Native Driver或ODBC Driver才能访问数据库,所以若需要访问Sybase数据库,Native Driver或ODBC Driver是必需的。
5) Open Client中定义的Server Name与PowerBuilder应用中SQLCA.ServerName 设置的值不一致。
6) 未将PowerBuilder的DLL库的路径名加到系统搜索路径上由于PowerBuilder应用程序运行时需要一些DLL库的支持,所以需要将PowerBuilder的DLL库的路径加到系统搜索路径上。
下面是系统缺省的DLL库安装路径:
长文件名安装时:(PB6.0)
c:\Program Files\Powersoft\Shared\
长文件名安装时:(PB5.0)
c:\Program Files\Com