Click here to Skip to main content
13,634,206 members
Click here to Skip to main content
Add your own
alternative version


38 bookmarked
Posted 6 Feb 2007
Licenced CPOL

How to Print a Document from SQL Stored Procedure

, 6 Feb 2007
Rate this:
Please Sign up or sign in to vote.
Print a document from a stored procedure using a SQL OLE and VB DLL


There are many different ways of pulling data out of the database and then format/print it according to your needs. The code below allows you to print a document from a stored procedure using a SQL OLE and VB DLL. The original article can be found at Siccolo Articles archive.

Step 1

At first, let's build a simple VB DLL (ActiveX component) that would handle the actual printing using Microsoft Word:

In ActiveX component, add a method that would print a document using Microsoft Word:

Public Sub PrintDocumentFromWord(ByVal DocumentFileName As String)

    On Error GoTo Err_Error

    Dim MethodName As String
    MethodName = ".PrintWebDocumentFromWord()"

    Dim strMessage As String

    Dim blnResult As Boolean

    Dim objWord As New Word.Application
    'Dim objWord As Object
    'Set objWord = CreateObject("Word.Application")

    Const wdAlertsNone = 0
    objWord.DisplayAlerts = wdAlertsNone

    'objWord.PrintOut FileName:=DocumentFileName
    Dim objDocument As Word.Document

    Set objDocument = objWord.Documents.Open(DocumentFileName)





    Set objDocument = Nothing
    Set objWord = Nothing

    Exit Sub


    'handle error here
    Call HandleError("PrintWebDocument", ApplicationName, MethodName, VBA.Error)

    If Not objWord Is Nothing Then
    End If

    Resume Exit_Procedure

End Sub

Compile and build ActiveX component. ActiveX component will reside on the same machine where SQL Server instance is running.

Step 2

Next, create a stored procedure that calls ActiveX component and passes file name of the document to be printed:

CREATE procedure sp_Print_Letter_File
    @file_name varchar(333)
    ,@debug_mode char(1)=''
    set nocount on

    declare @return int

    declare @print_document int
    declare @hr int
    declare @src varchar(255), @desc varchar(255)

    exec @hr = master.dbo.sp_OACreate 'PrintDocument.clsPrintDocument', _
	@print_document OUT
    if @hr <> 0    -- error creating instance!
           exec master.dbo.sp_OAGetErrorInfo  @print_document, @src out, @desc out
        select 'Creating Instance', hr=convert(varbinary(4),@hr), _
		source=@src, description=@desc
        set @return = -1
        goto error

if @debug_mode<>''
    print '1. created'

    exec @hr = sp_OAMethod @print_document, 'PrintDocumentFromWord',_
	null,@file_name, @debug_mode
    if @hr <> 0
           exec sp_OAGetErrorInfo @print_document, @src OUT, @desc OUT
        select 'Call to Method', hr=convert(varbinary(4),@hr), _
	Source=@src, Description=@desc

        exec @hr = sp_OADestroy @print_document
        if @hr <> 0
            exec sp_OAGetErrorInfo @print_document, @src out, @desc out
            select 'Destroing Instance',hr=convert(varbinary(4),@hr), _
		source=@src, description=@desc
        set @return = -2
        goto error


if @debug_mode<>''
    print '2. send to object'


    exec @hr = sp_OADestroy @print_document
    if @hr <> 0
        exec sp_OAGetErrorInfo @print_document, @src out, @desc out
        select 'Destroing Instance',hr=convert(varbinary(4),@hr), _
		source=@src, description=@desc
        set @return = -3

if @debug_mode<>''
    print '3. done!'

set nocount off


And that's it. Don't forget to register your ActiveX component (I usually do it with Component Services MMC snap-in).

If you would like to read more on this story - please take a look at Siccolo - Free Mobile Management Tool For SQL Server and more articles at Siccolo articles.


  • 6th February, 2007: Initial post


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

United States United States
No Biography provided

You may also be interested in...


Comments and Discussions

GeneralMy vote of 1 Pin
Dave Kreskowiak15-Feb-10 9:28
mvpDave Kreskowiak15-Feb-10 9:28 
QuestionHow to Print a Document from SQL Stored Procedure Pin
Carlos Davila12-Nov-09 5:32
memberCarlos Davila12-Nov-09 5:32 
QuestionHow to Print a Document from page Pin
m2kannan16-Apr-09 22:37
memberm2kannan16-Apr-09 22:37 
QuestionHow to Print Pin
adam amin29-Oct-08 1:05
memberadam amin29-Oct-08 1:05 
Hi, can anyone help me out with a correction or an alternative? Im using VB6.0 for my library Program and Im having difficulties in linking communication with my Ms Access Database and my printer, it displays printer 'run-time error 482' . I have the following code.

Private Sub CmdPRINT_Click()
If Opt1(0).Value = True Then
' Use 1 inch margins.
Const TOP_MARGIN = 1440
Const LEFT_MARGIN = 1440
Dim bottom_margin As Single
Dim mydb As Database
Dim qdef As QueryDef
Dim mytable As Recordset

MousePointer = vbHourglass

' Open the database.
Set mydb = Workspaces(0).OpenDatabase(App.Path & "\amisoft.mdb")
Set mytable = mydb.OpenRecordset("books", dbOpenTable)

Set qdef = mydb.CreateQueryDef("", _
"SELECT accession, author, isbn, title, Year FROM books WHERE section = 'Circulation'")
Set mytable = qdef.OpenRecordset(dbOpenSnapshot)

' Read the data and print it.
bottom_margin = Printer.ScaleTop + _
Printer.ScaleHeight - 1440

Printer.CurrentY = TOP_MARGIN
Do While Not mytable.EOF
' Use rs!FieldName to get the data for
' the field named FieldName.
Printer.CurrentX = LEFT_MARGIN

' See if we have filled the page.
If Printer.CurrentY >= bottom_margin Then
Printer.CurrentY = TOP_MARGIN
End If

' Finish printing.

MousePointer = vbDefault
End If
End Sub
QuestionCan already call COM objects in SQL 2000 Pin
trevorde stickman14-Feb-07 13:31
membertrevorde stickman14-Feb-07 13:31 
AnswerRe: Can already call COM objects in SQL 2000 Pin
aleksisa15-Feb-07 8:31
memberaleksisa15-Feb-07 8:31 
GeneralLicencing issue Pin
trevorde stickman14-Feb-07 13:23
membertrevorde stickman14-Feb-07 13:23 
GeneralRe: Licencing issue Pin
aleksisa15-Feb-07 8:29
memberaleksisa15-Feb-07 8:29 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Cookies | Terms of Use | Mobile
Web01 | 2.8.180712.1 | Last Updated 6 Feb 2007
Article Copyright 2007 by aleksisa
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid