我们使用MS Query从各种数据库中检索数据以创建管理指标(即在Excel中,转到数据...导入外部数据...新数据库查询)。 SQL查询和参数(主要是conn字符串)由Excel自动存储在电子表格中。
但是,我们最近将一个数据库移动到了新服务器。因此,Excel在尝试刷新数据时会提示我们输入新的ODBC连接,但它不会接受新值。我们可以很好地创建新的查询,因此ODBC连接设置正确,但我们无法更改任何查询。
有没有办法以编程方式或以其他方式更改这些设置中的IP地址?我尝试在十六进制编辑器中更改xls文件(IP地址在那里可见),但它表示工作簿已损坏。
答案 0 :(得分:3)
如果您需要更改查询的连接字符串,此宏将为活动工作簿中的所有查询更改它(您不必将代码存储在要更改的工作簿中)。
我包含两个示例连接字符串 - 一个提供dsn,一个提供服务器/数据库。如果您在创建新查询时DSN正常,请先尝试DSN。如果您使用该版本,请调整SQL Server版本。
此外,一个具有标准安全性(uid,pwd),另一个使用基于Windows的安全性(可信连接)。适当混合搭配。
Sub ChangeAddress()
Dim qt As QueryTable
Dim wks As Worksheet
Const strNEW_CONN_DSN As String = "ODBC;DSN=MyDSN;Description=MyDescription;UID=myid;PWD=mypwd;"
Const strNEW_CONN_SQL as String = "Driver={SQL Server Native Client 10.0};Server=myServerAddress;Database=myDB;Trusted_Connection=yes;"
For Each wks In ActiveWorkbook.Worksheets
For Each qt In wks.QueryTables
qt.Connection = strNEW_CONN_DSN
Next qt
Next wks
End Sub