Sql server Excel工作簿-共享到SQL Server的连接文件

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

我有多个Excel 2016和Excel 365文件,都有不同的查询和连接,指向一个SQL数据库

数据库存在于多个服务器上-用于测试等

我希望能够将电子表格连接到每个不同的服务器,例如TESTA1 PRODA01,而无需更新每个Excel工作簿

这是否可以使用Excel,而无需更改DNS等网络设置


提前感谢:)

几年前,我编写了一些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数据源定义数据库连接。或者,您可以在运行时从文本文件中读取连接属性。谢谢您的响应,我会考虑这一点。谢谢您的响应,我会试试看。