新闻 | 天津 | 民生 | 广电 | 津抖云 | 微视 | 读图 | 文娱 | 体育 | 图事 | 理论 | 志愿 | 专题 | 工作室 | 不良信息举报
教育 | 健康 | 财经 | 地产 | 天津通 | 旅游 | 时尚 | 购物 | 汽车 | IT | 亲子 | 会计 | 访谈 | 场景秀 | 发布系统

"津云"客户端
  您当前的位置 :北方网 > IT浪潮 > 北方学院 > 软件文库 > 其它 正文
关键词:

在PB中用代码配置ODBC


http://www.enorth.com.cn  2001-03-01 00:00

  在编写PB(PowerBuild)的Windows应用程序中,常常涉及到数据库的配置,特别是网络数据库的配置,通常基于网络的应用程序发行需要手工设置ODBC。本文介绍一种代码配置的方法可以免去在进行单机或网络数据库应用程序时进行手工配置ODBC的烦琐。PowerBuilder是功能强大的客户端开发工具,它的优势在于数据库应用程序的开发,所以绝大部分应用必须与数据库管理系统配合起来才能运行。OBDC是一种编程接口,它能使应用程序访问以结构化查询语言(SQL)作为数据访问标准的数据库管理系统。PB与数据库的连接可以通过ODBC接口实现,在ODBC中配置好数据源后,便可在程序代码中连接数据库并对数据库进行各种操作了。配置ODBC的方法主要有三种:手工配置、代码自动配置和通过安装程序(如InstallShield等专业安装程序)自动配置。大部分PB资料对手工配置ODBC均作了介绍,在这里主要介绍在代码中进行ODBC的配置的方法。第三种方法可以参考InstallShield等软件的使用说明。

  

  原 理

  

  Windows中所有的ODBC数据源在系统注册表中都有记载,因此只要编写相应的代码对注册表中的项目进行相应的修改即可。Windows中与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 记录各种数据源的详细信息。

  

  只要打开Windows 95(Windows 98、Windows NT4或Windows 2000)菜单“开始”,然后单击“运行”,输入Regedit运行注册表程序,在注册表中选择左边的树结构,查找上述相应的选项,就可以看到其中的详细信息。

  

  我们只要在代码中对这些键进行配置,便可达到配置ODBC的目的。

  

  实 现

  

  下面以PowerBuilder 7.0 内置的Sybase SQL Anywhere 6.0数据库为例介绍ODBC的代码配置方法。

  

  1、打开注册表,找到数据库驱动程序及相关文件

  

  首先找到相应的数据库驱动程序,这些文件可以在注册表的HKEY_LOCAL_MACHINE\Software

  

  \ODBC\ODBCINST.INI下相应键中找到。如Sybase SQL Anywhere 6.0为dbeng60.exe,Wod60t.dll,以及一些其他相关的动态链接库,此例中为Dbl60t.dll、Wl60ent.dll、Wtr60t.dll、Wodbc.gid和Wtr60t.dll。这些文件必须与最终的可执行程序一起安装到用户的计算机上。它们可以与应用程序放在一起,也可以放在一个特定的目录下(本例为Windows 98的System目录下)。在调试时可先将这些文件复制到指定的目录下。

  

  2、在应用程序中用PB脚本代码配置ODBC

  

  在应用的Open事件中对ODBC配置的脚本代码如下:

  

  Ulong ul_num;

  

  Int li_sysdir,li_dir1,li_dir2,li_dir3,li_dir4,li_dir5,li_app;

  

  String ls_driver,ls_start,ls_location,ls_apppath,ls_dbpath,ls_odbcstr;

  

  //获取操作系统的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

  

  //判断Sybase SQL Anywhere6.0的驱动程序是否正确安装

  

  ls_driver = ls_location+′\WOD60T.DLL′

  

  ls_start = ls_location+′\dbeng60.EXE′

  

  IF NOT (FileExists(ls_driver) AND FileExists(ls_start)) THEN

  

  Messagebox(′错误′,′系统中没有安装SQL Anywhere 6.0的驱动程序,系统将终止运行!′,StopSign!);

  

  RETURN;

  

  END IF

  

  //设置ODBC\ODBCINST.INI\ODBC DRIVERS

  

  li_sysdir=RegistrySet(′HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBCDRIVER′,′Sybase SQL Anywhere 6.0′,RegString!,′Installed′);

  

  IF li_sysdir = -1 THEN

  

  Messagebox(′错误′,′应用程序无法设置ODBC DRIVERS,系统将终止运行!′,StopSign!);

  

  RETURN;

  

  END IF

  

  //设置ODBC\ODBCINST.INI

  

  li_dir1=RegistrySet(′HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Sybase SQL Anywhere 6.0′,′CPTimeout′,RegString!,′not pooled′)

  

  li_dir2=RegistrySet(′HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Sybase SQL Anywhere 6.0′,′Driver′,RegString!,ls_driver)

  

  li_dir3=RegistrySet(′HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Sybase SQL Anywhere 6.0′,′Setup′,RegString!,ls_driver)

  

  IF li_dir1=-1 OR li_dir2=-1 OR li_dir3=-1 THEN

  

  Messagebox(′错误′,′应用程序无法设置ODBCINST.INI,系统将终止运行!′,StopSign!);

  

  RETURN;

  

  END IF

  

  //设置ODBC DATA SOURCE(MyDataSource为数据源名)

  

  li_sysdir=RegistrySet(′HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC Data Sources′,′MyDataSource′,RegString!,′Sybase SQL Anywhere 6.0′);

  

  IF li_sysdir=-1 THEN

  

  Messagebox(′错误′,′应用程序无法设置ODBC DATA SOURCE,系统将终止运行!′,StopSign!);

  

  RETURN;

  

  END IF

  

  //获取应用程序的安装路径(MyApp为应用程序安装到用户计算机上后在注册表中注册的应用程序名,MyDatabase.db为应用程序的数据库名,与应用程序在同一目录下,MyDataSource为数据源名)

  

  li_app=RegistryGet(″KYEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\MyApp″,″Path″,RegString!ls_apppath)

  

  IF li_app=-1 THEN

  

  Messagebox(′错误′,′应用程序无法获取程序安装路径名,系统将终止运行!′,StopSign!);

  

  RETURN

  

  ELSE

  

  ls_dbpath=ls_apppath+′MyDatabase.db′;

  

  END IF

  

  //设置ODBC.INI

  

  li_dir1=RegistrySet(′HKEY_current_user\software\odbc\odbc.ini\MyDataSource′,′driver′,RegString!,ls_driver);

  

  li_dir2=RegistrySet(′HKEY_current_user\software\odbc\odbc.ini\MyDataSource′,′start′,RegString!,ls_start);

  

  li_dir3=RegistrySet(′HKEY_current_user\software\odbc\odbc.ini\MyDataSource′,′autostop′,RegString!,′yes′);

  

  li_dir4=RegistrySet(′HKEY_current_user\software\odbc\odbc.ini\MyDataSource′,′DataBaseFile′,RegString!,ls_db_path);

  

  li_dir5=RegistrySet(′HKEY_current_user\software\odbc\odbc.ini\MyDataSource′,′DataBaseName′,RegString!,′MyDatabase′);

  

  IF li_dir1=-1 OR li_dir2=-1 OR li_dir3=-1 OR li_dir4=-1 OR li_dir5=-1 THEN

  

  Messagebox(′错误′,′应用程序无法设置ODBC.INI,系统将终止运行!′,StopSign!);

  

  RETURN

  

  END IF

  

  ls_odbcstr=′dsn=MyDataSource;databasename=MyDatabase;databasefile=′+ls_dbpath;

  

  sqlca.dbms=′odbc′;

  

  sqlca.databse=′MyDatabase′;

  

  sqlca.dbparm=″connectstring=′ ″+ls_odbcstr+″;uid=dba;pwd=sql′ ″;

  

  connect using sqlca;

  

  open(w_frame);

  

  该程序在Windows 98 中用PowerBuilder 7.0 调试通过。

  

编辑 超级管理员 null
[进入IT论坛]
请您文明上网、理性发言并遵守相关规定,在注册后发表评论。
 北方网精彩内容推荐
无标题文档
天津民生资讯
天气交通 天津福彩 每月影讯 二手市场
空气质量 天津股票 广播节目 二手房源
失物招领 股市大擂台 天视节目 每日房价
热点专题
北京奥运圣火传递和谐之旅 迎奥运 讲文明 树新风
解放思想 干事创业 科学发展 同在一方热土 共建美好家园
2008天津夏季达沃斯论坛 《今日股市观察》视频
北方网网络相声频道在线收听 2008高考招生简章 复习冲刺
天津自然博物馆馆藏精品展示 2008年天津中考问题解答
带你了解08春夏服饰流行趋势 完美塑身 舞动肚皮舞(视频)
C-NCAP碰撞试验—雪佛兰景程 特殊时期善待自己 孕期检查
热点新闻排行 财经 体育 娱乐 汽车 IT 时尚 健康 教育

Copyright (C) 2000-2021 Enorth.com.cn, Tianjin ENORTH NETNEWS Co.,LTD.All rights reserved
本网站由天津北方网版权所有