VB6 程序连Ora-06413解决手札

原由:

Win7 x64平台,Vb6程序启动,直接启用不了;

Vb6比较古老了,应当是石器时代的产物;这错误一看应当与oracle环境变量有关,而朋友确认装了oracle 9i client 32位。

经过:

由于程序写的比较扯淡,没有对错误异常抛出正确的信息,幸好手上还有源码,按f8单步执行看了一下,下面调试部分直接报:ora-06413:连接未打开。看了代码,比较通用的一个用ado打开数据库的代码,增加红色部分,重新生成vb程序,省得每次都单步调试。

Function OpenDBConnection(cn AsADODB.Connection, strCnn As String) As Boolean
   On Error GoTo OpenMainSybaseError
   Set cn = New ADODB.Connection
   With cn
      .CursorLocation = adUseClient
     .ConnectionString = strCnn
     .ConnectionTimeout = 10
     .Properties("Prompt") = adPromptNever
     .Open
   End With
   OpenDBConnection = True
    MsgBox "dbconnectstring is " + strCnn
   Exit Function
OpenMainSybaseError:
    MsgBox Err.Description
   OpenDBConnection = False
End Function

再次启动程序好了,错误直接甩出来:ORA-06413连接未打开

看了下连接字符串:

Provider=MSDAORA;data source=ora;UserId=cxf1;Password=test;Unicode=True

用的msdaora,tnsping ora了一下,没有问题;那么问题来了,msdaora的问题?这个驱动在官方确实有说明

https://www.microsoft.com/en-US/download/details.aspx?id=20065

只有2003和xp的版本了,不过后来检查

C:\Program Files (x86)\Common Files\System\Ole DB

貌似64位下直接有这三个文件:msdaOra.dll,msdaosp.dll,msdaOrar.dll 并不需要额外的驱动;

但既然怀疑到这了,尝试用了OraOleDb.Oracle.1,换了个错误 ,居然报tns-12514,看样子还是与环境变量有关。后面的故事比较无聊,纯属安装卸载,卸了ora92版本,重新安装oracle 10g client,依旧,卸载10g client装11g 依旧,32位都不行,要不试试64位,装上11g 64位,直接报驱动没启用:

有点病急乱投医了,好了,理理思路:

1 64位肯定不行,因为那时32位的vb压根儿不知道64位的事情;

2 10g的32位client既然能到tsn-12514证明,这个驱动应当是可用的,只是环境变量不对;

重新上了下oracle的官网,说提供了32位的odac驱动,

http://www.oracle.com/technetwork/topics/dotnet/utilsoft-086879.html

好家伙,直接下载了个10G的最低版本,为啥最低,各位懂的,vb6这个元老用老的不出错;结果装不上,正常,10g嘛,装在64位上要更改oraparam.ini,

[Certified Versions]

#You can customise error message shown for failure,provide value for CERTIFIED_VERSION_FAILURE_MESSAGE

Windows=4.0,5.0,5.1,5.2,6.0,6.1

好,OK装上了,测试ODBC,一切正常,万事OK,一开程序,依旧报ora-06413.

没辙了,看看sqlnet.log,发现:

***********************************************************************
Fatal NI connect error 6413, connecting to:
 (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=115.29.114.XXX)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)(CID=(PROGRAM=C:\test()\ttest.exe)(HOST=SNOWIND-PC)(USER=snowind))))
 
 VERSION INFORMATION:
         TNSfor 32-bit Windows: Version 10.2.0.1.0 - Production
 Time: 12-12月-2016 21:20:45
 Tracing not turned on.

基本猜出问题所在了(哎,靠猜的-_-!!)。

打开调式程序,再次数据链接属性:

终于成功了(可以放鞭炮了)。

结论:

没事别在路径里加括号,不然你会死的很没面子;代码里加点异常处理也不会增加很大的工作量,亦可造福后人;

时间: 2024-08-02 11:04:04

VB6 程序连Ora-06413解决手札的相关文章

安装vmware虚拟机时出现“安装程序无法继续。Microsoft Runtime DLL 安装程序未能完成安装”解决

安装VMware出现以下问题: 界面显示: 安装程序无法继续.Microsoft  Runtime DLL 安装程序未能完成安装 解决方法: 按 系统键+r 输入:%temp%  找到 以~setup 结尾的目录,打开安装即可.

'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件的解决办法

前言: 本文的解决方法来自http://www.cnblogs.com/xionghui/archive/2012/04/11/2442404.html --感谢! 问题描述:新电脑装mysql后在cmd面板输入:mysql -uroot -p ,出现:'mysql' 不是内部或外部命令,也不是可运行的程序或批处理文件. 原因:没有配置环境变量! 解决方法:配置环境变量 在Path中加入mysql的安装目录下的bin目录 OK! 再次打开cmd: 后记:如有类似问题直接打开本文的感谢网址即可.

程序猿是如何解决SQLServer占CPU100%的

原文:程序猿是如何解决SQLServer占CPU100%的 文章目录 遇到的问题 使用SQLServer Profiler监控数据库 SQL1:查找最新的30条告警事件 SQL2:获取当前的总报警记录数 有哪些SQL语句会导致CPU过高? 查看SQL的查询计划 选择top记录时,尽量为order子句的字段建立索引 查看SQL语句CPU高的语句 通过建立相关索引来减少表扫描 其他优化手段 总结 遇到的问题 有同事反应服务器CPU过高,一看截图基本都是100%了,my god,这可是大问题,赶紧先看

IIS 6 站点子应用程序发布问题及解决方式

问题: 子应用程序在此服务器上单独发布站点OK,作为一个总站点的子应用程序发布后访问,网页提示如下: Could not load file or assembly 'Microsoft.ReportViewer.Webforms, Version=10.0.0.0 IIS版本:II6 服务器:Windows Server 2008 SP2 应用程序:ASP.NET 解决方式: 发现C:\Windows\assembly 中Microsoft.ReportViewer.Webforms  的最高

android sqlite3程序不存在的解决办法(转)

在android开发中,在使用命令行操作数据库sqlite时,有时候会遇到sqlite3 not found的问题.这是因为你的手机没有安装sqlite3程序.解决办法如下(两种办法结合起来解释的更清楚!!!): 方法1: sqlite3 not found的解决办法(转) 在Android开发方面,我是小白,起步没多久.最近用到了sqlite本地缓存数据,我希望像mysql一样通过命令行查看建立的表以及表中的数据,于是用adb shell进入,敲入sqlite3,提示 sqlite3: not

设置c++程序的堆栈空间解决栈溢出问题

设置c++程序的堆栈空间解决栈溢出问题 程序的静态数据量大的时候,有时候会出现栈溢出问题,往往是程序还没运行算法呢,就down掉了,比如你在创建包含大数组的类(或数据)的时候,栈就溢出了.这是由于系统分配给程序的栈空间太小. 一种方法,就是不要静态分配,用new动态创建,是从堆中分配的,堆的空间足够大,不过记得写析构函数,delete你申请的堆空间.其实这样也挺方便,类结束的时候会自动调用析构函数释放空间.养成"不在栈上定义大数组/大对象"的好习惯很重要,否则再大的栈也会被撑爆的. 当

解决IE下载 apk变成zip:Android 手机应用程序文件下载服务器 配置解决方法

解决IE apk变成zip:Android 手机应用程序文件下载服务器 配置解决方法 APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码. 由于APK文件本身就是压缩包,如果用户的电脑上装了WinRAR(85%的装机量),用IE下载APK文件,扩展名就会被自动改为“.zip”. 如果你的下载服务器为Nginx服务器

解决VS2010在新建实体数据模型出现“在 .NET Framework Data Provider for Microsoft SQL Server Compact 3.5 中发生错误。请与提供程序供应商联系以解决此问题。”的问题

最近想试着学习ASP.NET MVC,在点击 添加--新建项--Visual C#下的数据中的ADO.NET 实体数据模型,到"选择您的数据连接"时,出现错误,"在 .NET Framework Data Provider for Microsoft SQL Server Compact 3.5 中发生错误.请与提供程序供应商联系以解决此问题.",这里写下,以防自己忘记. 网上查了一下,说是重新安装一下 .NET Compact Framework 3.5,http

php程序无法使用localhost连接数据库解决方法(linux)

php程序无法使用localhost连接数据库解决方法(linux) 出现这种情况是因为PHP无法正确获取mysql.sock 在php.ini文件中指定即可解决问题. 修改如下: 找到以下3项-->> pdo_mysql.default_socket= mysql.default_socket= mysqli.default_socket= 改为 (linux 默认安装的 mysql.sock 路径 /var/lib/mysql/mysql.sock ) -->> pdo_mys