在PB中用代码配置ODBC

 

转一篇文章给你看看!可能有帮助的  

  在PB中用代码配置ODBC  

  (作者:王翔 2000年07月19日   10:58)  

   

  在编写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   调试通过。

你可能感兴趣的:(数据库驱动程序,powerbuilder,sybase,windows,数据库,sql)