有鉴于经常有人提问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(请勿修改)