Reply
 
Thread Tools Display Modes
  #1   Report Post  
Posted to microsoft.public.word.mailmerge.fields
crm crm is offline
external usenet poster
 
Posts: 2
Default Word 2003 MailMerge with SQL Server 2000 problem

I'm developing a Form Letter engine for my customers which pulls data
from their SQL Server 2000 database. The user clicks a button on the
toolbar which brings them to a data selection form. This form builds a
SQL Query behind the scenes based on their selections. I then Mail
Merge against the query. This works perfectly except when the filter
criteria on the query is a single date field.

Sample VBA Code:
Public Sub ExecuteMailMerge(query As String)

On Error GoTo err_handler

Dim dsn As String
dsn = "My DSN"

With ActiveDocument.MailMerge
.OpenDataSource dsn, LinkToSource:=False, _
SqlStatement:=query
.Execute False
End With

Exit Sub
err_handler:

MsgBox ("Failed to execute mail merge: " + Err.Description)

End Sub

Sample Query:
"SELECT * FROM [View Name] WHERE ( DateField = '9/08/2005 12:00:00 AM'
)"

Sample Query 2:
"SELECT * FROM [View Name] WHERE ( DateField = '9/08/2005' )"

When using a query involving a single date field, I get a "Failed to
execute mail merge: Word was unable to open the data source." error.

I have been able to hack my way past this problem by adding "AND 1=1"
to the end of the query. However, this is still a hack, and I hate
hacks. I'd much rather identify and solve the underlying problem. Any
ideas?
Thanks,
Chris McKenzie
http://weblogs.asp.net/taganov

  #2   Report Post  
Posted to microsoft.public.word.mailmerge.fields
Peter Jamieson Peter Jamieson is offline
external usenet poster
 
Posts: 4,582
Default Word 2003 MailMerge with SQL Server 2000 problem

To be honest I'm amazed that your code would work with Word 2003 - if I use
an OpenDataSource call that specifies a dsn file but no connection string,
Word just thinks you're trying to open a text file.

Anyway, a few experiments here suggest that
a. if you are using ODBC to connect, you don't encounter this problem.
b. if you are using OLEDB to connect, you do encounter the problem you
describe. I have always found that the OLEDB provider seems to be more picky
about SQL syntax than the ODBC driver. It's possible that the ODBC driver is
translating the query (ODBC is certainly designed to do stuff like that) and
getting it right, and OLEDB is not, or it's possible that they are passing
different settings to SQL Server that cause Transact-SQL to behave
differently. I don't know.
c. What I generally find is that qualifying table names with an alias (and
possibly even /using/ the alias) makes OLEDB behave - e.g.

SELECT o.* FROM Orders o WHERE o.OrderDate ...

Personally I wouldn't use the 1=1 workaround on the grounds that the query
optimiser might not eliminate the expression (seriously! I don't know what
SQL Server does but I once did this with Oracle to get around some problem
and the query processor examined every candidate record, presumably to
ensure that 1 still equalled 1. Maybe that's gone now).

It's not part of your issue, but personally, I would also tend to use
'YYYY-MM-DD' format for dates, or even the official ISO one
(YYYY-MM-DDTHH:MM:SS, e.g. 2006-09-28T13:06:05 ) if it is supported in SQL
Server 2000, or do something like

myDate CONVERT(DATETIME, '1996-07-06 00:00:00', 102)

(you need to look up CONVERT in SQL Server books online to get the right
number - instead of 102 - for the date format you want to use). Assuming
that's in SQL SERVER 2000.

Peter Jamieson


"crm" wrote in message
ups.com...
I'm developing a Form Letter engine for my customers which pulls data
from their SQL Server 2000 database. The user clicks a button on the
toolbar which brings them to a data selection form. This form builds a
SQL Query behind the scenes based on their selections. I then Mail
Merge against the query. This works perfectly except when the filter
criteria on the query is a single date field.

Sample VBA Code:
Public Sub ExecuteMailMerge(query As String)

On Error GoTo err_handler

Dim dsn As String
dsn = "My DSN"

With ActiveDocument.MailMerge
.OpenDataSource dsn, LinkToSource:=False, _
SqlStatement:=query
.Execute False
End With

Exit Sub
err_handler:

MsgBox ("Failed to execute mail merge: " + Err.Description)

End Sub

Sample Query:
"SELECT * FROM [View Name] WHERE ( DateField = '9/08/2005 12:00:00 AM'
)"

Sample Query 2:
"SELECT * FROM [View Name] WHERE ( DateField = '9/08/2005' )"

When using a query involving a single date field, I get a "Failed to
execute mail merge: Word was unable to open the data source." error.

I have been able to hack my way past this problem by adding "AND 1=1"
to the end of the query. However, this is still a hack, and I hate
hacks. I'd much rather identify and solve the underlying problem. Any
ideas?
Thanks,
Chris McKenzie
http://weblogs.asp.net/taganov



  #3   Report Post  
Posted to microsoft.public.word.mailmerge.fields
crm crm is offline
external usenet poster
 
Posts: 2
Default Word 2003 MailMerge with SQL Server 2000 problem

Okay, I switched the way I was connecting, and started using a DSN
instead. However, I have been unable to use a DSN-Less connection
string for Mail Merge purposes, and I have been unable to
programatically create a SQL dsn that has UID and PWD information.

If I could either create a DSN-less connection string for Mail Merge,
or create a dsn during installation that contains all login
information, then I can call this project done.

Any ideas?
Thanks,
Chris McKenzie

Peter Jamieson wote:
To be honest I'm amazed that your code would work with Word 2003 - if I use
an OpenDataSource call that specifies a dsn file but no connection string,
Word just thinks you're trying to open a text file.

Anyway, a few experiments here suggest that
a. if you are using ODBC to connect, you don't encounter this problem.
b. if you are using OLEDB to connect, you do encounter the problem you
describe. I have always found that the OLEDB provider seems to be more picky
about SQL syntax than the ODBC driver. It's possible that the ODBC driver is
translating the query (ODBC is certainly designed to do stuff like that) and
getting it right, and OLEDB is not, or it's possible that they are passing
different settings to SQL Server that cause Transact-SQL to behave
differently. I don't know.
c. What I generally find is that qualifying table names with an alias (and
possibly even /using/ the alias) makes OLEDB behave - e.g.

SELECT o.* FROM Orders o WHERE o.OrderDate ...

Personally I wouldn't use the 1=1 workaround on the grounds that the query
optimiser might not eliminate the expression (seriously! I don't know what
SQL Server does but I once did this with Oracle to get around some problem
and the query processor examined every candidate record, presumably to
ensure that 1 still equalled 1. Maybe that's gone now).

It's not part of your issue, but personally, I would also tend to use
'YYYY-MM-DD' format for dates, or even the official ISO one
(YYYY-MM-DDTHH:MM:SS, e.g. 2006-09-28T13:06:05 ) if it is supported in SQL
Server 2000, or do something like

myDate CONVERT(DATETIME, '1996-07-06 00:00:00', 102)

(you need to look up CONVERT in SQL Server books online to get the right
number - instead of 102 - for the date format you want to use). Assuming
that's in SQL SERVER 2000.

Peter Jamieson


"crm" wrote in message
ups.com...
I'm developing a Form Letter engine for my customers which pulls data
from their SQL Server 2000 database. The user clicks a button on the
toolbar which brings them to a data selection form. This form builds a
SQL Query behind the scenes based on their selections. I then Mail
Merge against the query. This works perfectly except when the filter
criteria on the query is a single date field.

Sample VBA Code:
Public Sub ExecuteMailMerge(query As String)

On Error GoTo err_handler

Dim dsn As String
dsn = "My DSN"

With ActiveDocument.MailMerge
.OpenDataSource dsn, LinkToSource:=False, _
SqlStatement:=query
.Execute False
End With

Exit Sub
err_handler:

MsgBox ("Failed to execute mail merge: " + Err.Description)

End Sub

Sample Query:
"SELECT * FROM [View Name] WHERE ( DateField = '9/08/2005 12:00:00 AM'
)"

Sample Query 2:
"SELECT * FROM [View Name] WHERE ( DateField = '9/08/2005' )"

When using a query involving a single date field, I get a "Failed to
execute mail merge: Word was unable to open the data source." error.

I have been able to hack my way past this problem by adding "AND 1=1"
to the end of the query. However, this is still a hack, and I hate
hacks. I'd much rather identify and solve the underlying problem. Any
ideas?
Thanks,
Chris McKenzie
http://weblogs.asp.net/taganov


  #4   Report Post  
Posted to microsoft.public.word.mailmerge.fields
Peter Jamieson Peter Jamieson is offline
external usenet poster
 
Posts: 4,582
Default Word 2003 MailMerge with SQL Server 2000 problem

With Word and ODBC you have to have a DSN.

If you use a machine (user/system) DSN (called "mydsn", say), you need

OpenDataSource _
Name:="", _
Connection:="DSN=mydsn;all your other connection info;", _
SQLStatement:="SELECT whatever"

and in Word 2002/2003 you will probably also need a further parameter,

Subtype:=wdMergeSubtypeWord2000

although in recent versions of 2003 you seem to be able to avoid that

If you use a file dsn (say, called c:\a\mydsn.dsn) then you need

OpenDataSource _
Name:="c:\a\mydsn.dsn", _
Connection:="FILEDSN=c:\a\mydsn.dsn;all your other connection info;", _
SQLStatement:="SELECT whatever"

(with the Subtype parameter as necessary.

In either case, you can include login and password information in "all your
other connection info". If you are using SQL Server integrated security, you
shouldn't need specific info., but you will need the correct text in the
connection string. I don't have the exact value names to hand but if you
can't find them, let me know.

It is certainly possible to put login/password in a file .dsn because a file
..dsn is just a text file in much the same format as .ini files, e.g.

[odbc]
keyword1=value1
keyword2=value2

etc.

However, as far as I know, if you include the login/password strings, they
are in clear text, not encrypted. It may be possible to include the same
things in a machine dsn by using the appropriate API or directly adding
entries to the registry, but I don't know for sure.

Not sure that answers your question, exactly, but if not let me know what
you're still missing...

Peter Jamieson

"crm" wrote in message
ups.com...
Okay, I switched the way I was connecting, and started using a DSN
instead. However, I have been unable to use a DSN-Less connection
string for Mail Merge purposes, and I have been unable to
programatically create a SQL dsn that has UID and PWD information.

If I could either create a DSN-less connection string for Mail Merge,
or create a dsn during installation that contains all login
information, then I can call this project done.

Any ideas?
Thanks,
Chris McKenzie

Peter Jamieson wote:
To be honest I'm amazed that your code would work with Word 2003 - if I
use
an OpenDataSource call that specifies a dsn file but no connection
string,
Word just thinks you're trying to open a text file.

Anyway, a few experiments here suggest that
a. if you are using ODBC to connect, you don't encounter this problem.
b. if you are using OLEDB to connect, you do encounter the problem you
describe. I have always found that the OLEDB provider seems to be more
picky
about SQL syntax than the ODBC driver. It's possible that the ODBC driver
is
translating the query (ODBC is certainly designed to do stuff like that)
and
getting it right, and OLEDB is not, or it's possible that they are
passing
different settings to SQL Server that cause Transact-SQL to behave
differently. I don't know.
c. What I generally find is that qualifying table names with an alias
(and
possibly even /using/ the alias) makes OLEDB behave - e.g.

SELECT o.* FROM Orders o WHERE o.OrderDate ...

Personally I wouldn't use the 1=1 workaround on the grounds that the
query
optimiser might not eliminate the expression (seriously! I don't know
what
SQL Server does but I once did this with Oracle to get around some
problem
and the query processor examined every candidate record, presumably to
ensure that 1 still equalled 1. Maybe that's gone now).

It's not part of your issue, but personally, I would also tend to use
'YYYY-MM-DD' format for dates, or even the official ISO one
(YYYY-MM-DDTHH:MM:SS, e.g. 2006-09-28T13:06:05 ) if it is supported in
SQL
Server 2000, or do something like

myDate CONVERT(DATETIME, '1996-07-06 00:00:00', 102)

(you need to look up CONVERT in SQL Server books online to get the right
number - instead of 102 - for the date format you want to use). Assuming
that's in SQL SERVER 2000.

Peter Jamieson


"crm" wrote in message
ups.com...
I'm developing a Form Letter engine for my customers which pulls data
from their SQL Server 2000 database. The user clicks a button on the
toolbar which brings them to a data selection form. This form builds a
SQL Query behind the scenes based on their selections. I then Mail
Merge against the query. This works perfectly except when the filter
criteria on the query is a single date field.

Sample VBA Code:
Public Sub ExecuteMailMerge(query As String)

On Error GoTo err_handler

Dim dsn As String
dsn = "My DSN"

With ActiveDocument.MailMerge
.OpenDataSource dsn, LinkToSource:=False, _
SqlStatement:=query
.Execute False
End With

Exit Sub
err_handler:

MsgBox ("Failed to execute mail merge: " + Err.Description)

End Sub

Sample Query:
"SELECT * FROM [View Name] WHERE ( DateField = '9/08/2005 12:00:00 AM'
)"

Sample Query 2:
"SELECT * FROM [View Name] WHERE ( DateField = '9/08/2005' )"

When using a query involving a single date field, I get a "Failed to
execute mail merge: Word was unable to open the data source." error.

I have been able to hack my way past this problem by adding "AND 1=1"
to the end of the query. However, this is still a hack, and I hate
hacks. I'd much rather identify and solve the underlying problem. Any
ideas?
Thanks,
Chris McKenzie
http://weblogs.asp.net/taganov




Reply
Thread Tools
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Why dont MS just f**king re-write Word from scratch? Its dogsh*t Word Hater Microsoft Word Help 33 May 5th 23 02:52 PM
Word 2003: Changing the increase/decrease rate of the indent icon? hayakaw1 Microsoft Word Help 11 December 22nd 08 09:58 PM
I am having difficulty with deleting headers and footers LHD New Users 5 July 24th 06 01:44 AM
WP merge file to Word sstires Tables 4 February 14th 06 06:26 PM
Text Direction Problem - Word 2003 to 2000 Ray K Tables 0 May 9th 05 08:11 PM


All times are GMT +1. The time now is 12:33 AM.

Copyright ©2000 - 2023, Jelsoft Enterprises Ltd.
Copyright 2004-2023 Microsoft Office Word Forum - WordBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Word"