Subject: ASP-XML Mail Merge
Posted By: jfn12587 Post Date: 7/27/2005 12:57:35 AM
Sorry if this has been answered before, but here goes.  I got code for a Mail Merge from Microsoft, and it only works for me locally.  When run live, I get the following error:

The connection cannot be used to perform this operation.  It is either closed or invalid in this context.

What it's trying to do is use client-side VBScript to generate the merge by pulling an xml recordset from my live database.  Here's the code that gets the recordset:

''''''
<!--#include file="../includes/db-top.asp"-->
<%

  ' Execute the SQL statement.
  set oRS = objConn.Execute(replace(Request.QueryString("SQL"),"%20"," "))

    set rs = server.createobject("adodb.recordset")

    rs.fields.append "LName",200,255,&H00000020
    rs.fields.append "FName",200,255,&H00000020
    rs.fields.append "SchoolName",200,255,&H00000020

    rs.open

    TeacherID = ""
    'while not oRs.eof
        if TeacherID <> oRs("TeacherID") then
            rs.AddNew

            rs("LName") = oRs("LName")
            rs("FName") = oRs("FName")
            rs("SchoolName") = oRs("SchoolName")

            rs.update
        
            TeacherID = oRs("TeacherID")
        end if

        'oRs.movenext
    'WEND
        
  ' Save the recordset in the Response object.
  oRS.Save Response,1
%>
<!--#include file="../includes/db-bottom.asp"-->
''''''

And the code that is generating the merge

''''''
<%@ Language=VBScript %>
<HTML>
<BODY>
<SCRIPT LANGUAGE=VBScript>
Sub CreateDataDoc(oApp)
  ' Declare variables.
  Dim sServer,oDoc,oRS,sTemp,sHead,oRange,oField

  ' Place your server's name here.
  sServer = "<servername>"
  ' Create a new document.
  Set oDoc = oApp.Documents.Add
  ' Create a new recordset.
  Set oRS = CreateObject("ADODB.Recordset")
  ' Open the XML recordset from the server and pass the SQL statement
  ' to the Getdata.asp page.
  sSQL = "SELECT Teachers.TeacherID, Teachers.LName, Teachers.FName, Schools.SchoolName FROM (StudentsRelTeachers INNER JOIN Teachers ON StudentsRelTeachers.TeacherID = Teachers.TeacherID) INNER JOIN Schools ON Teachers.SchoolID = Schools.SchoolID ORDER BY Teachers.TeacherID;"
  oRS.Open "http://platths.com/JNedelka/top10/forms/Getdata.asp?SQL=" & sSql
  ' Convert the recordset to a string.
  sTemp = oRS.GetString(2, -1, vbTab)  ' 2 = adClipString

  ' Append the field names to the front of the string.
  For Each oField In oRS.Fields
    sHead = sHead & oField.Name & vbTab
  Next

  ' Strip off the last tab.
  sTemp = Mid(sHead, 1, Len(sHead) - 1) & vbCrLf & sTemp

  ' Get a range object and insert the text into the document.
  Set oRange = oDoc.Range
  oRange.Text = sTemp

  ' Convert the text to a table.
  oRange.ConvertToTable vbTab
  ' Save the document to a temp file.
  oDoc.SaveAs "C:\data.doc"
  ' Close the document (no save).
  oDoc.Close False
End Sub


'Sub ButtonClick()
  Dim oApp
  Dim oDoc
  Dim oMergedDoc

  ' Create an instance of Word.
  Set oApp = CreateObject("Word.Application")

  ' Create our data file.
  CreateDataDoc oApp

  ' Add a new document.
  Set oDoc = oApp.Documents.Add
  With oDoc.MailMerge
    ' Add our fields.
    .Fields.Add oApp.Selection.Range, "Fname"
    oApp.Selection.TypeText " "
    .Fields.Add oApp.Selection.Range, "Lname"
    oApp.Selection.TypeParagraph
    .Fields.Add oApp.Selection.Range, "SchoolName"
    oApp.Selection.TypeParagraph

    ' Create an autotext entry.
    Dim oAutoText
    Set oAutoText = oApp.NormalTemplate.AutoTextEntries.Add _
    ("MyLabelLayout", oDoc.Content)
    oDoc.Content.Delete
    .MainDocumentType = 1  ' 1 = wdMailingLabels

    ' Open the saved data source.
    .OpenDataSource "C:\data.doc"

    ' Create a new document.
    oApp.MailingLabel.CreateNewDocument "8160", "", _
         "MyLabelLayout", , 4  ' 4 = wdPrinterManualFeed

    .Destination = 0  ' 0 = wdSendToNewDocument
    ' Execute the mail merge.
    .Execute

    oAutoText.Delete
  End With

  ' Close the mail merge edit document.
  oDoc.Close False
  ' Get the current document.
  Set oMergedDoc = oApp.ActiveDocument
  ' Show Word to the user.
  oApp.Visible = True

  ' Uncomment these lines to save the merged document locally.
  'oMergedDoc.SaveAs "C:\test.doc"
  'oMergedDoc.Close False
  'oApp.Quit False
'End Sub

window.location.href="management.asp"
</SCRIPT>
<!--<INPUT type=button value="Create Word Document" onclick="VBScript:ButtonClick">//-->
</BODY>
</HTML>
'''''''

The error is on the line oRs.Open "http..."
Again, this works fine on my testing server but doesn't want to work live.  Is there some kind of setting I'm missing?  Local testing server is WinXP Pro, live is Server 2000.  Thanks
Reply By: raj_makro Reply Date: 1/11/2006 6:16:34 AM
Did you change the server name from your Local testing server to the live server at following line
' Place your server's name here.
  sServer = "<servername>"


Regards
Raj

Go to topic 38542

Return to index page 398
Return to index page 397
Return to index page 396
Return to index page 395
Return to index page 394
Return to index page 393
Return to index page 392
Return to index page 391
Return to index page 390
Return to index page 389