Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows 7 64位中使用VB6访问Oracle数据库时出现错误ORA-03106_Oracle_Vb6_Windows 7 X64 - Fatal编程技术网

在Windows 7 64位中使用VB6访问Oracle数据库时出现错误ORA-03106

在Windows 7 64位中使用VB6访问Oracle数据库时出现错误ORA-03106,oracle,vb6,windows-7-x64,Oracle,Vb6,Windows 7 X64,当我尝试使用MS ADO访问数据库时,收到ORA-03106错误。此问题仅在Windows 7 64位计算机上发生。显然,XP在过去存在一些问题,但通过一些注册表编辑,这些问题已经得到了解决。这些注册表编辑在应用于Windows 7计算机时没有任何作用 我没有太多关于数据库的信息,因为这是由另一个部门处理的,我是一名实习生,这个问题只是在我几乎没有背景信息的情况下向我提出的。这是代码,我在MyConnection.Open行中得到了错误 Function db_fetch(sIButtonID,

当我尝试使用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
我假设ADO(无.NET)即“Oracle OLE DB提供程序”在您的计算机上不可用

解决方案:

  • 像往常一样安装64位Oracle客户端-我想这已经完成了
  • 下载提供程序Oracle provider for OLE DB,根据您的客户端版本,在Xcopy版本的32位中,可以在以下位置找到:
  • 解压缩软件并使用
    install.bat oledb c:\Oracle\oledb_11.2_x32\OraClient11g_home1 true安装提供程序。假设“OraClient11g_home1”是您的Oracle主页名确保给定目录与Oracle客户端目录不同
    
  • 转到您的环境设置,将目录
    c:\Oracle\OLEDB_11.2\u x32\
    c:\Oracle\OLEDB_11.2\u x32\bin\
    添加到PATH环境中。确保将这些目录放置在Oracle客户端主目录之前
  • 添加环境变量
    TNS_ADMIN={Oracle client home DIRECTORY}\network\ADMIN
试试看是否有效

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

按照这个过程,我成功地使所有的Windows 7、64位、Oracle 11.2和我的旧VBA Excel宏都能工作,这些宏同时在Win7 x64和旧XP上运行


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

欢迎来到StackOverflow。发送包括用户名、密码和主机在内的代码不是很明智。这些东西都是机密的,所以我建议下次不要再提了。谢谢你抓住了。你怎么能让VB6使用ADO.NET呢?嗯,我的一个项目是研究将我们的程序从VB6迁移到.NET(全部200000行代码)所需的内容。据我所知,在VB6中不能使用ADO.NET。VB6是基于COM的。当您查找有关从VB6迁移到.NET的信息时,在大多数情况下,答案是:不可能和/或没有用处!->新发展!我不确定他们是否还在使用msdaora,这一行被注释掉了。好的,我搜索了一下,发现msdaora还在使用。为什么另一个人删除了他的答案?!Microsoft provider已被弃用很久了,您不应该通过defaultOk使用它。我们将MSDAORA驱动程序存储在服务器上,然后映射驱动器并以这种方式访问它。有没有办法不用在本地机器上安装oracle软件就可以使用OLEDB驱动程序?