Figure 1 Object Design
Figure 2 Transactional Object Design
Figure 3 Ax.dll Code
Option Explicit
Const sconn = _
"Provider=sqloledb;server=(local);database=pubs;uid=sa;pwd="
Public Function ExecFailedSPROC() As Integer
On Error GoTo errorhandler
Dim ctx As ObjectContext
Dim conn As ADODB.Connection
Set ctx = GetObjectContext()
Set conn = New ADODB.Connection
conn.Open sconn
Call conn.Execute("spRaiseError")
ctx.SetComplete
Exit Function
errorhandler:
If conn.Errors.Count > 0 Then
Dim errObj As ADODB.Error
For Each errObj In conn.Errors
Debug.Print errObj.Description
Debug.Print errObj.NativeError
Debug.Print errObj.Number
Debug.Print errObj.Source
Next
Else
Debug.Print Err.Description
Debug.Print Err.Number
End If
ctx.SetAbort
Exit Function
End Function
Figure 4 Revised Ax.dll Code
Option Explicit
Const sconn = _
"Provider=sqloledb;server=(local);database=pubs;uid=sa;pwd="
Public Function ExecFailedSPROC() As Integer
On Error GoTo errorhandler
Dim ctx As ObjectContext
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Set ctx = GetObjectContext()
Set conn = New ADODB.Connection
conn.Open sconn
Set rs = conn.Execute("spRaiseError")
Do Until rs Is Nothing
rs.NextRecordset
Loop
ctx.SetComplete
Exit Function
errorhandler:
If conn.Errors.Count > 0 Then
Dim errObj As ADODB.Error
For Each errObj In conn.Errors
Debug.Print errObj.Description
Debug.Print errObj.NativeError
Debug.Print errObj.Number
Debug.Print errObj.Source
Next
Else
Debug.Print Err.Description
Debug.Print Err.Number
End If
ctx.SetAbort
Exit Function
End Function