关于vba:如何将Excel连接到Oracle数据库?

How to connect Excel to Oracle database?

我正在尝试使用 VBA 将 Excel 连接到我的 Oracle 数据库。

1
2
3
4
5
6
7
8
9
10
11
12
Sub dbConnect()

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Set con = New ADODB.Connection
    Set rs = New ADODB.Recordset

    strCon ="Driver={Microsoft ODBC for Oracle};" & _
   "CONNECTSTRING=(description=(address=(protocol=tcp)(host=mydb.domain.com)(port=1522))(connect_data=(sid=mydb))); uid=user; pwd=pw;"
    con.Open (strCon)

End Sub

我收到一个错误。

[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

我从其他问题和来源得知问题很可能是使用了错误的 DSN 版本。

但是,我不明白我需要做什么来修复它。

我的 Windows 是 64 位的,当我打开 ODBC 数据源管理器时,我看到以下内容(以及其他内容):

  • 名称:Excel 文件,平台:64 位,驱动程序:Microsoft Excel 驱动程序

    用户 DSN

  • 名称:mydb,平台:32 位,驱动程序:ORA121020_x86 中的 oracle

    在系统 DSN 下

我能做些什么来解决它?连接字符串和 DNS 如何相互关联?我应该更改其中一个 DNS 的版本吗?如果是,我该怎么做?

编辑:
连接字符串是从 Oracel SQL Developer 中的 db 连接复制的,我可以在其中访问 db.


好的,我设法修复它。我的 excel 是 64 位的,所以为了连接到数据库,我必须为我的连接创建一个也是 64 位的系统 DNS。为此,我必须转到 /Windows/system32 文件夹,选择文件 odbcad32 并在系统 DNS 下添加一个新的 DNS,该 DNS 带有我必须下载的 64 位驱动程序。假设我将 DNS 命名为 abc

然后我还将您在上面代码中看到的连接字符串更改为

1
strCon ="Data Source=abc;User=user;Password=pw"

据此,我在上面的帖子中使用的连接字符串不需要 DNS,所以我不知道为什么它不起作用,但是在按照刚才的描述创建新的 DNS 后,我切换到了新的指定 DNS 的连接字符串。

瞧,仅仅几个小时后,我就可以连接到我的数据库了。

快速旁注:如上所述,我在 /Windows/system32 中编辑了 obcad32 文件。这是 64 位 DNS 的文件。在管理 32 位 DNS 的文件夹 /Windows/SysWOW64 中有一个名称完全相同的文件,因此如果您遇到与我类似的问题,请注意您编辑的是哪个文件。