问题描述
我正在尝试为数据库工具创建一个前端,在 Excel 中,因为 a) 这是公司所有潜在用户都可以使用的,b) 否则结果数据将被放入 Excel反正。我们这样做是为了淘汰现有的 Excel 工具,该工具连接到 MS SQL Server,但在 VBA 中内置了逻辑 - 难以维护,并且现有的数据库对我们不再可用。新系统,所有逻辑都在服务器端完成,我只需要展示结果即可。
我能够使用 MS SQL Server 做到这一点。但是新服务器是一个 Oracle DB,同样的技巧在那里不起作用。 (顺便说一句,每台机器上都安装了 Oracle 客户端 11.2。)
我该怎么做?
- 从 Excel 连接到 Oracle DB 并从中读取数据
- 将 DB-Connection 保存在 Excel 文件中
- 密码保存在 Excel 文件中(我知道反驳,但在这种情况下没问题)
- 使用用户输入的值作为查询参数
我已经尝试过的/不可能的:
- 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 (将#修改为@)