ehxz 发表于 2007-6-26 12:50:38

[转帖]问:Powerbuilder中怎样实现用代码配置ODBC?

答: Powerbuilder中实现用代码配置ODBC:<br/><br/>一、 引言<br/>Powerbuilder是客户端的开发工具,在实际应用中必须与数据库管理系统配合起来才能运行应用程序,它与数据库的连接可以通过ODBC接口实现。在ODBC中配置好数据源后,便可在程序代码中连接数据库并对数据库进行各种操作了。目前的大部分PB参考书都只介绍了ODBC的手工配置方法,而没有介绍如何在代码中进行ODBC的配置,这样当程序最终完成并分发到用户手中后,还需要为用户配置ODBC,显得既麻烦又不符合专业软件的要求。那么,怎样才能在代码中实现对ODBC的配置呢?其实,Windows中所有的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的目的。<br/><br/>二、在代码中配置ODBC的实现<br/>下面以Powerbuilder内置的Sybase SQL Anywhere5.0数据库为例介绍ODBC的代码配置方法。<br/>1、 找出数据库驱动程序及相关文件<br/>首先找到相应的数据库驱动程序,这些文件可以在注册表的HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI下相应键中找到。如Sybase SQL Anywhere5.0为dbeng50.EXE,WOD50T.DLL,以及一些其他相关的动态链接库,此例中为Dbl50t.dll,Wl50ent.dll,Wtr50t.dll,Wodbc.gid,Wtr50t.dll。这些文件必须与最终的可执行程序一起安装到用户的计算机上,可以与应用程序放在一起,也可以放在一个特定的目录下(本例为Windows的system目录下)。在调试时可先将这些文件复制到指定的目录下。<br/>2、 在程序中用代码配置ODBC<br/>在应用的open事件中对ODBC配置的代码如下:<br/>Ulong ul_num<br/>Int answer,answer1,answer2,answer3,answer4,answer5,ansapp<br/>String ls_driver,ls_start,ls_location,apppath,db_path,odbcstr<br/>//获取操作系统的system目录,并保存到ls_location变量<br/>answer=RegistryGet(“KYEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup”,”SysDir”,RegString!ls_location)<br/>IF answer=-1 THEN<br/>Messagebox(‘错误’,’应用程序无法获取Windows的系统目录,系统统将终止运行!’,Stopsign!)<br/>RETURN<br/>END IF<br/>//判断Sybase SQL Anywhere5.0的驱动程序是否正确安装<br/>ls_driver=ls_location+’\WOD50T.DLL’<br/>ls_start=ls_location+’\dbeng50.EXE’<br/>IF NOT (FileExists(ls_driver) AND FileExists(ls_start)) THEN<br/>Messagebox(‘错误’,’系统中没有安装SQL Anywhere的驱动程序,系统将终止运行!’,StopSign!)<br/>RETURN<br/>END IF<br/>//设置ODBC\ODBCINST.INI\ODBC DRIVERS<br/>answer=RegistrySet(‘ HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBCDRIVER’,’Sybase SQL Anywhere 5.0’,RegString!,’Installed’)<br/>IF answer=-1 THEN<br/>Messagebox(‘错误’,’应用程序无法设置ODBC DRIVERS,系统将终止运行!’,StopSign!)<br/>RETURN<br/>END IF<br/>//设置ODBC\ODBCINST.INI\<br/>answer1=RegistrySet(‘ HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Sybase SQL Anywhere 5.0’,’CPTimeout’,RegString!,’not pooled’)<br/>answer2=RegistrySet(‘ HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Sybase SQL Anywhere 5.0’,’Driver’,RegString!,ls_driver)<br/>answer3=RegistrySet(‘ HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Sybase SQL Anywhere 5.0’,’Setup’,RegString!,ls_driver)<br/>IF answer1=-1 OR answer2=-1 OR answer3=-1 THEN<br/>Messagebox(‘错误’,’应用程序无法设置ODBCINST.INI,系统将终止运行!’,StopSign!)<br/>RETURN<br/>END IF<br/>//设置ODBC DATA SOURCE名称(anysql为数据源名)<br/>answer=RegistrySet(‘ HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC Data Sources’,’anysql’,RegString!,’Sybase SQL Anywhere 5.0’)<br/>IF answer=-1 THEN<br/>Messagebox(‘错误’,’应用程序无法设置ODBC DATA SOURCE名称,系统将终止运行!’,StopSign!)<br/>RETURN<br/>END IF<br/>//获取应用程序的安装路径(ybinput为应用程序安装到用户计算机上后在注册表中注册的应用程序名,yibiao.db为应用程序的数据库名,与应用程序在同一目录下,anysql为数据源名)<br/>ansapp=RegistryGet(“KYEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\ybinput”,”Path”,RegString!app_path)<br/>IF ansapp=-1 THEN<br/>Messagebox(‘错误’,’应用程序无法获取安装路径名,系统将终止运行!’,StopSign!)<br/>RETURN<br/>ELSE<br/>db_path=app_path+’yibiao.db’<br/>END IF<br/>//设置ODBC.INI的细节<br/>answer1=RegistrySet(‘HKEY_current_user\software\odbc\odbc.ini\anysql’,’driver’,RegString!,ls_driver)<br/>answer2=RegistrySet(‘HKEY_current_user\software\odbc\odbc.ini\anysql’,’start’,RegString!,ls_start)<br/>answer3=RegistrySet(‘HKEY_current_user\software\odbc\odbc.ini\anysql’,’autostop’,RegString!,’yes’)<br/>answer4=RegistrySet(‘HKEY_current_user\software\odbc\odbc.ini\anysql’,’DataBaseFile’,RegString!,db_path)<br/>answer5=RegistrySet(‘HKEY_current_user\software\odbc\odbc.ini\anysql’,’DataBaseName’,RegString!,’yibiao’)<br/>IF answer1=-1 OR answer2=-1 OR answer3=-1 OR answer4=-1 OR answer5=-1 THEN<br/>Messagebox(‘错误’,’应用程序无法设置ODBC.INI细节,系统将终止运行!’,StopSign!)<br/>RETURN<br/>END IF<br/>odbcstr=’dsn=anysql;databasename=yibiao;databasefile=’+db_path<br/>sqlca.dbms=’odbc’<br/>sqlca.databse=’yibiao’<br/>sqlca.dbparm=”connectstring=’”+odbcstr+”;uid=dba;pwd=sql’”<br/>connect using sqlca;<br/>open(w_main) <p>&nbsp;</p><!--Element not supported - Type: 8 Name: #comment-->
页: [1]
查看完整版本: [转帖]问:Powerbuilder中怎样实现用代码配置ODBC?

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com