错误ORA-03106使用VB6访问Windows 7 64位中的Oracle数据库

时间:2014-01-24 14:33:15

标签: oracle vb6 windows-7-x64

当我尝试使用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

1 个答案:

答案 0 :(得分:1)

我认为您的计算机上没有ADO(没有 .NET ),即“Oracle OLE DB提供程序”。

解决方案:

  • 像往常一样安装Oracle客户端64位 - 我认为这已经完成了。
  • 可以在此处找到 32位,Xcopy版本的客户端版本的OLE DB for OLE DB供应商: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,64Bit,Oracle 11.2以及同时在Win7 x64和旧版XP上运行的旧VBA Excel宏工作。

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