我有一个连接并查询 Oracle 数据库的 VBA (Excel) 宏。在 Windows 7 下运行,以下连接字符串有效:
Driver={Microsoft ODBC for Oracle}; Server=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.xxx.xxx)(PORT=xxx))(CONNECT_DATA=(SERVICE_NAME=name))); Uid=username;Pwd=password;
我和这个 Excel 模板的其他用户正在转换到带有 32 位 Office 365 的 Windows 10(64 位)。我喜欢这个连接字符串的地方是它不需要单独的 tnsnames.ora 文件,一个我想保留的功能。我也知道 Microsoft 驱动程序已被弃用(无论如何它不能开箱即用),所以现在是时候改变它了。
我安装了以下内容:
- Oracle Instant Client 12.2(32 位)
- 适用于 Instant Client 12.2(32 位)的 Oracle ODBC 驱动程序
- Visual Studio 2019(32 位)(假设 Oracle 驱动程序向前兼容)
我已经证实:
- PATH 中的第一个值设置为安装 Instant Client 12.2 的目录
- ORACLE_HOME 设置为同一目录
- 只有一个 ORACLE_HOME 变量
- 驱动程序(instantclient_12_2 中的 Oracle)在 32 位 ODBC 管理工具中可见
我尝试了以下连接字符串的各种调整,但没有运气
Driver={Oracle in instantclient_12_2}; Server=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.xxx.xxx)(PORT=xxx))(CONNECT_DATA=(SID=name))); Uid=username;Pwd=password
我试过用“数据源”代替“服务器”,用“SERVICE_NAME”代替“SID”,两者同时使用。我还尝试过 Excel 365 的内部 ODBC 连接中的字符串。我不断收到的错误是:
ORA-12560: TNS: 协议适配器错误
我开始怀疑在 Windows 10 下需要 tnsname.ora 文件。是否可以在不使用 tnsnames.ora 文件或除安装 Oracle 驱动程序之外的任何其他操作的情况下创建 Windows 10 32 位 OBDC 连接用户的机器?
编辑:我创建了一个可远程访问的 tnsnames 文件。当连接字符串使用该文件并且设置了 TNS_ADMIN 环境变量时,它会连接。如果我在 VBA 本身中使用 tnsnames 文件中的确切文本,它不会识别它(TNS 适配器错误)。我将假设我对需要 tnsnames.ora 文件的 Oracle 驱动程序的怀疑是正确的,至少对于 VBA 是这样。