如何从 Excel 中的 Oracle DB 读取表并保存连接?

问题描述

我正在尝试为数据库工具创建一个前端,在 Excel 中,因为 a) 这是公司所有潜在用户都可以使用的,b) 否则结果数据将被放入 Excel反正。我们这样做是为了淘汰现有的 Excel 工具,该工具连接到 MS SQL Server,但在 VBA 中内置了逻辑 - 难以维护,并且现有的数据库对我们不再可用。新系统,所有逻辑都在服务器端完成,我只需要展示结果即可。

我能够使用 MS SQL Server 做到这一点。但是新服务器是一个 Oracle DB,同样的技巧在那里不起作用。 (顺便说一句,每台机器上都安装了 Oracle 客户端 11.2。)

我该怎么做?

  1. 从 Excel 连接到 Oracle DB 并从中读取数据
  2. 将 DB-Connection 保存在 Excel 文件中
  3. 密码保存在 Excel 文件中(我知道反驳,但在这种情况下没问题)
  4. 使用用户输入的值作为查询参数

我已经尝试过的/不可能的:

  • Power-Query 允许我连接到 Oracle,并允许使用参数。对于新人来说很难,对于性能较弱的笔记本电脑来说开销更大,但它确实有效。遗憾的是,Power-Query 设计不允许您保存连接密码。
  • 无论出于何种原因,ODBC-Connections 似乎都不适用于 MS Query(尽管“测试连接”表示正常)。我需要 MS Query 来使用参数。
  • OLEDB 连接可以工作,但不提供参数。

我发现唯一可行的解​​决方法是利用 OLEDB 连接到 oracle,从用户读取参数并每次通过 VBA 更改查询字符串以包含它们:

' Update table from oracle via OLEDBConnection
query = "SELECT *" & _
    " FROM SAMPLETABLE sa " & _
    " WHERE sa.KEY_1='$KEY2' " & _
    " AND sa.KEY_2='$KEY2' " & _
    " ORDER BY sa.ID"                            ' prepare the query
query = Replace(query,"$KEY1",key1)            ' Replace placeholder with value for key_1
query = Replace(query,"$KEY2",key2)            ' Replace placeholder with value for key_2
With Sheets("OracleLines").ListObjects(1).QueryTable.WorkbookConnection.OLEDBConnection
  .CommandText = query                           ' Set the query text in the OLEDBConnection
  .Refresh                                       ' Refresh the connection
End With

我宁愿不走这条路,因为 a) 我试图完全消除 VBA,b) 它增加了另一个可能的故障点,c) SQL 查询将是可见的。 (我不希望恶意修补,但我希望安全)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)