View Single Post
  #22   Report Post  
Posted to microsoft.public.word.mailmerge.fields
Peter Jamieson Peter Jamieson is offline
external usenet poster
 
Posts: 4,582
Default Mail Merge - If statement

Can I ask another question? Within this merge letter, there is a merge
field titled Due_Date. I'm expecting the data to come in with the

following
format 12/22/08. Currently it's displaying 2009-06-16 00:00:00
The Due Date field in the Access Database is not formatted like that,

why
does it display in Word like that?


There are a number of things to bear in mind when it comes to formatting.

First, Access itself really has two parts - the Access "front end",
which really handles presentation, forms, reports etc., and the
"database engine", which stores and retrieves data. In a simple .mdb,
the database engine is Jet (or ACE in an Access 2007 .accdb), although
Access can use other engines in various ways.

So when you define a date column in an Access table, Jet itself
(probably) will store the column as a date or datetime column, and it
probably does not know anything about the display format you have
defined - i.e. although the formats are defined in Jet tables in the
..mdb, Jet does not know what that data means - only the Access frontend
knows.

(Actually I don't know that that is exactly how Access/Jet treats the
data but it will be something like that)

Second, Word has several different methods for connecting to Access data
- DDE, ODBC, and in Word 2002 and later, OLE DB. DDE was the default
method in Word 2000 and earlier, and OLE DB is the default method in
Word 2002 and later. DDE works by starting Access (if necessary), then
getting Access to open the database and retrieve the data on behalf of
Word. So when Word is using DDE, you may find that data is being
formatted according to the rules that the front end knows about (I can't
remember in this particular case). However, when you use ODBC or OLE DB,
Word does not use Access at all - it uses the Jet or ACE engine
directly. So what you get is what that engine returns.

Typically you can alter the format returned by using a date format
switch in your Word mailmerge document, e.g.

{ MERGEFIELD mydate \@"MM/DD/YYYY" }

for typical U.S. date format. However, it is as well to ensure that
a. month and day are not reversed in this situation when they are
ambiguous, e.g. 6th July, 7th June
b. null dates are not appearing as if they are real dates.

If you have trouble with these date switches not working, the simplest
fix is probably to write a query in Access that formats the date as a
text string with either the exact format you want, or is formatted as
YYYY-MM-DD . In the latter case, Word's date switches should work as you
expect.

Season's greetings,

Peter Jamieson

http://tips.pjmsn.me.uk

crae wrote:
Peter,

Thank you for the quick reply. Wow. Your suggestions and examples worked
well. Part of my hang up was not using the ctrl+F9 to create the brackets,
even before the IF word. You said in your reply to watch out for this.
Rightly so.

I'm not getting the exact data qty I was expecting but will look into that
some more on my end (atleast it IS stating 0 which was my default if the
criteria wasn't met). You have my formula working well - all parts are in
place. Thank you Peter.

Can I ask another question? Within this merge letter, there is a merge
field titled Due_Date. I'm expecting the data to come in with the following
format 12/22/08. Currently it's displaying 2009-06-16 00:00:00
The Due Date field in the Access Database is not formatted like that, why
does it display in Word like that?

Thanks for all your time/trouble. You've already made my holidays happier.
. .I'd been wrestling with that syntax for a week now. It must be fun to
know so much about particular things.

crae

"Peter Jamieson" wrote:


As posted, your code has various brace and/or quote characters either
absent or in excess. Your code should look more like this - none of the
newlines I have added need to be there - they are just to try to make
the structure clearer. I would suggest that you re-enter the code from
scratch (don't try to start with the existing stuff), and make sure you
select it and update all the fields using F9 before testing.

{
IF { MERGEFIELD TypeofPurchase } = "Buy In"
"{ MERGEFIELD Qtrs_to_Purchase }"
"{
IF { MERGEFIELD TypeofPurchase } = "Buy Up"
"{ MERGEFIELD Qtrs_to_Purchase }"
"0"
}"
}

You could probably get away with fewer quotes e.g.


{
IF { MERGEFIELD TypeofPurchase } = "Buy In"
{ MERGEFIELD Qtrs_to_Purchase }
{
IF { MERGEFIELD TypeofPurchase } = "Buy Up"
{ MERGEFIELD Qtrs_to_Purchase }
"0"
}
}

but personally I prefer to spell it all out as follows:

{
IF "{ MERGEFIELD TypeofPurchase }" = "Buy In"
"{ MERGEFIELD Qtrs_to_Purchase }"
"{
IF "{ MERGEFIELD TypeofPurchase }" = "Buy Up"
"{ MERGEFIELD Qtrs_to_Purchase }"
"0"
}"
}


Don't forget that every pair of {} needs to be the special field code
braces that you can enter with ctrl-F9


Peter Jamieson

http://tips.pjmsn.me.uk

crae wrote:
Doug,

I'm afraid this Service Purchase mail merge letter has now been passed over
to me. Again, using the same Access Database. Need to change an IF
statement merge field. I thought I had come upon something that would work
but it's not giving me results that I would expect. Could be my syntax is
off? I've scanned your previous threads and have tried breaking it down and
doing the Toggle Field Codes for the sections. I'll copy in what I'm seeing.

My current code:
IF {MERGEFIELD TypeofPurchase } = "Buy In" { MERGEFIELD Qtrs_to_Purchase }
"IF { MERGEFIELD TypeofPurchase } = "Buy Up" { MERGEFIELD Qtrs_to_Purchase
}" "0"} "}

Basically if TypeofPurchase is either Buy In or Buy Up, it needs to pull the
data from the same Qtrs_to_Purchase field, otherwise 0.

When I do the toggle field codes for the first line, it gives me this (keep
in mind that on this mail merge I'm working with the TypeofPurchase field in
our database was displaying Buy Up);

«TypeofPurchase» = "Buy In" 0
When I do the toggle field codes for the second line, it gives me this;
IF { MERGEFIELD TypeofPurchase } =
When I do the toggle field code for the entire thing, it gives me the same
thing as listed directly above.

This field was originally only populated with the first statement, but due
to a requested change, it needs to incorporate whether it's either a Buy In
OR a Buy Up.

Hope you can offer some suggestions.

Thank you in advance for your time/assistance,
crae

"Doug Robbins - Word MVP" wrote:

Try using

{IF {MERGEFIELD "Type_of_Purchase" }="Buy Back" {MERGEFIELD "Total_Cost"}

Using the mail merge helper/wizard, if you select a field from the data
source for which the name includes spaces, it automatically replaces the
space with an underscore and encloses the (modified) field name in quotation
marks.

--
Hope this helps.

Please reply to the newsgroup unless you wish to avail yourself of my
services on a paid consulting basis.

Doug Robbins - Word MVP

"Noel" wrote in message
...
This database was created by someone that is no longer with the company
and
they entered the field names that way. Do I need to correct the field
names
in all the tables, queries, etc?

"Doug Robbins - Word MVP" wrote:

You cannot have spaces in the name of a mergefield. (or maybe you can,
but
then you would need to include the field name in "")

--
Hope this helps.

Please reply to the newsgroup unless you wish to avail yourself of my
services on a paid consulting basis.

Doug Robbins - Word MVP

"Noel" wrote in message
...
I entered it in the Word Merge document as {IF {MERGEFIELD Type of
Purchase}="Buy Back" {MERGEFIELD Total Cost} but I get an error saying
that
Type is not in my data source.



"Doug Robbins - Word MVP" wrote:

You do not need to be using anything like "Select * from
SERVICEPURCHASE
Where TYPE OF PURCHASE =Buy In"

As I said in one of my earlier posts:

To do it in the mailmerge main document, in the where you have (or
would
have the Buy Back) merge field, use

{ IF { MERGEFIELD PurchaseType } = "Buy Back" { MERGEFIELD Amount } }

and where you have (or would have the Buy In) merge field, use

{ IF { MERGEFIELD "PurchaseType } = "Buy In" { MERGEFIELD Amount } }

or something similar. You must use Ctrl+F9 to insert each pair of
field
delimiters { }.


--
Hope this helps.

Please reply to the newsgroup unless you wish to avail yourself of my
services on a paid consulting basis.

Doug Robbins - Word MVP

"Noel" wrote in message
...
Would I try something like this and put it in the toggle field codes
in
the
Word document "Select * from SERVICEPURCHASE Where TYPE OF PURCHASE
=Buy
In"
? The end result, I need it to place the TOTAL COST in the Buy In
field
of
the Merge letter. If it's a Buy Back, I need it to be placed in the
Buy
Back
field of the Merge Letter. Nobody else in my office knows access and
so
I'm
sorry if I am a little clueless with this. I'm on a time crunch to
get
this
done, so using all I can.

Thanks so much for your help!


"Doug Robbins - Word MVP" wrote:

The PurchaseType field from Access can be used as a Mergefield in
the
way
detailed in the If...then...Else field construction, without having
the
actual content of the field appear anywhere in the merge document.

Normally, I would say that manipulation such as that done by the
use
of
If...then...Else fields is best done in the data source if that
source
is
a
data base. However, I understand from your original post that you
want
the
contents of an amount field to appear in different places in the
letter
depending upon the PurchaseType.

Without seeing the actual context of where you want this
information
to
appear, it is difficult to tell you the best way to go about it.

--
Hope this helps.

Please reply to the newsgroup unless you wish to avail yourself of
my
services on a paid consulting basis.

Doug Robbins - Word MVP

"Noel" wrote in message
news It is a field within the Access database but it is not something
that
gets
merged into the letter in Word. Maybe this should be something in
the
Access
query?
I'm a newbie to the statements that you can use so I am seeking
any
help i
can get.
Thanks

"Doug Robbins - Word MVP" wrote:

If the Purchase Type is not a mergefield, from where does it
come?

--
Hope this helps.

Please reply to the newsgroup unless you wish to avail yourself
of
my
services on a paid consulting basis.

Doug Robbins - Word MVP

"Noel" wrote in message
...
The purchase type is not a merge field, so my question would
be
is
what
do
I
code the field code?
Thanks
"Doug Robbins - Word MVP" wrote:

To do it in the mailmerge main document, in the where you
have
(or
would
have the Buy Back) merge field, use

{ IF { MERGEFIELD PurchaseType } = "Buy Back" { MERGEFIELD
Amount } }

and where you have (or would have the Buy In) merge field,
use

{ IF { MERGEFIELD "PurchaseType } = "Buy In" { MERGEFIELD
Amount } }

or something similar. You must use Ctrl+F9 to insert each
pair
of
field
delimiters { }.

--
Hope this helps.

Please reply to the newsgroup unless you wish to avail
yourself