找不到OleDB数据提供程序VBA / Excel

Ale*_* K. 5 oracle oledb excel odbc vba

我对VBA几乎不熟悉(仅在学校就读过一些课程就可以了)。现在,我需要从Excel文件连接到Oracle数据库(在远程服务器上运行)。我四处闲逛,发现了一些例子。因此,到目前为止,我已经编写了以下代码:

    Sub Try()
         Dim cn As New ADODB.Connection
         Dim rs As ADODB.Recordset
         Dim cmd As ADODB.Command
         Dim chunk() As Byte
         Dim fd As Integer
         Dim flen As Long
         Dim Main As ADODB.Parameter
         Dim object As ADODB.Parameter

     Stil = vbYesNo + vbCritical + vbDefaultButton1
        Titel = "db connection test"
    '   Meldung anzeigen.
        Antwort = MsgBox("trying to connect to db", Stil, Titel, Hilfe, Ktxt)

         ' Connect to the database using ODBC [msdaora][ORAOLEDB.Oracle]Provider=ORAOLEDB.Oracle;
         With cn
             .ConnectionString = "Provider=ORAOLEDB.Oracle;Password=pass;User ID=usr;Data Source=host:port:sid"
             .Open
             .CursorLocation = adUseClient
         End With

         ret = cn.Execute("create table newtesttable (main integer, object oid)")

         ' Here is an example if you want to issue a direct
    ' command to the database
         '
         'Set cmd = New ADODB.Command
         'With cmd
         '    .CommandText = "delete from MYTABLE"
         '    .ActiveConnection = cn
         '    .Execute
         'End With
         'Set cmd = Nothing

         '
         ' Here is an example of how insert directly into the
     ' database without using
         ' a recordset and the AddNew method
         '
         Set cmd = New ADODB.Command
         cmd.ActiveConnection = cn
         ' cmd.CommandText = "insert into newtesttable(main,object) values(?,?)"
         cmd.CommandText = "select * from test"
         cmd.CommandType = adCmdText

         ' The main parameter
        ' Set main = cmd.CreateParameter("main", adInteger, adParamInput)
         'main.Value = 100 '' a random integer value ''
         'cmd.Parameters.Append main

         ' Open the file for reading
         'fd = FreeFile
         'Open "myBlobFile.txt" For Binary Access Read As fd
         'flen = LOF(fd)
         'If flen = 0 Then
          '   Close
           '  MsgBox "Error while opening the file"
            ' End
         'End If

         ' The object parameter
         '
         ' The fourth parameter indicates the memory to allocate
     ' to store the object
       '  Set object = cmd.CreateParameter("object", _
       '                                       adLongVarBinary, _
       '                                       adParamInput, _
                                              flen + 100)
       '  ReDim chunk(1 To flen)
       '  Get fd, , chunk()

         ' Insert the object into the parameter object
       '  object.AppendChunk chunk()
       '  cmd.Parameters.Append object

         ' Now execute the command
         Set rs = cmd.Execute

     '   Mldg = "test"
        Stil = vbYesNo + vbCritical + vbDefaultButton1
        Titel = "asdasdasd"
    '   Meldung anzeigen.
        Antwort = MsgBox(rs, Stil, Titel, Hilfe, Ktxt)
         ' ... and close all
         cn.Close
         Close

 End Sub
Run Code Online (Sandbox Code Playgroud)

我相信这段代码中有很多问题,但是目前尝试执行.Open时,它失败了 "Provider cannot be found. It may not be properly installed"。之后,我发现我需要下载并安装ORAOLEDB.dll。我是通过安装ORAOledb11.dll来做到这一点的(我已经尝试了32位和64位,但我的机器是64位)。我已经通过执行安装了它regsvr32 OraOLEDB11.dll

不幸的是,问题一直存在。那么,解决该问题的步骤可能是什么?我能以某种方式确保在我的计算机上正确安装了Oraoledb吗?

任何提示将非常感谢。

小智 0

您可以通过创建一个以.udl结尾的文本文件,然后关闭并打开该文件来确保连接字符串的准确性。系统将通过用户界面提示您连接到服务器。输入您的信息并测试连接。然后,如果您的连接正常,请关闭该文件。以文本格式打开该文件并将连接字符串复制到您的代码中。还要确保为 ADO 选择了您的参考库。这行看起来是错误的:

Data Source=host:port:sid
Run Code Online (Sandbox Code Playgroud)

下面是我用来从文本中提取 sql 并将结果提取到文本的示例。

 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
Run Code Online (Sandbox Code Playgroud)