【问题标题】:Error ORA-03106 When using VB6 to access Oracle database in Windows 7 64bit在 Windows 7 64bit 中使用 VB6 访问 Oracle 数据库时出现错误 ORA-03106
【发布时间】:2014-01-24 14:33:14
【问题描述】:

当我尝试使用 MS ADO 访问数据库时收到 ORA-03106 错误。此问题仅发生在 Windows 7 64 位机器上。显然,过去 XP 存在问题,但通过一些注册表编辑修复了这些问题。这些注册表编辑在应用于 Windows 7 机器时没有任何作用。

我没有太多关于数据库的信息,因为这是由不同的部门处理的,我是一名实习生,这个问题只是在我没有多少背景信息的情况下被抛出。这是代码,我在 MyConnection.Open 行收到错误。

Function db_fetch(sIButtonID, ByRef lstatus, sdescr) As tIBRec

 Dim myRecordSet As ADODB.Recordset

 'Dim sConnectString As String
 Dim sSQL_Statement As String
 Dim this_ibutton As tIBRec

 Set myRecordSet = New ADODB.Recordset

  If Not CheckForNetDrive("O:") Then
    lstatus = Shell("net use O: \\host\oracle /PERSISTENT:YES")
    If Not CheckForNetDrive("O:") Then lstatus = MapNetworkDrive("O:", "\\host\oracle")
    If lstatus = 0 Then
        If InStr(GetEnvironmentVar("PATH"), "orawin95\bin") = 0 Then
            lstatus = SetEnvironmentVariable("PATH", GetEnvironmentVar("PATH") & ";O:\orawin95\bin")
        End If
    End If
  Else
    If InStr(GetEnvironmentVar("PATH"), "orawin95\bin") = 0 Then
        lstatus = SetEnvironmentVariable("PATH", GetEnvironmentVar("PATH") & ";O:\orawin95\bin")
    End If
  End If


  'sConnectString = "Provider=msdaora;Data Source=(DESCRIPTION=(SOURCE_ROUTE=OFF)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=1521)))(CONNECT_DATA=(SID=12)(SERVER=DEDICATED)));User Id=username;Password=password;"

  'sConnectString = "Provider=msdaora;Data Source=(DESCRIPTION=(SOURCE_ROUTE=OFF)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=1521)))(CONNECT_DATA=(SID=03)(SERVER=DEDICATED)));User Id=username;Password=password;"
  'sConnectString = "Provider=msdaora;Data Source =(DESCRIPTION=(SOURCE_ROUTE=OFF)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=host)(PORT=1521)))(CONNECT_DATA=(SID=03)(SERVER=DEDICATED)))User Id=username;Password=password;"

  'On Error GoTo err:

  If myConnection.State = 0 Then
      myConnection.Mode = adModeReadWrite
      myConnection.Open sConnectString
  End If

【问题讨论】:

  • 欢迎来到 StackOverflow。发送包含用户名、密码和主机的代码不是很聪明。这些东西是保密的,所以我建议下次不要把它们放在外面。
  • 感谢您收听。
  • 如何让 VB6 使用 ADO.NET?好吧,我的一个项目是研究将我们的程序从 VB6 迁移到 .NET 需要什么(所有 200,000 行代码)。
  • 据我所知,您不能在 VB6 中使用 ADO.NET。 VB6 是基于 COM 的。当您查找有关从 VB6 迁移到 .NET 的信息时,大多数情况下的答案是:不可能和/或没有用! -> 新的发展!

标签: oracle vb6 windows-7-x64


【解决方案1】:

我假设 ADO(没有 .NET),即“Oracle Provider for OLE DB”在您的计算机上不可用。

解决办法:

  • 照常安装 Oracle 客户端 64 位 - 我认为这已经完成了。
  • 根据您的 32Bit 客户端版本下载提供程序 Oracle Provider for OLE DB,Xcopy 版本,可在此处找到:32-bit Oracle Data Access Components (ODAC) Downloads
  • 解压软件并使用Install.bat oledb c:\Oracle\OLEDB_11.2_x32\ OraClient11g_home1 true 安装提供程序。假设“OraClient11g_home1”是您的 Oracle 主名称。 确保给定目录与您的 Oracle 客户端目录不同
  • 转到您的环境设置并将目录c:\Oracle\OLEDB_11.2_x32\c:\Oracle\OLEDB_11.2_x32\bin\ 添加到您的PATH 环境中。确保将这些目录放在之前您的 Oracle 客户端主目录。
  • 添加环境变量TNS_ADMIN = {Oracle client home diretory}\network\admin

试试它是否有效。

注意:即使您安装了多个 Oracle 客户端,您也只能在一台机器上安装一个单一版本的“Oracle Provider for OLE DB”。

按照这个过程,我设法让所有 Windows 7、64 位、Oracle 11.2 和我的旧 VBA Excel 宏同时在 Win7 x64 和旧 XP 上运行。

抱歉,我错过了您尝试使用 Microsoft OLE DB Provider (msdaora),此解决方案适用于 Oracle Provider。我不知道它们有什么不同,也许你只需要调整连接字符串。

【讨论】:

  • 我不确定他们是否还在使用 msdaora,该行已被注释掉。
  • 好吧,我搜了一下,发现msdaora还在用。为什么其他人删除了他的答案?!
  • 微软提供程序已被弃用很久,您不应该默认使用它
  • 好的,我们将 MSDAORA 驱动程序存储在服务器上,然后映射驱动器并以这种方式访问​​它。有没有什么办法可以在本地不安装oracle软件的情况下使用OLEDB驱动?
猜你喜欢
  • 2011-04-13
  • 2020-06-22
  • 2015-06-11
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-22
相关资源
最近更新 更多