Sql server Excel工作簿-共享到SQL Server的连接文件
我有多个Excel 2016和Excel 365文件,都有不同的查询和连接,指向一个SQL数据库 数据库存在于多个服务器上-用于测试等 我希望能够将电子表格连接到每个不同的服务器,例如TESTA1 PRODA01,而无需更新每个Excel工作簿 这是否可以使用Excel,而无需更改DNS等网络设置Sql server Excel工作簿-共享到SQL Server的连接文件,sql-server,excel,connection,Sql Server,Excel,Connection,我有多个Excel 2016和Excel 365文件,都有不同的查询和连接,指向一个SQL数据库 数据库存在于多个服务器上-用于测试等 我希望能够将电子表格连接到每个不同的服务器,例如TESTA1 PRODA01,而无需更新每个Excel工作簿 这是否可以使用Excel,而无需更改DNS等网络设置 提前感谢:)几年前,我编写了一些VBA代码来列出Excel中的所有连接,并更新所有这些连接。也许这会帮到你 Public Sub UpdateConnectionStrings() FromStri
提前感谢:)几年前,我编写了一些VBA代码来列出Excel中的所有连接,并更新所有这些连接。也许这会帮到你
Public Sub UpdateConnectionStrings()
FromString = Worksheets("AccessLinks").Range("A1").Value
ToString = Worksheets("AccessLinks").Range("A2").Value
i = 1
Dim conn As Variant
Dim connectString As String
For Each conn In ActiveWorkbook.Connections
connectString = conn.ODBCConnection.Connection
Worksheets("AccessLinks").Range("D" & i).Value = connectString
connectString = Replace(connectString, FromString, ToString)
connectString = Replace(connectString, FromString, ToString)
Worksheets("AccessLinks").Range("E" & i).Value = connectString
conn.ODBCConnection.Connection = connectString
i = i + 1
FindPathBegin = InStr(1, conn.ODBCConnection.Connection, "DBQ=") + 4
FindPathEnd = InStr(1, conn.ODBCConnection.Connection, "Database1.accdb")
FindFullPath = Mid(conn.ODBCConnection.Connection, FindPathBegin, FindPathEnd - FindPathBegin)
Next conn
MsgBox ("Done!!")
End Sub
''''''''''''''''''''''''''''''
Sub DataExtractFromSQL_Server()
' Create a connection object.
Dim cnPubs As ADODB.Connection
Set cnPubs = New ADODB.Connection
' Provide the connection string.
Dim strConn As String
'Connect to the Pubs database on the local server.
strConn = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=DATABASE_NAME;Data Source=SERVER_NAME"
'Now open the connection.
' Create a recordset object.
Dim rsPubs As ADODB.Recordset
Set rsPubs = New ADODB.Recordset
Worksheets(1).Cells.Clear
Dim sht As Worksheet
Dim LastRow As Long
Set sht = ThisWorkbook.Worksheets("Data Validation")
LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row
cnt = ActiveWorkbook.Connections.Count
For j = cnt To 1 Step -1
cnPubs.Open strConn
Set conn = ActiveWorkbook.Connections.Item(j)
' conn is the name of the connection string; not the connection string
Sql = "SELECT * FROM [TABLE_PREFIX_NAME].[dbo].[" & conn & "]"
With rsPubs
.ActiveConnection = cnPubs
.Open Sql
For i = 1 To .Fields.Count
Worksheets(1).Cells(LastRow, 1) = conn
Worksheets(1).Cells(LastRow, 2) = .Fields(i - 1).Name
Select Case DataType
Case .Fields(i - 1).Type = "200"
Worksheets(1).Cells(LastRow, 3) = "VARCHAR"
Case .Fields(i - 1).Type = "131"
Worksheets(1).Cells(LastRow, 3) = "DECIMAL"
Case .Fields(i - 1).Type = "135"
Worksheets(1).Cells(LastRow, 3) = "DATE"
Case Else
Worksheets(1).Cells(LastRow, 3) = "INT"
End Select
LastRow = LastRow + 1
Next i
End With
cnPubs.Close
Next j
Set rsPubs = Nothing
Set cnPubs = Nothing
End Sub
如果我正确理解了您的问题,那么这种情况正是ODBC数据源设计的目的。Excel工作簿中的数据连接引用ODBC数据源,ODBC数据源定义数据库连接。或者,您可以在运行时从文本文件中读取连接属性。谢谢您的响应,我会考虑这一点。谢谢您的响应,我会试试看。