CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  PowerBuilder >  数据库相关

特殊的数据库连接问题!!!

楼主panss8542(panss8542)2003-03-03 12:37:37 在 PowerBuilder / 数据库相关 提问

问题如下:现在有两个数据库文件,分贝是由ACCESS和VFP产生的,假设是在d:\tel\aa2和d:\tel\bb2(并且是这两个文件每个月会变化一次,是由另个系统产生数据文件的,但只是数据变化,列是不变的,还有就是文件名变化,比如2月时候是aa2,bb2,当3月的时候是aa3,bb3)  
  现在假设一窗口:  
            请选择ACCESS连接的数据文件:         (弹出路径选择窗口)  
            请选择VFP连接的数据文件:                 (弹出路径选择窗口)  
  当选择好了文件后点击“确定”按钮,则马上自动不用配置数据源就把选择的文件变成数据源并且连接这两个数据库(一个是ACCESS的,一个是VFP的)。请各位高说指点,最好是按照上面窗口的设定给出一个实例来。非常感谢  
  ! 问题点数:0、回复次数:4Top

1 楼shahand(死磕)回复于 2003-03-03 13:35:24 得分 0

 
  Powerbuilder中怎样实现用代码配置ODBC                
           
   
  一、   引言  
      Powerbuilder是客户端的开发工具,在实际应用中必须与数据库管理系统配合起来才能运行应用程序,它与数据库的连接可以通过ODBC接口实现。在ODBC中配置好数据源后,便可在程序代码中连接数据库并对数据库进行各种操作了。目前的大部分PB参考书都只介绍了ODBC的手工配置方法,而没有介绍如何在代码中进行ODBC的配置,这样当程序最终完成并分发到用户手中后,还需要为用户配置ODBC,显得既麻烦又不符合专业软件的要求。那么,怎样才能在代码中实现对ODBC的配置呢?其实,Windows中所有的ODBC数据源在系统注册表中都有记载,因此只要对注册表中的项目进行相应的修改即可。与ODBC相关的键中,在windows95/98/nt/2000菜单"开始"|"运行",输入regedit。然后在左边treeview中选择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的目的。  
       
      二、在代码中配置ODBC的实现  
      下面以Powerbuilder内置的Sybase   SQL   Anywhere5.0数据库为例介绍ODBC的代码配置方法。  
      1、   找出数据库驱动程序及相关文件  
      首先找到相应的数据库驱动程序,这些文件可以在注册表的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目录下)。在调试时可先将这些文件复制到指定的目录下。  
      2、   在程序中用代码配置ODBC  
      在应用的open事件中对ODBC配置的代码如下:  
      Ulong   ul_num  
      Int   answer,answer1,answer2,answer3,answer4,answer5,ansapp  
      String   ls_driver,ls_start,ls_location,apppath,db_path,odbcstr  
      //获取操作系统的system目录,并保存到ls_location变量  
      answer=RegistryGet(“KYEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup”,”SysDir”,RegString!ls_location)  
      IF   answer=-1   THEN  
      Messagebox(‘错误’,’应用程序无法获取Windows的系统目录,系统统将终止运行!’,Stopsign!)  
      RETURN  
      END   IF  
      //判断Sybase   SQL   Anywhere5.0的驱动程序是否正确安装  
      ls_driver=ls_location+’\WOD50T.DLL’  
      ls_start=ls_location+’\dbeng50.EXE’  
      IF   NOT   (FileExists(ls_driver)   AND   FileExists(ls_start))   THEN  
      Messagebox(‘错误’,’系统中没有安装SQL   Anywhere的驱动程序,系统将终止运行!’,StopSign!)  
      RETURN  
      END   IF  
      //设置ODBC\ODBCINST.INI\ODBC   DRIVERS  
      answer=RegistrySet(‘   HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBCDRIVER’,’Sybase     SQL   Anywhere   5.0’,RegString!,’Installed’)  
      IF   answer=-1   THEN  
      Messagebox(‘错误’,’应用程序无法设置ODBC   DRIVERS,系统将终止运行!’,StopSign!)  
      RETURN  
      END   IF  
      //设置ODBC\ODBCINST.INI\  
      answer1=RegistrySet(‘   HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Sybase     SQL   Anywhere   5.0’,’CPTimeout’,RegString!,’not   pooled’)  
      answer2=RegistrySet(‘   HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Sybase     SQL   Anywhere   5.0’,’Driver’,RegString!,ls_driver)  
      answer3=RegistrySet(‘   HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Sybase     SQL   Anywhere   5.0’,’Setup’,RegString!,ls_driver)  
      IF   answer1=-1   OR   answer2=-1   OR   answer3=-1   THEN  
      Messagebox(‘错误’,’应用程序无法设置ODBCINST.INI,系统将终止运行!’,StopSign!)  
      RETURN  
      END   IF  
      //设置ODBC   DATA   SOURCE名称(anysql为数据源名)  
      answer=RegistrySet(‘   HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC   Data     Sources’,’anysql’,RegString!,’Sybase   SQL   Anywhere   5.0’)  
      IF   answer=-1   THEN  
      Messagebox(‘错误’,’应用程序无法设置ODBC   DATA   SOURCE名称,系统将终止运行!’,StopSign!)  
      RETURN  
      END   IF  
      //获取应用程序的安装路径(ybinput为应用程序安装到用户计算机上后在注册表中注册的应用程序名,yibiao.db为应用程序的数据库名,与应用程序在同一目录下,anysql为数据源名)  
      ansapp=RegistryGet(“KYEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App     Paths\ybinput”,”Path”,RegString!app_path)  
      IF   ansapp=-1   THEN  
      Messagebox(‘错误’,’应用程序无法获取安装路径名,系统将终止运行!’,StopSign!)  
      RETURN  
      ELSE  
      db_path=app_path+’yibiao.db’  
      END   IF  
      //设置ODBC.INI的细节  
      answer1=RegistrySet(‘HKEY_current_user\software\odbc\odbc.ini\anysql’,’driver’,RegString!,ls_driver)  
      answer2=RegistrySet(‘HKEY_current_user\software\odbc\odbc.ini\anysql’,’start’,RegString!,ls_start)  
      answer3=RegistrySet(‘HKEY_current_user\software\odbc\odbc.ini\anysql’,’autostop’,RegString!,’yes’)  
      answer4=RegistrySet(‘HKEY_current_user\software\odbc\odbc.ini\anysql’,’DataBaseFile’,RegString!,db_path)  
      answer5=RegistrySet(‘HKEY_current_user\software\odbc\odbc.ini\anysql’,’DataBaseName’,RegString!,’yibiao’)  
      IF   answer1=-1   OR   answer2=-1   OR   answer3=-1   OR   answer4=-1   OR   answer5=-1   THEN  
      Messagebox(‘错误’,’应用程序无法设置ODBC.INI细节,系统将终止运行!’,StopSign!)  
      RETURN  
      END   IF  
      odbcstr=’dsn=anysql;databasename=yibiao;databasefile=’+db_path  
      sqlca.dbms=’odbc’  
      sqlca.databse=’yibiao’  
      sqlca.dbparm=”connectstring=’”+odbcstr+”;uid=dba;pwd=sql’”  
      connect   using   sqlca;  
      open(w_main)  
       
      该程序在Powerbuilder6.0下运行通过。  
       
      (摘自《电脑编程技巧与维护》,2000年第4期,作者:樊春容)          
   
         
                         
   
                 
           
   
         
   
   
  Top

2 楼shahand(死磕)回复于 2003-03-03 13:37:19 得分 0

GetFileOpenName   (   title,   pathname,   filename   {,   extension   {,   filter   }   }   )  
   
  Displays   the   system's   Open   File   dialog   and   allows   the   user   to   select   a   file   or   enter   a   filename.   If   you   specify   a   DOS-style   file   extension   and   the   user   enters   a   filename   with   no   extension,   PowerBuilder   appends   the   default   extension   to   the   filename.   If   you   specify   a   file   mask   to   act   as   a   filter,   PowerBuilder   displays   only   files   that   match   the   mask.  
  Syntax    
  另外要换一下注册的odbc类型Top

3 楼panss8542(panss8542)回复于 2003-03-03 15:08:47 得分 0

上面的。这个方法以前已经尝试过了,行不通,第一,编译过,出错。  
  第二,做为数据源的文件是每个月都变的,注册表只能实现是静态的数据源。  
  第三,上面说的dll文件无法找到确切的路径(我用的是pb7.0)  
  不知道可爱的朋友觉得呢?  
  还有可以尝试用profilestring()或者是ole.db来解决吗?Top

4 楼fly518(我要飞)回复于 2003-03-03 15:55:46 得分 0

程序每次运行的时候,动态的生成数据源,一般数据喾的名称的前面几个字母是不变的,只是最后一位会变。可以根据时间生成数据库的名称,至于取程序路径的代码,网上很多的。Top

相关问题

  • 数据库连接
  • 连接数据库!!!
  • 连接数据库!!!
  • 数据库连接!
  • 数据库连接
  • 数据库连接
  • 连接数据库,,,
  • 连接数据库
  • 连接数据库
  • 连接数据库

关键词

  • anywhere
  • sybase
  • 应用程序
  • 数据库
  • powerbuilder
  • 数据
  • 代码
  • 文件
  • 系统
  • 驱动

得分解答快速导航

  • 帖主:panss8542

相关链接

  • PowerBuilder类图书
  • PowerBuilder类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo