VB6 application oracle 12 64bit connection

百般思念 提交于 2019-12-24 07:53:34

问题


We have a number of applications written in VB6 (not .NET) that have been running for almost 20 years. These applications are running on Windows 2007 64bit servers and connecting to Oracle-11 with a 32bit client. The connection string contains "Provider=OraOLEDB.Oracle" So far, so good.

The problem is that we need to convert, for reasons that go beyond the scope of this thread) to Oracle-12 64bit. After having installed the Oracle 12-client (and disinstalled the Oracle-11 client), we get the following error when trying to open the connection: "Provider cannot be found. It may not be properly installed."

I'm sure we did install the client and am therefore afraid that VB6 cannot connect to Oracle using the 64bit client.

Apparently easy solutions are unfortunately out of the question:
- Convert to .NET or whatsoever and compile under 64 bit
- Keep the 32bit oracle client.

Any idea how to risolve this?


回答1:


OLE-DB

Good news and bad; because Visual Basic 6.0 is a 32 bit program with no 64 bit compiler, the 32 bit Oracle Data Access Components software must be installed, even if the database itself is running on a 64 bit server in a 64 bit Oracle Database install, specifically you need the 32 bit Oracle Provider for OLE DB rather than the whole client.

The driver can be found here (Download the ODAC XCopy version): http://www.oracle.com/technetwork/database/windows/downloads/utilsoft-087491.html

The following thread describes your exact problem and instructions on fixing it: https://hoopercharles.wordpress.com/2012/11/25/connecting-to-an-oracle-database-with-visual-basic-6-0-on-windows-8-64-bit/

ODBC drivers

Another way to connect is to use ODBC drivers instead, there are pros and cons to each method so google to find them.

First you'll need to install the SQORA32 ODBC driver which comes with the 64 bit client or with the ODAC linked above.

Next, you'll need to create an ODBC connection, instructions can be found here: https://tensix.com/2012/06/setting-up-an-oracle-odbc-driver-and-data-source/

Finally you need to change your connections strings in VB6 to use the newly created ODBC connections. Something along the lines of the following should work nicely (obviously nameOfDatabase is the name given to your odbc connection):

Provider=MSDASQL;Dsn=nameOfDatabase;Uid=usernameHere;Pwd=passwordHere

Be careful when you set up your DSN, make sure you use the 32 bit ODBC connection manager which can be found in the following location:

c:\windows\sysWOW64\odbcad32.exe

The same program can be found in the system32 folder but that's the 64 bit version....not confusing at all!




回答2:


(If you can't follow the solution of twoleggedhorse, which is way better.)

You can write a small DLL in .NET 32bit, and make it COM visible so it will be usable by your 32 bits application.

I said in my comment that it seems to be possible in .NET to talk with the DB without an installed client.

To make it through the least painful, you can write it ADO-like (ie a class to replace RecordSet, another for Connection, and so on). Then add it as a reference to your projects and perform a search/replace.



来源:https://stackoverflow.com/questions/46496929/vb6-application-oracle-12-64bit-connection

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!