2011-12-06 62 views
2

我想使用从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 

不幸的是,我无法获得该代码来显示数据。我究竟做错了什么?

+0

RajendraNarine:不客气。此外,由于您是StackOverflow的新手,我想通知您,您可以通过选中答案旁边的勾号来接受最能帮助您的答案。 –

回答

0

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

0

那么你有一个称为数据源的SQL服务器实例与一个名为DB-Name的数据库?

可能不是?

更多类似的MyServer \ MYINSTANCE和MYDATABASE

0

我不知道邮件合并,所以我不能在您用来建立连接的代码注释。
但是如果你确定代码没问题,那么它可能是连接字符串。

lots ofdifferent possibleconnection strings连接到SQL Server,所以正确的解决方案取决于您的SQL Server版本和设置(例如,Windows认证或SQL Server认证...)。

MSDN article它说,MailMerge支持OLE DB和ODBC,所以你可以使用其中任何一个。
如果您告诉我们有关您的SQL Server安装程序的更多信息,我们可以帮助您找到正确的连接字符串以供您使用。