Search code examples
vbaoracle-databasecx-oracleoraoledb

Connect Oracle SQL to VBA


I am able to connect Python to my Oracle SQL DB on a Windows computer, but strangely enough I cannot seem to get it working from VBA.

For reference, this is the Python Code to connect:

cx_Oracle.connect(f'{self.user}/{self.pwd}@//{self.host}:{self.port}/{self.service_name}')

I have tried replicating this similar structure in my VBA code, but I get an error message. Here is the code I've been using:

Sub CallDB_Return_Flexible(stSQL As String, rstStart As Range)

    Dim sqlConn As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim rtn As Boolean
    Dim cmd As New ADODB.Command
    Dim cs As String

    'On Error Resume Next
    Set sqlConn = New ADODB.Connection

    cs = "Provider=OraOLEDB.Oracle;User ID=myuserID;Password=myPsswd;Data Source=host:port/service_name;"
    sqlConn.ConnectionString = cs
    sqlConn.CommandTimeout = 10000
    sqlConn.Open

I get the following error messages: 1) The system cannot find message text for message text 0x80040e0c in the message file for OraOLEDB. 2) Sometimes, dependent on the iteration of the connection I use (IE a TNS connection), I get a TNS listener error message.

I currently have the ActiveX 6.1 Data Objects Library enabled. Furthermore, I am on a 64-bit machine with a 64-bit Oracle client installed. I have a 64-bit Office. I am quite certain I have a 64-bit ADO as well - my ODAC (if this is the same) is the same as the 64 bit version online. I have an ODP.NET of 2.12 and another with 4.121 in the registry. I just have an ODP.NET.Managed of 4.12.

This doesn't make much sense to me, how in one language I can connect with no issues, but in another I cannot!


Solution

  • I backtested using an earlier ActiveX Data Library - this solved it.

    Thank you!!!!!