Figure 1   Listener Takes a Request


Dim QI1 As MSMQQueueInfo, RequestQueue As MSMQQueue
Set QI1 = New MSMQQueueInfo
QI1.PathName = "MyServerComputer\MyQueue"
Set RequestQueue = QI1.Open(MQ_RECEIVE_ACCESS, MQ_DENY_RECEIVE_SHARE)
Dim msgRequest As MSMQMessage
Set msgRequest = RequestQueue.Receive(ReceiveTimeout:=0)
If Not (msgRequest Is Nothing) Then
  ' (1) process message
  ' (2) send notification back to client
  Dim QI2 As As MSMQQueueInfo, ResponseQueue As MSMQQueue
  Set QI2 = msg.ResponseQueueInfo
  Set ResponseQueue = QI2.Open(MQ_SEND_ACCESS, MQ_DENY_NONE)
  Dim msgResponse As MSMQMessage
  Set msgResponse = New MSMQMessage
  msgResponse.Label = "Receipt for: " & msgRequest.Label
  msgResponse.Body = "Your sales transaction has been completed"
  msgResponse.CorrelationId = msgRequest.Id
  msgResponse.Send ResponseQueue
  ResponseQueue.Close
End If
RequestQueue.Close

Figure 2   Assigning an ADO Recordset


Dim conn As New Connection
conn.Open "PROVIDER=SQLOLEDB;SERVER=(local);" & _
          "DATABASE=Pubs;UID=sa;PWD=;"
Dim rs As Recordset
Set rs = New Recordset
rs.CursorLocation = adUseClient
rs.CursorType = adOpenStatic
rs.LockType = adLockReadOnly
rs.Open "SELECT * FROM authors", conn
' pack recordset into a new message
Dim msg As MSMQMessage
Set msg = New MSMQMessage
msg.Body = rs
' send message to queue
msg.Send ResponseQueue
q.Close
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing

Figure 3   Creating the Recordset


Dim rs As Recordset
Set rs = New Recordset
rs.Fields.Append "Customer", adBSTR, -1
rs.Fields.Append "Product", adBSTR, -1
rs.Fields.Append "Quantity", adInteger
rs.Open ' open in order to add rows
' add first order
rs.AddNew
rs("Customer") = "Bob"
rs("Product") = "LavaLamp"
rs("Quantity") = 144
rs.Update
' add second order
rs.AddNew
rs("Customer") = "Bob"
rs("Product") = "MoodRing"
rs("Quantity") = 10
rs.Update
' pack recordset into a new message
Dim msg As MSMQMessage
Set msg = New MSMQMessage
msg.Body = rs
  ' send message to queue
msg.Send q