fields queries and utter disaster

A

apelsinen

Hi

I'm trying to solve the following.

I have a data source that contains two tables - table one has an id1
and some other fields and id1 is the primary key, table2 has as its
primary key id2 but also contains id1 from table1 for linking.

I want my word document to ask for a value for id2. And the select id1
and id2 if and only if table1.id1 equals table2.id1 and table2.id2
contains the value that i was asked for intially.

or to put it in mysql language

SELECT Table1.ID1, Table2.ID1 FROM TABLE1, TABLE2 WHERE Table1.ID1 =
TABLE2.ID1 AND TABLE2.ID2 = ?

I can access the table, my problem is that I cannot figure out the
proper syntax for MSWords fields

As far as I can tell I should be able to do this using IF combined with
ASK but I've spent the better part of my day not getting any closer att
all.

I would really appreciate any help.

I might add i would like this to be don on saving or printing but only
once for each document .. so if its opened again it will not ask .. in
other words if the fields are filled in dont ask. But I'll settle for
just getting the first part!
 
C

consiglieri

I will settle for an even easier version ... The user is prompted for
an input in the form of a number (id2) and then the corresponding id1
will be printed as well as id2

like this

id1 -> id2
 
D

Doug Robbins - Word MVP

I don't really understand what you mean by:
I have a data source that contains two tables - table one has an id1
and some other fields and id1 is the primary key, table2 has as its
primary key id2 but also contains id1 from table1 for linking.

I want my word document to ask for a value for id2. And the select id1
and id2 if and only if table1.id1 equals table2.id1 and table2.id2
contains the value that i was asked for intially.

It just doesn't make sense. You are not saying what it is that you want
done if the condition is met.

Aside from that, the only way to do what you want will almost certainly be
to use a macro that is triggered by the Save or Print commands by having
macros with the same name as those commands.

You could use the InputBox() command to have the user enter a value, but it
might be more appropriate to throw up a userform that contains a combobox or
listbox that gets populated with the values of ID2 so that the user only
selects form the values that exist.

--
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
 
P

Peter Jamieson

Hi John etc.,
I'm going to spit this off to the group that specialises in this kind of
thing, however, my first question is "How did you get a connection to
mysql
from Microsoft Office in the first place?"

The people in the mailmergefields group need to know that you are doing
this
in Macintosh OS 10.4.5 (Unix) using Microsoft Office 2004.

I had the impression that it was using Office X, but unfortunately I am much
more ignorant on Mac issues and can only experiment with Office 2004, i.e.
(a) do not know whether it is possible to connect directly using ODBC with
Office X and
(b) what the appropriate syntax for OpenDataSource (or a { DATABASE }
field, if that is what the questioner wants) would be on Mac.

On the Windows version this is doable partly because it's possible to
specify "" as the Name in the OpenDataSource call when the ODBC DSN is a
machine DSN (i.e. in the registry), or use a file DSN.

If someone on the Mac side knows the answer to the general ODBC connectivity
questions maybe we could get a little bit further.

Peter Jamieson
 
P

Peter Jamieson

Still no obvious way to do it here - it's possible to get the data via Excel
and the Excel VBA Help gives an example of how to do it programmatically,
but I haven't been able to get it to work so far (again, on Office 2004).
Next opportunity to look is in a couple of days' time, but I'd have thought
someone on the Mac side had had a thorough go at this and knows what's
feasible.

Peter jamieson
 
D

Doug Robbins - Word MVP

Aside from the issues that have been raised by Peter, does anyone understand
what the OP means by:
I have a data source that contains two tables - table one has an id1
and some other fields and id1 is the primary key, table2 has as its
primary key id2 but also contains id1 from table1 for linking.

I want my word document to ask for a value for id2. And the select id1
and id2 if and only if table1.id1 equals table2.id1 and table2.id2
contains the value that i was asked for intially.

--
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
 
C

CyberTaz

Hi Doug, et al -

It sounds to me like the 2 tables are related using ID1 as the common field
(Primary Key of Table1, Foreign Key of Table2). I'm not familiar with MySQL,
but in Access & others, it would seem to me that a simple query in the
database would provide the record set the user needs, matching records on
the basis of the common field. An inner join would return just the matching
records & the query should be constructed to return only the 2 required
fields of data (ID1 & ID2) for the matching records.

It seems far simpler to me to do this in the database & use the *query* as
the data source rather than trying to get Word to query the two tables.

What isn't clear (to me) is whether the OP wants to do a *merge*, with the
user choosing which of the found records to include, or whether this doc is
to be generated for one recipient at a time with the user being prompted for
an 'ID2' criteria.

Does this make sense?

HTH |:>)
Bob Jones
[MVP] Office:Mac
 
D

Doug Robbins - Word MVP

Yes Bob, that would be my understanding and I always maintain that data
manipulation is best done in the data source.

Looking now in the original newsgroup to which this was posted
(microsoft.public.mac.office.word), I see that the OP posted a couple of
follow ups to his original post, the most telling of which states:

Quote

I will settle for an even easier version ... The user is prompted for
an input in the form of a number (id2) and then the corresponding id1
will be printed as well as id2

like this

id1 -> id2

Unquote

If it was Access, I would say the form into which the user eterns the id2
should be in the database and the merge should be initiated from there,
possibly making use of the information on Albert Kallal's site at:

http://www.members.shaw.ca/AlbertKallal/wordmerge/index.html



--
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
 
P

Peter Jamieson

What's the best way to do that?

Peter Jamieson

Paul Berkowitz said:
I suggest pinging JE McGimpsey. If anyone knows, he will.

--
Paul Berkowitz
MVP MacOffice
Entourage FAQ Page: <http://www.entourage.mvps.org/faq/index.html>
AppleScripts for Entourage: <http://macscripter.net/scriptbuilders/>

Please "Reply To Newsgroup" to reply to this message. Emails will be
ignored.

PLEASE always state which version of Microsoft Office you are using -
**2004**, X or 2001. It's often impossible to answer your questions
otherwise.
 
P

Peter Jamieson

Does this make sense?

Partly - I agree with the analysis about what the user is trying to
retrieve, but there are at least a couple of key issues:
a. how does the user get any data at all from MySQL into Word on the Mac
platform? Constructing a query or view in the DBMS does not solve that
problem, although it might make it easier to do it without resorting to VBA
or editing a DATABASE field. At the moment the only way I can see is "get
the data from MySQL into a format Word can use as a data source, then use
that". As far as I can see at the moment, that can be done using e.g. Excel
& MS Query, but it isn't clear that it can easily be automated, e.g. there
is no equivalent of ADO to use with Word VBA on Mac, I haven't been able to
get the appropriate Mac Excel VBA "get data directly from an ODBC data
source" sample to work so far, and the MS Query documentation in this
version suggests that it isn't even possible to save a .qry/.dqy file
b. in this case the user needs to enter a value which will restrict the set
of records returned, which means that you have to create a
query/view/procedure to which you can pass a parameter, which means you have
to do slightly more than just use the query/view as a data source (again.
some of this stuff can be done with some types of data source in the Windows
version of Word, but you either have to use the old DDE connection type to
Access (and that option's not available on Mac) or successfully issue a
procedure call with a parameter which is typically not straightforward even
on Windows Word.

The bottom line is, either it's feasible to get this data directly from
Word, or it's probably going to involve a separate manual step.

FWIW, I agree with Doug about databses being the place to manipulate data,
but it kinda depends on what you mean by a "database". To me, the whole
point of a standard such as SQL is that anything can use all its features to
retireve data.I don't see the necessity to do queries as a separate step.

Just my 2c-worth

Peter Jamieson
 
C

consiglieri

Hi

Thanks for the answers.

To beging with - what i want to achieve is simply an autmatic query
whereby my word document receives a particular field from the database.
I input for instance a project number and from the database a klient
number for that project is selected and automagically inserted into the
word document upon save or print. This is a pretty straightforward deal
with openoffice and I would imagine that one should be able to do it
with MS Office.

How i connect to mysql

Well i simply used the database tools in word. Made added a source. But
since I have a swedish version I will need to figure out the
appropriate english terms. Its a holiday here so I will get back on
that one.

Thanks
 
P

Peter Jamieson

In that case, you are probably using a DATABASE field, in which case you can
reveal the field code showing e.g.

{ DATABASE \c "connection info." \s "SELECT * FROM mytable" }

and substitute the query you need. To insert the "variable" part of it, you
can nest a FILLIN filed that pops up a dialog when you execute the fields,
e.g.

{ DATABASE \c "connection info" \s "SELECT Table1.ID1, Table2.ID1 FROM
TABLE1, TABLE2 WHERE Table1.ID1 = TABLE2.ID1 AND TABLE2.ID2 = { FILLIN
"Enter ID2" \o } }

which is suitable for a numeric ID. If the ID is non-numeric you'll need to
use

{ DATABASE \c "connection info" \s "SELECT Table1.ID1, Table2.ID1 FROM
TABLE1, TABLE2 WHERE Table1.ID1 = TABLE2.ID1 AND TABLE2.ID2 = '{ FILLIN
"Enter ID2" \o }' }

Peter Jamieson
 
C

consiglieri

Thanks,

That looks like it might work, or at least from a mysql viewpoint it
seems reasonable. However I have just ordered office 2004 for mac so I
shall wait untill it arrives in a couple of days and then give it a
whirl.

I'll post again as soon as I have had a chance to try it out.

Once again many thanks for the offered suggestions. The simple fact
that one actually gets a response has made me decide to abandon
OpenOffice for now and go with "Bill's stuff".

Thanks again
 
P

Peter Jamieson

I would appreciate it if
a. you could try it on Word.X first.
b. you could let us know what your existing database field actually says.

Peter Jamieson
 
C

consiglieri

Trying it on Word.X

To clear a few things up. Initially i connected to the mysql database
using sql-query in excel after which I pulled int the information to an
excel worksheet. I then tried to create fields along the lines I
perviously explained.

As for the last attempt.

My filed contains the following

{ DATABASE \c "connection info" \s "SELECT Table1.ID1, Table2.ID1 FROM
TABLE1, TABLE2 WHERE Table1.ID1 = TABLE2.ID1 AND TABLE2.ID2 = { FILLIN
"Enter ID2" \o } }

The only problem is I do not know what "connection info" to use.
Normally to connect to mysql i would issue mysql -u usernamen -p
password Database
I tried that but it didnt work.

Could you help me out with an example of "connection info".
 
P

Peter Jamieson

OK, from your previous messages I had the impression that you might have
managed to get the results of a simple MySQL query directly into Word, in
which case it would almost certainly have been possible to modify the query
to get what you needed. But that appears not to be the case.

Unfortunately, the gist of the replies so far is that no-one here -
including me - actually knows whether it is possible to get data directly
into Word from an ODBC data source in either Word X or Word 2004, or what
other approaches might work if a direct connection is not possible.

The one thing I am sure of is that it is possible to get data manually from
an ODBC data source into Excel 2004 using MS Query (as you have done in
Excel X). Whether that can be automated in a useful way is another question.

Peter Jamieson
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Top