sql - 使用 VBA 更新和现有 OLEDB 连接
问题描述
我想用可修改的脚本更新电子表格中的现有连接。
基本上,我希望用户能够放入账户引用列表,按下按钮,Excel 会输出 SQL 输出,其中这些账户引用与我们拥有的系统相匹配。
我已经设法将所有脚本整理到一个单元格中(我的“工作”选项卡上的 F1),所以一切都很好,我已经添加了初步连接(并将其称为“CustomerContactDetails”)。
我也启用了 Microsoft ActiveX Data Objects 6.1 Library。
我的 VBA 脚本是:
Sub UpdateScript()
Dim Script As String
SQLScript = Worksheets("Workings").Range("F1").Value
ActiveWorkbook.Connections("CustomerContactDetails").OLEDBConnection.ConnectionString = SQLScript
ActiveWorkbook.Connections("CustomerContactDetails").Refresh
End Sub
我在第四行得到错误(ActiveWorkbook.Connections("CustomerContactDetails").OLEDBConnection.ConnectionString = SQLScript):
运行时错误'9';下标超出范围
有谁知道如何帮助解决这个问题?感觉好像我并没有那么远,我也不想做任何太复杂的事情。我似乎无法让它工作!
解决方案
尝试这样的事情,看看你得到什么输出
Sub UpdateScript()
Dim Script As String
Dim conn as WorkbookConnection
For Each conn in ActiveWorkbook.Connections
Debug.Print conn.Name
If conn.Name = "CustomerContactDetails" Then
SQLScript = Worksheets("Workings").Range("F1").Value
conn.OLEDBConnection.ConnectionString = SQLScript
conn.OLEDBConnection.Refresh
End If
Next conn
End Sub
编辑:看起来你拥有的是WorkbookQuery
我创建的(到 Oracle DB),你可以访问和修改它,如下所示:
Sub Tester()
Dim q As WorkbookQuery, lo As ListObject
Set lo = ActiveSheet.ListObjects("Query1")
Debug.Print ActiveWorkbook.Queries.Count
Set q = ActiveWorkbook.Queries("Query1")
Debug.Print q.Formula
'revise query
q.Formula = "let" & vbCrLf & _
" Source = Oracle.Database(""BLAH"", [HierarchicalNavigation=true," & _
"Query=""select * from table1""])" & _
vbCrLf & "in" & vbCrLf & "Source"
lo.Refresh 'I got a popup "do you want to run this?" here...
End Sub
请注意,在创建您无法修改的对象类型时尝试录制宏几乎总是有用的——这将指向您需要的语法。
推荐阅读
- javascript - 有没有办法通过其窗口 id 将应用程序窗口带到电子前台
- c++ - 将 const char* 分配给 char*
- java - 理解 split 中使用的 ",(?=([^\"]*\"[^\"]*\")*[^\"]*$)" 中的正则表达式
- c# - 未调用 API Http get 方法
- java - Ehcache3 defaultCache-configuration 等效
- python - 如何关闭弹出通知?使用 selenium python 进行自动化测试
- c# - 如何轻松地将高斯滤波器应用于双精度列表/数组
- modelica - Dymola 中的命令手册
- javascript - D3 js - onClick of circle 我想在背景中添加区域
- android - 如何减少/完全防止对 Flutter 应用进行逆向工程的可能性?