OleDB Data provider can not be found VBA/Excel

前提是你 提交于 2019-12-01 06:38:06

32-bit OS

I managed to get this working on Windows XP virtual machine by downloading oracle OLEDB provider from Oracle official website Oracle10g Provider for OLE DB Version 10.1.0.4.0. Current working link OLEDB for older OS (32 - bit)

But be aware it will replace JDK and JRE to lower version (It can be prevented by playing with the configuration xml - products.xml - I did not have enough of mental health potion, so I did full install instead). Afterwards you need to delete reference in environment variables as it may effect other programs. After installation, I registered OraOLEDBxx.dll with regsvc32

I was connecting to oracle db 11G with excel 2003. :)

Connection string

I had to enable extensions (ActiveX Data Object and record libraries). My function returning connection was:

Public Function connectToDb(provider As String, host As String, sid As String, user As String, pwd As String, db As String) As ADODB.Connection
Dim conn As ADODB.Connection
Dim dbConnectStr As String

    Set conn = New ADODB.Connection
    If provider = "Oracle" Then
        dbConnectStr = "Provider=OraOLEDB.Oracle;Data Source=" & host & ":1521/" & sid & ";User Id=" & user & ";Password=" & pwd & ";"
    Else

    End If
    conn.ConnectionString = dbConnectStr
    conn.Open
    Set connectToDb = conn
End Function

64-bit OS but 32-bit Office

When our VMs migrated to 64-bit Windows 7 with Excel 2010. Make sure you will download ODAC - Oracle Data Access Components - for right -bit version of your excel installation because I had 32-bit excel installed and thought it was 64-bit (as windows is 64-bit) so I was giving birth trying to get this working with 64-bit ODAC version. Afterwards I did download 32-bit version and it works just as before. For installation just follow install instructions included in downloaded archive folder.

Current working links for ODAC on Oracle website

jbay

You can insure that your connection string is accurate by creating a text file with the ending .udl then close and open the file. You'll be prompted with a user interface to connect to the server. Enter your info and test the connection. Then if your connection is working close the file. Open that file in text format and copy the connection string into your code. Also be sure that your reference library is selected for ADO. This line looks wrong:

Data Source=host:port:sid

Below is a sample I use to pull in the sql from text and extract results to text.

 Public Function ObjectConnect(AID As String, APswd As String)

 ObjectConnect = "Provider=ORAOLEDB;Password=" & APswd & ";Persist Security Info=True;User ID=" & AID & ";Data Source=(nameofserverConn)"

 End Function

Sub RunSQL()

Dim strConn As String
Dim Query As String
Dim txt As Object
Dim ns As ADODB.Connection
Dim rs As ADODB.Recordset
Dim txtfile As Object
Dim f As ADODB.Field
Dim myFileSystemObject As Object
Dim txtN As String
Dim DL As String


FName1 = ""
Query = ""
txtStrngX = ""

Set ns = New ADODB.Connection
Set rs = New ADODB.Recordset
ns.ConnectionTimeout = 99000
ns.CommandTimeout = 99000



ns.Open ObjectConnect('UserID', 'Password') 'this is a public function w. userform for people to enter ID and Password.
With rs
    .ActiveConnection = ns
      'however you're writing the sql it would go here.
    .Open Query 
End With


If rs.State <> 0 Then
    DL = Sheet1.Cells(2, 2)
    RecordsetToText rs:=rs, FullPath:=txtN, ValueDelimiter:=DL  'this is a sub function that writes to a text file.  Didn't include the code but left this.  Here you would want to do something with the recordset.
End If

On Error Resume Next
rs.Close
Set rs = Nothing


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