【发布时间】:2013-02-12 15:46:36
【问题描述】:
我对 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
我相信这段代码有很多问题,但目前它在尝试执行.Open时失败,说"Provider cannot be found. It may not be properly installed"。之后我发现我需要下载并安装 ORAOLEDB.dll。我通过安装 ORAOledb11.dll 来做到这一点(我尝试了 32 位和 64 位,你的机器是 64 位的)。我已经通过执行regsvr32 OraOLEDB11.dll 安装了它。
不幸的是,问题一直存在。那么,解决此问题的步骤是什么? 我能否以某种方式确保 Oraoledb 已正确安装在我的机器上?
任何提示将不胜感激。
【问题讨论】:
-
我相信这应该会有所帮助:dzone.com/snippets/excel-make-query-oracle 通常,将 Oracle 连接到 Excel 比例如复杂得多。 “本机”MSSQL。祝你好运!
-
几个月前对我有帮助的另外一个链接:blog.mclaughlinsoftware.com/microsoft-excel/…
-
进入 Regedit 并查看密钥 HKEY_CLASSES_ROOT\OraOLEDB.Oracle 是否存在。安装 Oracle 客户端时默认不安装 OLEDB 驱动程序(您不是已经安装了 Oracle 客户端吗?)。顺便说一句,这种语法也是错误的,数据源是 TNSNAMES 文件中引用您的数据库的条目。但这不会给你你得到的错误。
-
感谢您的回答。我确实在注册表中有上述密钥。
标签: excel oracle vba odbc oledb