请问怎样在程序中配置ODBC!(急!!!)(我原来配置好过,但就是连不上anywhere数据库!)

yahooyzy 2003-08-30 09:56:32
RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC Drivers","Adaptive Server Anywhere 7.0",RegString!, "Installed")
RegistrySet("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Adaptive Server Anywhere 7.0","Driver",RegString!, ls_directory + "win32\dbodbc7.dll")
Registryset("HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Adaptive Server Anywhere 7.0","Setup",RegString!, ls_directory + "win32\dbodbc7.dll")

RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources", "deposit", RegString!, "Adaptive Server Anywhere 7.0")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\deposit", "DataBaseFile", RegString!, ls_directory + "deposit.db")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\deposit", "DataBaseName", RegString!, "deposit")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\deposit", "Driver", RegString!, ls_directory + "win32\dbodbc7.dll")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\deposit", "PWD", RegString!, "sql")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\deposit", "Start", RegString!, ls_directory + "win32\dbeng7.exe -c 8m")
RegistrySet("HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\deposit", "UID", RegString!, "dba")
...全文
261 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
freedom2001 2004-02-12
  • 打赏
  • 举报
回复
建ODBC还是放到安装包里的好,否则你还要为了是否有相应的ODBC加入验证代码
Awang_126 2004-02-12
  • 打赏
  • 举报
回复
你可以先在PB中建个数据源,连接成功以后在到注册表中看它注册了哪些项,然后再写连接程序代码:)
chengjian 2004-01-16
  • 打赏
  • 举报
回复
是的,一楼的OK
yangbit 2004-01-15
  • 打赏
  • 举报
回复
up
liaolwj 2003-08-30
  • 打赏
  • 举报
回复
/******************************************************************************************
** 函数名称:f_database_conn_odbc
** 描述: 建立本地数据库服务连接
** 返回值: 连接失败---返回 -1
** 成功--- 0
**
******************************************************************************************/

///////////////////////////
String ls_curdir
n_lqf_public_function ln_func
ls_Curdir=Space(256)
ls_curdir = ln_func.uf_directory_getcurrent()
int intRtn,intRtn1,intRtn2,intRtn3,intRtn4
string strDriver,strDataBase,strLastUser,strPwd
GetEnvironment(ge_env)

strDriver = ls_curdir + "\dbodbc7.dll"
if not FileExists(strDriver) then
messagebox("Error","File not exists!")
return -1
end if
string strLocation
choose case ge_env.ostype
case windows!
intRtn = RegistryGet("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup",&
"SysDir",RegString!,strLocation)
if intRtn = -1 then
messagebox("Error","Can not accept System list!")
return -1
end if
strDriver = strLocation + "\dbodbc7.dll"
case windowsnt!
intRtn = RegistryGet("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion",&
"systemroot",RegString!,strLocation)
if intRtn = -1 then
messagebox("Error","Can not accept System list!")
return -1
end if
strDriver = strLocation + "\system32\dbodbc7.dll"
end choose
if not FileExists(strDriver) then
messagebox("Error","File not exists!")
return -1
end if

strDataBase = ProfileString("SPSCERP.INI","ODBC","database"," ")
strDataBase = ls_curdir + '\' + strDataBase
strLastUser = ProfileString("SPSCERP.INI","ODBC","uid"," ")
strPwd = ProfileString("SPSCERP.INI","ODBC","pwd"," ")
intRtn1 = RegistrySet("HKEY_CURRENT_USER\Software\odbc\odbc.ini\gdmc",&
"Driver",RegString!,strDriver)
intRtn2 = RegistrySet("HKEY_CURRENT_USER\Software\odbc\odbc.ini\gdmc",&
"Database",RegString!,strDataBase)
intRtn3 = RegistrySet("HKEY_CURRENT_USER\Software\odbc\odbc.ini\gdmc",&
"UID",RegString!,strLastUser)
intRtn4 = RegistrySet("HKEY_CURRENT_USER\Software\odbc\odbc.ini\gdmc",&
"PWD",RegString!,strPwd)
if intRtn1<0 or intRtn2<0 or intRtn3<0 or intRtn4<0 then
messagebox("Error","RegistrySet error")
return -1
end if
SetProfileString(ls_curdir + "\SPSCERP.INI","ODBC","DBMS","ODBC")
string strDBParm
strDBParm = "ConnectString='DSN=" + "gdmc" + ";UID=dba;PWD=sql',CommitOnDisconnect='No'"
SetProfileString(ls_curdir + "\SPSCERP.INI","ODBC","DBParm",strDBParm)

string ls_dbms,ls_dbparm
integer li_count
long ll_interval

ls_dbms = profilestring('.\SPSCERP.INI','ODBC','DBMS','ODBC')
ls_dbparm = profilestring('.\SPSCERP.INI','ODBC','DBParm','NONE')
SQLCA.DBMS = ls_dbms
SQLCA.DBParm = ls_dbparm
SQLCA.AutoCommit = False

///////////////////////////

//sqlca = create transaction
//SQLCA.DBMS = ProfileString (gs_path + "SPSCERP.INI", 'ODBC', "dbms", "")
//SQLCA.DBParm = profilestring(gs_path + "SPSCERP.INI",'ODBC','DBParm','')
//SQLCA.AutoCommit = False

//if pos(lower(sqlca.dbparm),'pbcatalogowner') < 1 then
// sqlca.dbparm += ", PBCatalogOwner = '"+sqlca.logid+"'"
//end if
connect using sqlca;

if sqlca.sqlcode <> 0 then
MessageBox (gst_globval.title,"无法连接到本地数据库!~t~n" + sqlca.sqlerrtext+"~t~n~t~n请检查系统的配置文件是否被非法修改!~t~n然后重起系统!~t~n" +gst_globval.inifile)
return -1
else
return 0
end if
haisha 2003-08-30
  • 打赏
  • 举报
回复
(转贴)

如何发布独立的POWERBUILDER应用

一.前言
PowerBuilder(PB)是SYBASE 公司的下属公司Powersoft公司推出的新一代数据库应用开发工具,由于其功能强大,开发快速及支持多平台等而颇受广大编程技术人员的欢迎。随着有关PB的应用推广使用,相关资料也纷纷面世,同时PowerSoft为适应开发的需要也不断的推出PB的更新版本,PB作为第四代语言的数据库开发工具在开发工具市场中占有相当高的比例。
在使用PB进行开发的过程中,不少开发者在感受PB带来的快速,强大的功能愉悦的同时,也深感在发布应用时PB存在的不便之处:首先PB在编译完成后的执行文件不能独立运行,必须包含PB的运行时库文件以及数据库驱动文件,网络驱动文件等。其次,在包含这些文件时必须十分清楚各个运行时库文件的用途,不同数据库对应的数据驱动的动态链接库文件集等,但往往这方面的资料却非常难得。因而一个本来非常精简的PB应用在打包发布后却显得非常臃肿。
本文旨在讲叙针对在Windows95/98下用PB6.0开发的,使用Powersoft的SQL Aaywhere数据库作为本地数据库的应用的发布过程,阐明如何为PB的应用发布“减肥”,特别是要说明的是如何将SQL Anywhere 数据库精简后包含在应用当中,并如何配置其数据源,而不用再另外安装SQL Aaywhere作为本地数据库的驱动。
一般地说发布一个PB应用除应用程序部件本身外还应该包含如下文件及进行相关操作:
1. PowerBuilder运行时动态链接库( Runtime Library )。
2. 数据库接口:一方面包括PB提供的数据库专用接口或ODBC接口程序,另一方面包括不同数据库厂商提供的ODBC数据库驱动程序。
3. ODBC数据源的配置。
4. 如果是采用C/S方式,包含数据库厂商的Client端,例如SYBASE公司的Open Client 及ORALCLE公司的SQL*Net。
就本文而言,我们只重点讨论1-3项,现分别阐述如下:
二.PowerBuilder运行时动态链接库( Runtime Library )。
不同版本的PB所需要的运行时动态链接库文件不尽相同,但库名有相似的地方,这些DLL都必须包含在应用程序目录或系统目录当中,对于Windows下32位的应用程序,必须一起发行的运行时库是PBVM60.DLL,其他部件可选。对于Windows下16位的应用程序,必须一起发行的运行时库是PBVM60W.DLL。总之,PB6.0版本相对于PB5.0及以前版本,运行时库的数量减少了很多,这也有利于开发人员对应用程序打包发行。现以PB6.0运行在32位WINDOWS95/98为例说明,详细解释见下表1-1:

序号 文件 用途 备注
1 PBVM60.DLL PowerBuilder 虚拟机 必需
2 PBDWE60.DLL DataWindow 数据窗口引擎 可选
3 PBRTC60.DLL Rich Text Control管道,超文本控件 可选
4 PBTRA60.DLL DLL used for tracing db calls数据库访问跟踪 可选
表1-1

三. 数据库接口。
所有数据库接口文件及驱动程序必需放在应用程序目录或系统目录中。
1. PB专用数据库接口及ODBC数据库接口。
在WINDOWS95/98下用户可以根据自己采用的不同数据库在发布应用程序时包含下列接口文件,见下表2-1所示。

序号 数据库 接口文件
1 Powersoft ODBC Interface PBODB60.DLL,PBODB60.INI
2 INFORMIX I-Net 5 PBIN560.DLL
3 INFORMIX I-Net 7 PBIN760.DLL
4 Microsoft SQL Server 4.x DB-Lib PBSYB60.DLL,PBDBL60.DLL
5 Microsoft SQL Server 6.0 PBMSS60.DLL
6 Oracle Version 7.1 PBO7160.DLL
7 Oracle Version 7.2 PBO7260.DLL
8 Oracle Version 7.3 PBO7360.DLL
9 IBM databases PBIBM60W.DLL
10 Sybase Information CONNECT DB2 Gateway PBMDI60.DLL,PBDBL60.DLL
11 Sybase Net-Gateway for DB2 PBNET60.DLL,PBDBL60.DLL
12 Sybase SQL Server 4.x DB-Lib PBSYT60.DLL,PBDBT60.DLL
13 Sybase SQL Server 10.x and 11.x CT-Lib PBSYC60.DLL

表2-1

2. 第三方厂商提供的ODBC数据库驱动程序。
如果用户的数据库采用ODBC数据库驱动方式,这种数据库的连接方式较专用数据库接口复杂,并且连接使用的效率也比专用数据库低。因此除要了包含上面讲到的Powersoft ODBC Inerface 接口文件外,即PBODB60.DLL及PBODB60.INI两个文件,还必需在WINDOWS目录中存在ODBCINST.INI及ODBC.INI 文件 及 Microsoft ODBC 驱动程序及相关DLL。另外,就是要包含各个数据库厂商提供或支持的ODBC数据库驱动程序。下面列出 部分数据库厂商的驱动程序如下表2-2:

序号 数据库 驱动程序
1 Text PBTXT09.DLL,PBTXT09.HLP,PBTXT12.DLL,PBTXT12.HLP
2 DB2 PBDB209.DLL,PBDB209.DLL,PBDB212.DLL,PBDB212.DLL
3 Btrieve PBBTR09.DLL,WBTRCALL.DLL,PBBTR09.HLP,
PBBTR12.DLL,PBBTR12.HLP
4 dBASE PBDBF09.DLL,PBDBF09.HLP,PBDBF12.DLL,PBDBF12.HLP
5 Paradox 4/5 PBIDP09.DLL,PBBAS09.DLL,PBDBC09.DLL,PBFLT09.DLL
PBUTL09.DLL,PBIDP09.HLP,IVTRN09.DLL,IVPB.LIC
6 SQL Anywhere WOD50W.DLL,WL50EN.DLL,WODBC.HLP,WODBC.HLP WOD50T.DLL,WL50ENT.DLL,WTR50T.DLL,WODBC.HLP
表2-2

四. ODBC数据源配置。
在包含以上文件之后,还必需对使用ODBC数据库方式的应用进行ODBC数据源的配置,以便在安装完毕后应用程序可以直接访问用户数据源。以下介绍的数据源配置原理及方法由于涉及到修改系统注册表,可以使用手工方式实现,也可以在制作应用程序的安装盘时在安装步骤中设置好。ODBC数据源的配置涉及到微软的ODBC驱动程序及相关动态链接库。此部件可以在安装WINDOWS95/98时作为系统的一部分装入机器,并在“控制面板”中可以找到“32 bit ODBC(32位ODBC)”数据源管理器项并使用其进行操作。
下面以使用SQL Anywhere 数据库创建的用户数据库为例来说明如何使用数据源管理器进行ODBC的手工配置及如何在安装程序中自动修改系统注册表,其他数据库可以参考SQL Anywhere 进行操作。首先列出SQL Anywhere 数据库必需的最精简的文件清单。见表3-1:

序号 文件 作用 类型
1 WOD50T.DLL SQL Anywhere ODBC 驱动 ODBC驱动
2 DBL50T.DLL 数据库接口动态链接库 数据库文件
3 WL50ENT.DLL 数据库接口的英文字符串
4 WTR50T.DLL ODBC翻译动态链接库
5 WODBC.HLP 配置ODBC的帮助文件
6 DBENG50.EXE 数据库引擎

表3-1

1.使用数据源管理器配置用户数据源。
1.1. 安装SQL Anywhere数据库驱动程序,使数据源管理器中的"ODBC驱动程序"页增加一行SQL Anywhere的驱动说明。
1.2. 在"用户DSN"一页选择"添加",然后选择SQL Anywhere数据源,出现数据源的配置信息表后,将数据源名(Data Source Name),数据库名(Database File),用户ID号(User ID),用户密码(Password)等信息添齐,选择"OK"确认,此时在"用户数据源"的窗口中就会增加用户的数据库的ODBC驱动,选择"确认"后退出数据源管理器。

进行以上两步以后重新启动系统,用户就可以在运行应用程序后使用SQL Anywhere数据库。
2. 修改INI文件及系统注册表配置用户数据源。
(以下注:C:\TestApp为用户应用程序目录,C:\TestApp\Sqlany50为应用程序包含的SQL Anywhere数据库驱动文件目录,TestDB.DB为用户数据库。)
1.1修改ODBCINST.INI文件:
在[ODBC Drivers] 节中增加一行:
Sybase SQL Anywhere 5.0 = Installed
增加一节[Sybase SQL Anywhere 5.0] 并在此节中加入:
Setup = C:\TestApp\Sqlany50\WOD50W.DLL
Driver = C:\TestApp\Sqlany50\WOD50W.DLL
1.2修改ODBC.INI文件:
在[ODBC Data Sources]节中增加一行:
TestDB = Sybase SQL Anywhere 5.0
增加一节[TestDB]并在此节中加入:
Driver = C:\TestApp\Sqlany50\WOD50W.DLL




1. 3修改系统注册表:
在HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Source下,增加字符串键值:
名称 数值
TestDB "Sybase SQL Anywhere 5.0"

在HKEY_CURRENT_USER\Software\ODBC\ODBC.INI下,增加主键:TestDB,并分别加入键值如下:
名称 数值
Autostop "yes"
Databasefile "C:\TestApp\TestDB.DB
Databasename "TestDB"
Driver "C:\TestApp\Sqlany50\WOD50T.DLL"
PWD "sql"
Start "C:\TestApp\Sqlany50\dbeng50.exe -d -c1024"
UID "dba"

在用户的安装程序中将以上步骤加入,可以使用户的应用程序在不必另安装SQL Anywhere数据库驱动也能直接访问用户数据源,这也是讲述这一部分内容的目的,即要将SQL Anywhere数据库的必需文件包含发行,并在安装过程中修改INI文件及系统注册表配置数据源,从而实现用户应用程序独立发布。
当然,以上提及的仅仅是针对性很强的用户环境,其他版本的PB发行可以参考以上所述进行,希望本文能给读者带来一点点启发或价值,由于作者撰稿仓促难免有疏漏之处,恳请读者谅解。

752

社区成员

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

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