Word 2013,SQL Server 2014 我有一个Word Mail Merge模板,最初是为许可应用程序创建的,该应用程序使用.ini文件和Excel文件从多个数据集生成一个证书。
我想让Word模板独立工作。我能够连接一个.udl文件来建立与数据库的连接,但是它给了我所有的表,然后我选择了一个,然后它给了我一个文档,当我只需要一个时,该表中的每一行。
如何限制/过滤来自模板的文档,仅使用我请求的特定表格和特定行(license_id)?
Sub AutoNew()
'THIS RETURNS ALL ROWS AFTER I PICK A TABLE
With ThisDocument.MailMerge
.OpenDataSource Name:="C:\Users\or0146575\Desktop\xxx.udl"
.Execute
End With
End Sub
如果我知道如何,我会将下面的代码连接起来只返回1行。
Dim sql As String
sql = "SELECT full_name, BigLicenseType, LicNosDisplay, expiration_date FROM OpCerts WHERE person_id= 30012"
答案 0 :(得分:0)
我决定采取完全不同的路线,并希望它不会减损我的观点。
使用像.udl或.odc这样的数据源文件会带回所有记录,并且需要在运行时选择表,我无法让sql工作。
我决定使用旧的ADODB(工具>参考中的Microsoft ActiveX Data Objects 2.5库)建立连接,并将值分配给mailmerge字段或DOCVARIABLE字段或书签,这些字段将起作用。将mailmerge用于一条记录没有任何意义。我希望这有助于某人。
Sub AutoNew()
Dim strWhat As String
strWhat = InputBox("Enter License ID", "OpCert Wall Certificate")
Dim conn As ADODB.Connection
Dim cmd As ADODB.Command
Set conn = New ADODB.Connection
conn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=DWS_Licenses;Data Source=WPDHSCLR16C"
conn.Open
Set cmd = New ADODB.Command
cmd.ActiveConnection = conn
cmd.CommandText = "SELECT full_name, BigLicenseType, LicNosDisplay, expiration_date FROM OpCerts WHERE person_id=" & CInt(strWhat)
Dim rs As ADODB.Recordset
Set rs = cmd.Execute() 'Execute stored procedure.
'THIS WILL BE CHANGED TO BOOKMARK(S) PROBABLY IF DOCVARIABLES DOESN'T WORK
ActiveDocument.Variables("expiration_date").Value = rs(3)
'PUT full_name, BigLicenseType, LicNosDisplay TAGS HERE
rs.Close
Set rs = Nothing
Set cmd = Nothing
conn.Close
Set conn = Nothing
End Sub