在Windows 7 64位中使用VB6访问Oracle数据库时出现错误ORA-03106
当我尝试使用MS ADO访问数据库时,收到ORA-03106错误。此问题仅在Windows 7 64位计算机上发生。显然,XP在过去存在一些问题,但通过一些注册表编辑,这些问题已经得到了解决。这些注册表编辑在应用于Windows 7计算机时没有任何作用 我没有太多关于数据库的信息,因为这是由另一个部门处理的,我是一名实习生,这个问题只是在我几乎没有背景信息的情况下向我提出的。这是代码,我在MyConnection.Open行中得到了错误在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,
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\
添加到PATH环境中。确保将这些目录放置在Oracle客户端主目录之前c:\Oracle\OLEDB_11.2\u x32\bin\
- 添加环境变量
TNS_ADMIN={Oracle client home DIRECTORY}\network\ADMIN
- 转到您的环境设置,将目录
很抱歉,我错过了您尝试使用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驱动程序?