OleDB Data provider can not be found VBA/Excel

后端 未结 2 1906
情歌与酒
情歌与酒 2021-01-13 06:33

I am almost not familiar with VBA (have had some courses back at school and that\'s it). Now I need to connect to Oracle database (which is running on remote server) from Ex

相关标签:
2条回答
  • 2021-01-13 06:56

    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
    
    0 讨论(0)
  • 2021-01-13 07: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

    0 讨论(0)
提交回复
热议问题