Group:  Microsoft Word ยป microsoft.public.word.mailmerge.fields
Thread: Merge Fields won't populate after Datasource change

Merge Fields won't populate after Datasource change
Graywolf 12/29/2008 10:40:05 PM
If this post should be in a different forum, please let me know. I'm trying
to run a Word 2003 Mailmerge to a mailing label template. I've set up the
Mailing label mailmerge and my datasource is a stored query in an Access
database. Everything works fine with the mailmerge from Word. Now I want to
run that mailmerge from a Visual Basic 6 program, but change the datasource.
When I change the datasource I don't get anything coming out on the labels.
I'm trying to set the datasource to a query statement that I build in the
program. For my initial tests the Access database is the same and the query
statement I build is identical to the stored query statement in the database.
The fields that are returned in the queries will be identical, ultimately the
where clause will change so it will select different records. But first I
have to get the labels populated. When I run the code in VB and the new Word
doc is created with the labels the labels are blank. Here's the code and
the query statement. I recorded a Word macro to get the proper syntax for
the Opendatasource command. gsDBLocation is the fully qualified path to the
database. The msSQL variable holds the query statement. After opening the
datasource, firstrecord returns a 1 and lastrecord returns a -16 (there
should be 3 records) so it appears that the query is failing, but it's the
same as the stored query (which works) so I'm stumped. Any help would be
appreciated. Thanks in advance.

Query:
SELECT distinct REG.*, REGADDR.*, Address.* FROM REG INNER
JOIN (Address INNER JOIN REGADDR ON Address.A_ADDRCODE =
REGADDR.RA_ADDRCODE) ON REG.CODE = REGADDR.RA_REGCODE WHERE
(((REGADDR.WIRE_NOTICE)=True)) or (((REGADDR.WIRE_NOTICE_DUP)=True));

Code:
Set objWordApp = CreateObject("Word.application") 'New word.Application

If chkLabels.Value = vbChecked Then
Set objWordDoc = objWordApp.Documents.Open(C:\Labels5663.doc")
End If


objWordApp.Visible = vbTrue


With objWordDoc.MailMerge
.MainDocumentType = wdMailingLabels

.SuppressBlankLines = True

.OpenDataSource Name:=gsDBLocation, ConfirmConversions:=False,
ReadOnly:=False, LinkToSource:=True, _
AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
Format:=wdOpenFormatAuto, Connection:= _
"Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data
Source=gsDBLocation;Mode=Read;Extended Properties="""";Jet OLEDB:System
database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:" _
, SQLStatement:=msSQL, SQLStatement1:="", _
SubType:=wdMergeSubTypeAccess

objWordDoc.MailMerge.ViewMailMergeFieldCodes = vbTrue

With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
Re: Merge Fields won't populate after Datasource change
"Peter Jamieson" <pjj[ at ]KillmapSpjjnet.demon.co.uk> 12/30/2008 9:50:07 AM
If you haven't made the registry change described in
http://support.microsoft.com/kb/825765/en-us
try that first.

Everything else looks OK (I can't say I've checked in detail, but the SQL
statement is only around 248 characters so it should fit into SQLStatement.
However, Word does not always record the OpenDataSource statement correctly
(e.g. it usually truncates the Connection string). You can also cut a lot of
stuff out - I'd try:

.OpenDataSource _
Name:=gsDBLocation, _
Connection:="Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User
ID=Admin;Data Source=gsDBLocation;Mode=Read;", _
SQLStatement:=msSQL, _
SubType:=wdMergeSubTypeAccess

(you may be able to get away with

.OpenDataSource _
Name:=gsDBLocation, _
SQLStatement:=msSQL

)
--
Peter Jamieson
http://tips.pjmsn.me.uk

"Graywolf" <Graywolf[ at ]discussions.microsoft.com> wrote in message
news:FAE35E5D-857C-492C-A0E1-793DD14312CA[ at ]microsoft.com...
[Quoted Text]
> If this post should be in a different forum, please let me know. I'm
> trying
> to run a Word 2003 Mailmerge to a mailing label template. I've set up the
> Mailing label mailmerge and my datasource is a stored query in an Access
> database. Everything works fine with the mailmerge from Word. Now I want
> to
> run that mailmerge from a Visual Basic 6 program, but change the
> datasource.
> When I change the datasource I don't get anything coming out on the
> labels.
> I'm trying to set the datasource to a query statement that I build in the
> program. For my initial tests the Access database is the same and the
> query
> statement I build is identical to the stored query statement in the
> database.
> The fields that are returned in the queries will be identical, ultimately
> the
> where clause will change so it will select different records. But first I
> have to get the labels populated. When I run the code in VB and the new
> Word
> doc is created with the labels the labels are blank. Here's the code and
> the query statement. I recorded a Word macro to get the proper syntax
> for
> the Opendatasource command. gsDBLocation is the fully qualified path to
> the
> database. The msSQL variable holds the query statement. After opening the
> datasource, firstrecord returns a 1 and lastrecord returns a -16 (there
> should be 3 records) so it appears that the query is failing, but it's the
> same as the stored query (which works) so I'm stumped. Any help would be
> appreciated. Thanks in advance.
>
> Query:
> SELECT distinct REG.*, REGADDR.*, Address.* FROM REG INNER
> JOIN (Address INNER JOIN REGADDR ON Address.A_ADDRCODE =
> REGADDR.RA_ADDRCODE) ON REG.CODE = REGADDR.RA_REGCODE WHERE
> (((REGADDR.WIRE_NOTICE)=True)) or (((REGADDR.WIRE_NOTICE_DUP)=True));
>
> Code:
> Set objWordApp = CreateObject("Word.application") 'New word.Application
>
> If chkLabels.Value = vbChecked Then
> Set objWordDoc = objWordApp.Documents.Open(C:\Labels5663.doc")
> End If
>
>
> objWordApp.Visible = vbTrue
>
>
> With objWordDoc.MailMerge
> .MainDocumentType = wdMailingLabels
>
> .SuppressBlankLines = True
>
> .OpenDataSource Name:=gsDBLocation, ConfirmConversions:=False,
> ReadOnly:=False, LinkToSource:=True, _
> AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="",
> _
> WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False,
> _
> Format:=wdOpenFormatAuto, Connection:= _
> "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data
> Source=gsDBLocation;Mode=Read;Extended Properties="""";Jet OLEDB:System
> database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:" _
> , SQLStatement:=msSQL, SQLStatement1:="", _
> SubType:=wdMergeSubTypeAccess
>
> objWordDoc.MailMerge.ViewMailMergeFieldCodes = vbTrue
>
> With .DataSource
> .FirstRecord = wdDefaultFirstRecord
> .LastRecord = wdDefaultLastRecord
> End With
> .Execute Pause:=False
> End With

Re: Merge Fields won't populate after Datasource change
Graywolf 12/31/2008 10:44:10 PM
Thanks for the feedback Peter. I will try the registry change and let you
know what happens. I didn't think I needed everything on the opendatasource
line but like I said I just recorded a macro and cut a pasted the line into
my VB code changing the arguments where needed. I know the SQL statement is
restricted to about 250 chars. Is the second SQL argument restricted to the
same length? That might give me problems if it is. Thanks again. Happy New
Year!!!

"Peter Jamieson" wrote:

[Quoted Text]
> If you haven't made the registry change described in
> http://support.microsoft.com/kb/825765/en-us
> try that first.
>
> Everything else looks OK (I can't say I've checked in detail, but the SQL
> statement is only around 248 characters so it should fit into SQLStatement.
> However, Word does not always record the OpenDataSource statement correctly
> (e.g. it usually truncates the Connection string). You can also cut a lot of
> stuff out - I'd try:
>
> .OpenDataSource _
> Name:=gsDBLocation, _
> Connection:="Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User
> ID=Admin;Data Source=gsDBLocation;Mode=Read;", _
> SQLStatement:=msSQL, _
> SubType:=wdMergeSubTypeAccess
>
> (you may be able to get away with
>
> .OpenDataSource _
> Name:=gsDBLocation, _
> SQLStatement:=msSQL
>
> )
> --
> Peter Jamieson
> http://tips.pjmsn.me.uk
>
> "Graywolf" <Graywolf[ at ]discussions.microsoft.com> wrote in message
> news:FAE35E5D-857C-492C-A0E1-793DD14312CA[ at ]microsoft.com...
> > If this post should be in a different forum, please let me know. I'm
> > trying
> > to run a Word 2003 Mailmerge to a mailing label template. I've set up the
> > Mailing label mailmerge and my datasource is a stored query in an Access
> > database. Everything works fine with the mailmerge from Word. Now I want
> > to
> > run that mailmerge from a Visual Basic 6 program, but change the
> > datasource.
> > When I change the datasource I don't get anything coming out on the
> > labels.
> > I'm trying to set the datasource to a query statement that I build in the
> > program. For my initial tests the Access database is the same and the
> > query
> > statement I build is identical to the stored query statement in the
> > database.
> > The fields that are returned in the queries will be identical, ultimately
> > the
> > where clause will change so it will select different records. But first I
> > have to get the labels populated. When I run the code in VB and the new
> > Word
> > doc is created with the labels the labels are blank. Here's the code and
> > the query statement. I recorded a Word macro to get the proper syntax
> > for
> > the Opendatasource command. gsDBLocation is the fully qualified path to
> > the
> > database. The msSQL variable holds the query statement. After opening the
> > datasource, firstrecord returns a 1 and lastrecord returns a -16 (there
> > should be 3 records) so it appears that the query is failing, but it's the
> > same as the stored query (which works) so I'm stumped. Any help would be
> > appreciated. Thanks in advance.
> >
> > Query:
> > SELECT distinct REG.*, REGADDR.*, Address.* FROM REG INNER
> > JOIN (Address INNER JOIN REGADDR ON Address.A_ADDRCODE =
> > REGADDR.RA_ADDRCODE) ON REG.CODE = REGADDR.RA_REGCODE WHERE
> > (((REGADDR.WIRE_NOTICE)=True)) or (((REGADDR.WIRE_NOTICE_DUP)=True));
> >
> > Code:
> > Set objWordApp = CreateObject("Word.application") 'New word.Application
> >
> > If chkLabels.Value = vbChecked Then
> > Set objWordDoc = objWordApp.Documents.Open(C:\Labels5663.doc")
> > End If
> >
> >
> > objWordApp.Visible = vbTrue
> >
> >
> > With objWordDoc.MailMerge
> > .MainDocumentType = wdMailingLabels
> >
> > .SuppressBlankLines = True
> >
> > .OpenDataSource Name:=gsDBLocation, ConfirmConversions:=False,
> > ReadOnly:=False, LinkToSource:=True, _
> > AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="",
> > _
> > WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False,
> > _
> > Format:=wdOpenFormatAuto, Connection:= _
> > "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data
> > Source=gsDBLocation;Mode=Read;Extended Properties="""";Jet OLEDB:System
> > database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:" _
> > , SQLStatement:=msSQL, SQLStatement1:="", _
> > SubType:=wdMergeSubTypeAccess
> >
> > objWordDoc.MailMerge.ViewMailMergeFieldCodes = vbTrue
> >
> > With .DataSource
> > .FirstRecord = wdDefaultFirstRecord
> > .LastRecord = wdDefaultLastRecord
> > End With
> > .Execute Pause:=False
> > End With
>
>

Home | Search | Terms | Imprint
Newsgroups Reader