如何使用VBA连接到SQL Server?

时间:2011-12-06 18:11:47

标签: sql-server vba

我想使用从SQL Server数据库中提取的数据自动执行某些邮件合并功能。这是我正在使用的代码:

Sub open_DSN()

     Dim strConnection As String

     ActiveDocument.MailMerge.CreateDataSource Name:="DB-NAME", _
       Connection:="Provider=SQLOLEDB.1;Persist Security Info=False;Initial Catalog=DB-NAME;Data Source=DATA-SOURCE", _
       SQLStatement:="select * from DataTable"

     ActiveDocument.MailMerge.OpenDataSource Name:="DB-NAME"

     If ActiveDocument.MailMerge.DataSource.Name <> "" Then _
        MsgBox ActiveDocument.MailMerge.DataSource.Name
     ' – code lifted from MS Help within Word that seems the nearest to what I require
     'With ActiveDocument.MailMerge
     '    .MainDocumentType = wdFormLetters
     '    strConnection = "DSN=MS Access Databases;" _
     '        & "DBQ=C:\Northwind.mdb;" _
     '        & "FIL=RedISAM;"
     '   .OpenDataSource Name:="C:\NorthWind.mdb", _
     '        Connection:=strConnection, _
     '        SQLStatement:="SELECT * FROM Customers"
     'End With

     With ActiveDocument.MailMerge
           .MainDocumentType = wdFormLetters
           strConnection = "Provider=SQLOLEDB.1;Persist Security Info=False;Initial Catalog=DB-NAME;Data Source=DATA-SOURCE"
        .OpenDataSource Name:="DB-NAME", _
                Connection:=strConnection, _
                SQLStatement:="SELECT * FROM DataTable"
     End With
End Sub

不幸的是我无法获取此代码来显示数据。我做错了什么?

3 个答案:

答案 0 :(得分:0)

您是否将“DB-NAME”和“DATA-SOURCE”替换为连接字符串中的实际值?

答案 1 :(得分:0)

那么你有一个名为DATA-Source的sql server实例,其数据库名为DB-Name吗?

可能不是吗?

更像MyServer \ MyInstance和MyDatabase

答案 2 :(得分:0)

我不知道MailMerge,因此我无法评论您用于建立连接的代码 但如果你确定代码没问题,那么它可能就是连接字符串。

lots of different possible connection strings连接到SQL Server,因此正确的解决方案取决于您的SQL Server版本和设置(例如,Windows身份验证或SQL Server身份验证.. )。

MSDN article表示MailMerge支持OLE DB和ODBC,因此您可以使用其中任何一种。
如果您告诉我们有关您的SQL Server设置的更多信息,我们可以帮助您为您的用例找到正确的连接字符串。