有鉴于经常有人提问ASA的发布问题,这里提供最终解决方案。

leio 2005-11-07 11:41:18
1、如果你需要单独安装ASA或和你的应用程序集成进行安装。请参考下贴
http://community.csdn.net/Expert/topic/4195/4195664.xml?temp=.5344049
该贴中的EMAIL长期有效,直到126信箱不能用为止。

2、如果你需要在你的程序中完成ASA的注册以及ODBC的注册,使用如下方法。
首先,将如下文件同你的应用程序放在同一目录内发布。
dbcon?.dll
dbctrs?.dll
dbctrs?.ini
dbeng?.exe
dblgen?.dll
dblib?.dll
dbodbc?.dll
dbodtr?.dll
dbserv?.dll
dbwtsp?.dll
其中的问号用ASA的版本替换,具体可以参考你开发用的电脑上ASA目录内的文件名。
之后,将如下的全局函数倒入你的PBL内。这个函数会完成ASA的注册,ODBC的注册,数据库的连接这三项功能。该函数需要三个参数,具体说明往下看。

$PBExportHeader$uf_set_db.srf
global type uf_set_db from function_object
end type

forward prototypes
global function integer uf_set_db (string as_dsn, string as_db_name, string as_db_parm)
end prototypes

global function integer uf_set_db (string as_dsn, string as_db_name, string as_db_parm);//注册SQLANYWHERE数据库
//这里可以在本程序内将SQLANYWHERE注册到操作系统内
//这里写的是PB9自带的ASA8的注册,如果你使用其他版本,只需要将8改为相应的版本即可。
Int answer,answer1,answer2,answer3,answer4,answer5,answer6,answer7
String ls_driver,ls_start,ls_location,ls_value,db_path,ls_path

ls_path = GetCurrentDirectory ( )
if right(ls_path,1) = '\' then
ls_path = mid(ls_path, 1, len(ls_path) - 1)
end if
ls_driver = ls_path + '\dbodbc8.dll'
ls_start = ls_path+'\dbeng8.exe'
if not (FileExists(ls_driver) AND FileExists(ls_start)) THEN
Messagebox('错误',ls_path+'目录中没有安装dbeng8.exe和dbodbc8.dll文件!',StopSign!)
return 0
else
RegistrySet("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\dbeng8.exe","path",RegString!,ls_path)
RegistrySet("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\dbeng8.exe","",RegString!,ls_start)
end if

//设置ODBC\ODBCINST.INI\ODBC DRIVERS
answer1=RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC DRIVERS','Adaptive Server Anywhere 8.0',RegString!,'Installed')
answer2=RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Adaptive Server Anywhere 8.0','Driver',RegString!,ls_driver)
answer3=RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Adaptive Server Anywhere 8.0','Setup',RegString!,ls_driver)
IF answer1=-1 OR answer2=-1 OR answer3=-1 THEN
Messagebox('错误','应用程序无法设置ODBC DRIVERS,运行不能继续!',StopSign!)
RETURN 0
END IF

db_path=ls_path+'\'+as_db_name+".db"

answer=RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\ODBC Data Sources',as_dsn,RegString!,'Adaptive Server Anywhere 8.0')
answer1=RegistrySet('HKEY_LOCAL_MACHINE\software\odbc\odbc.ini\'+as_dsn,'driver',RegString!,ls_driver)
answer2=RegistrySet('HKEY_LOCAL_MACHINE\software\odbc\odbc.ini\'+as_dsn,'start',RegString!,ls_start+' -d -Q -c1024')
answer3=RegistrySet('HKEY_LOCAL_MACHINE\software\odbc\odbc.ini\'+as_dsn,'autostop',RegString!,'yes')
answer4=RegistrySet('HKEY_LOCAL_MACHINE\software\odbc\odbc.ini\'+as_dsn,'DataBaseFile',RegString!,db_path)
answer5=RegistrySet('HKEY_LOCAL_MACHINE\software\odbc\odbc.ini\'+as_dsn,'DataBaseName',RegString!,as_db_name)
answer6=RegistrySet('HKEY_LOCAL_MACHINE\software\odbc\odbc.ini\'+as_dsn,'uid',RegString!,"dba")
answer7=RegistrySet('HKEY_LOCAL_MACHINE\software\odbc\odbc.ini\'+as_dsn,'pwd',RegString!,"sql")
if answer=-1 or answer1=-1 or answer2=-1 or answer3=-1 or answer4=-1 or answer5=-1 or answer6=-1 or answer7=-1 then
Messagebox('错误','应用程序无法设置ODBC SYSTEM DATA SOURCE,运行不能继续!',StopSign!)
RETURN 0
end if
sqlca.DBMS = "ODBC"
sqlca.dbparm = as_db_parm

connect;
if sqlca.sqlcode <> 0 then
MessageBox ("连接数据库错误", sqlca.sqlerrtext)
return 0
end if
return 1
end function

在你需要连接数据库的地方(通常应该是在你的APPLICATION中)写如下代码
//连接数据库
string ls_dbparm
int i
ls_dbparm = "ConnectString='DSN=xgprint;UID=dba;PWD=sql'"
//connectstring的具体写法不需要我多说了吧。如果这也清楚,请参考最基础的PB书籍。
//连接数据库
i = uf_set_db("xgprint","xgprint",ls_dbparm)
//这里调用uf_set_db,并传递三个参数
//参数一:odbc中的dsn名称
//参数二:数据库名称(不需要后缀名,函数内会加上".db",)
//参数三:connectstring
if i = 0 then
return
else
//继续下去,该干啥干啥去,能进行到这里,已经注册完毕并连上了数据库。
end if

上面这个函数如果你倒入有问题,也可以到leio88@126.com去下载里面的outlook对象(pb9)那个EMAIL,也就是
http://community.csdn.net/Expert/TopicView1.asp?id=4357848
这个贴中提到的对象,在里面的lib001.pbl中已经包含了这个函数,用法也写在application中了。密码:leio88(请勿修改)

...全文
389 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
leio 2005-11-14
  • 打赏
  • 举报
回复
.......
lzheng2001 2005-11-10
  • 打赏
  • 举报
回复
我整理一下,为了信息长期有效,我把你的贴子内的地址链接信息删除,并把相关内容放到这里.

1、如果你需要单独安装ASA或和你的应用程序集成进行安装,到如下信箱去收取,在草稿箱内。leio88@126.com
www.126.com
登录名:leio88
密码:leio88
请不要修改密码。

该贴中的EMAIL长期有效,直到126信箱不能用为止。

2、如果你需要在你的程序中完成ASA的注册以及ODBC的注册,使用如下方法。
首先,将如下文件同你的应用程序放在同一目录内发布。
dbcon?.dll
dbctrs?.dll
dbctrs?.ini
dbeng?.exe
dblgen?.dll
dblib?.dll
dbodbc?.dll
dbodtr?.dll
dbserv?.dll
dbwtsp?.dll
其中的问号用ASA的版本替换,具体可以参考你开发用的电脑上ASA目录内的文件名。
之后,将如下的全局函数倒入你的PBL内。这个函数会完成ASA的注册,ODBC的注册,数据库的连接这三项功能。该函数需要三个参数,具体说明往下看。

$PBExportHeader$uf_set_db.srf
global type uf_set_db from function_object
end type

forward prototypes
global function integer uf_set_db (string as_dsn, string as_db_name, string as_db_parm)
end prototypes

global function integer uf_set_db (string as_dsn, string as_db_name, string as_db_parm);//注册SQLANYWHERE数据库
//这里可以在本程序内将SQLANYWHERE注册到操作系统内
//这里写的是PB9自带的ASA8的注册,如果你使用其他版本,只需要将8改为相应的版本即可。
Int answer,answer1,answer2,answer3,answer4,answer5,answer6,answer7
String ls_driver,ls_start,ls_location,ls_value,db_path,ls_path

ls_path = GetCurrentDirectory ( )
if right(ls_path,1) = '\' then
ls_path = mid(ls_path, 1, len(ls_path) - 1)
end if
ls_driver = ls_path + '\dbodbc8.dll'
ls_start = ls_path+'\dbeng8.exe'
if not (FileExists(ls_driver) AND FileExists(ls_start)) THEN
Messagebox('错误',ls_path+'目录中没有安装dbeng8.exe和dbodbc8.dll文件!',StopSign!)
return 0
else
RegistrySet("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\dbeng8.exe","path",RegString!,ls_path)
RegistrySet("HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\dbeng8.exe","",RegString!,ls_start)
end if

//设置ODBC\ODBCINST.INI\ODBC DRIVERS
answer1=RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC DRIVERS','Adaptive Server Anywhere 8.0',RegString!,'Installed')
answer2=RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Adaptive Server Anywhere 8.0','Driver',RegString!,ls_driver)
answer3=RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Adaptive Server Anywhere 8.0','Setup',RegString!,ls_driver)
IF answer1=-1 OR answer2=-1 OR answer3=-1 THEN
Messagebox('错误','应用程序无法设置ODBC DRIVERS,运行不能继续!',StopSign!)
RETURN 0
END IF

db_path=ls_path+'\'+as_db_name+".db"

answer=RegistrySet('HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\ODBC Data Sources',as_dsn,RegString!,'Adaptive Server Anywhere 8.0')
answer1=RegistrySet('HKEY_LOCAL_MACHINE\software\odbc\odbc.ini\'+as_dsn,'driver',RegString!,ls_driver)
answer2=RegistrySet('HKEY_LOCAL_MACHINE\software\odbc\odbc.ini\'+as_dsn,'start',RegString!,ls_start+' -d -Q -c1024')
answer3=RegistrySet('HKEY_LOCAL_MACHINE\software\odbc\odbc.ini\'+as_dsn,'autostop',RegString!,'yes')
answer4=RegistrySet('HKEY_LOCAL_MACHINE\software\odbc\odbc.ini\'+as_dsn,'DataBaseFile',RegString!,db_path)
answer5=RegistrySet('HKEY_LOCAL_MACHINE\software\odbc\odbc.ini\'+as_dsn,'DataBaseName',RegString!,as_db_name)
answer6=RegistrySet('HKEY_LOCAL_MACHINE\software\odbc\odbc.ini\'+as_dsn,'uid',RegString!,"dba")
answer7=RegistrySet('HKEY_LOCAL_MACHINE\software\odbc\odbc.ini\'+as_dsn,'pwd',RegString!,"sql")
if answer=-1 or answer1=-1 or answer2=-1 or answer3=-1 or answer4=-1 or answer5=-1 or answer6=-1 or answer7=-1 then
Messagebox('错误','应用程序无法设置ODBC SYSTEM DATA SOURCE,运行不能继续!',StopSign!)
RETURN 0
end if
sqlca.DBMS = "ODBC"
sqlca.dbparm = as_db_parm

connect;
if sqlca.sqlcode <> 0 then
MessageBox ("连接数据库错误", sqlca.sqlerrtext)
return 0
end if
return 1
end function

在你需要连接数据库的地方(通常应该是在你的APPLICATION中)写如下代码
//连接数据库
string ls_dbparm
int i
ls_dbparm = "ConnectString='DSN=xgprint;UID=dba;PWD=sql'"
//connectstring的具体写法不需要我多说了吧。如果这也清楚,请参考最基础的PB书籍。
//连接数据库
i = uf_set_db("xgprint","xgprint",ls_dbparm)
//这里调用uf_set_db,并传递三个参数
//参数一:odbc中的dsn名称
//参数二:数据库名称(不需要后缀名,函数内会加上".db",)
//参数三:connectstring
if i = 0 then
return
else
//继续下去,该干啥干啥去,能进行到这里,已经注册完毕并连上了数据库。
end if

上面这个函数如果你倒入有问题,也可以到leio88@126.com去下载里面的outlook对象(pb9)那个EMAIL
lzheng2001 2005-11-10
  • 打赏
  • 举报
回复
leio随便回复一下吧,没有你的回复不能把这个帖子提交FAQ呀

霖湘凝 2005-11-09
  • 打赏
  • 举报
回复
好人啊,赞~!
lzheng2001 2005-11-08
  • 打赏
  • 举报
回复
对楼主的敬仰之情,犹如滔滔江水 ...
ribut9225 2005-11-08
  • 打赏
  • 举报
回复
支持
herrick 2005-11-08
  • 打赏
  • 举报
回复
谢谢楼主了,建议揭帖后,提交到FAQ,
这样的帖子,真应该多点!
嘘嘘兔 2005-11-08
  • 打赏
  • 举报
回复
感激感激
zwfhome1 2005-11-08
  • 打赏
  • 举报
回复
谢谢
lmby 2005-11-08
  • 打赏
  • 举报
回复
up
j9dai 2005-11-08
  • 打赏
  • 举报
回复
好贴是要顶滴!
Libra_Chen 2005-11-08
  • 打赏
  • 举报
回复
好东西。8过偶一直用的access和sqlserver,没别的原因,中文看的舒服,霍霍~

754

社区成员

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

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