Preface
I'm making this question specific to conform to SO asking guidelines, but feel free to suggest wholesale redesign if you wish. I may be using some bad practices.
Basic Question
I use ADO to execute a multi-step SQL Server query that takes several minutes to execute. I use Raiserror in my tsql queries to let myself know more verbosely which steps have finished. Is it possible to pass these messages to VBA before the complete query finishes, while still continuing with the query?
Details and Code
I use the vba below to execute the t-SQL query underneath. As you can see, there are two errors raised in the t-SQL that display "Step 1 complete" and "Step 2 complete". Could I pass these messages (or alternately use error numbers and pass those) back to VBA in a way that would allow me to detect them and update a progress bar while continuing to execute the query?
VBA used to execute the query:
    Set cmd = New ADODB.Command
    cmd.ActiveConnection = cnn
    cmd.CommandTimeout = 0
    cmd.CommandText = strQuery
    Set rst = New ADODB.Recordset
    rst.Open cmd
    'Go to the second to last recordset of the multi-step query
    String1 = Replace(strQuery, ";", "")
    For Loop2 = 1 To (Len(strQuery) - (Len(String1) + 1))
        Set rst = rst.NextRecordset
    Next Loop2
    'Copy results
    If Not rst.EOF Then
        (snip - actions)
    Else
        MsgBox "Error: No records returned."
    End If
Stripped-down piece of multi-step tSQL query:
--#DRS1: The numbers being researched   
select distinct numbers 
into #DRS1
from Table1 (nolock)    
where numbers in ()
--#DRS1: Index
create nonclustered index Idx_DRS1
    on #DRS1(numbers);
Raiserror(“Step 1 complete”,1,1) with nowait;
--#DRS2: Table2 for numbers being researched
select distinct
 DRS1.numbers
,a.ID
into #DRS2
from #DRS1 DRS1
join Table2 (nolock) a  
    on DRS1.numbers = a.numbers
Raiserror(“Step 2 complete”,1,1) with nowait;
--MORE STEPS
(more steps)
(more raiserror statements)
Clarification
I am not interested in:
- A method that doesn't allow me to update a progress bar until the query is completely done.
- A method that uses Progress/MaxProgress, because as I understand it that would return separate numbers for each of the steps in my query, rather than one progress measure for the entire query.
I am less interested in:
- Using # records affectedmessages to determine progress, because some steps may return equal numbers of records to previous steps.
Research
The closest thing I have found to what I'm looking for is here, but as the discussion of that solution here says:
This approach would only work for stored procedures that are not intended to return results, say procs that insert data into tables. Another approach would be needed if your stored proc returns a result set.
Since I return results in the final step of my query to be manipulated in Excel I don't think this would work for me.
External link code for reference
SQL:
CREATE PROCEDURE dbo.updTesting As
Declare @RetVal integer
Exec @RetVal = updTesting2
Return @RetVal
GO
CREATE PROCEDURE dbo.updTesting2 As
raiserror('Error From Testing 2 procedure',16,1)
Return -2
GO
VBA:
Private Sub Command1_Click()
    On Error GoTo ErrorHandler
    Dim db As ADODB.Connection
    Dim cmd As ADODB.Command
    Set db = New ADODB.Connection
    db.CursorLocation = adUseClient
    db.Open "provider=sqloledb;data source=handel;initial catalog=northwind;integrated security=sspi"
    Set cmd = New ADODB.Command
    With cmd
        Set .ActiveConnection = db
        .CommandText = "updTesting"
        .CommandType = adCmdStoredProc
        .Parameters.Append .CreateParameter("@RetVal", adInteger, adParamReturnValue)
        .Execute , , adExecuteNoRecords
    End With
ExitPoint:
    On Error Resume Next
    Set cmd.ActiveConnection = Nothing
    Set cmd = Nothing
    db.Close
    Set db = Nothing
    Exit Sub
ErrorHandler:
    MsgBox "Error # " & Err.Number & vbNewLine & vbNewLine & Err.Description
    Resume ExitPoint
End Sub
 
     
    

