Any SQL statement can include multiple SELECT statements or stored procedures that invoke one or more SELECT statements. Each SELECT statement generates a result set that must be processed by your code or discarded before the resources are released and the next result set is made available. Because you don’t necessarily know how many result sets will be generated by a stored procedure, your code must be prepared to process an unknown number of result sets. Note that when a stored procedure returns multiple result sets, none of the result sets can be updated.
You can use either client-side cursors or server-side cursors to retrieve multiple result sets. If you use client-side cursors, multiple result sets are returned no matter what type of Recordset object you open. If you use server-side cursors to retrieve multiple result sets, you must open a forward-only-type Recordset object.
Û To retrieve multiple result sets
The following example prints the values of each field for each record in each result set.
Function GetMultipleResults()
	Dim wrk As Workspace, rst As Recordset, cnn As Connection, qdf As QueryDef
	Dim fld As Field, strSQL As String, strConnect As String, fDone As Boolean
	' Create ODBCDirect workspace.
	Set wrk = DBEngine.CreateWorkspace("ODBCDirect", "Admin", "", dbUseODBC)
	' Create connection string.
	strConnect = "ODBC;DSN=Pubs;DATABASE=Pubs;UID=sa;PWD=;"
	' Open connection.
	Set cnn = wrk.OpenConnection("", dbDriverNoPrompt, False, strConnect)
	' Create SQL statement.
	strSQL = "SELECT au_lname, au_fname FROM Authors; SELECT title FROM Titles;"
	' Set default cursor driver.
	wrk.DefaultCursorDriver = dbUseServerCursor
	' Create temporary QueryDef object.
	Set qdf = cnn.CreateQueryDef("", strSQL)
	qdf.CacheSize = 1
	' Open recordset on QueryDef.
	Set rst = qdf.OpenRecordset(dbOpenForwardOnly)
	Do Until fDone = True
		' Print values for each field in each record of recordset.
		While Not rst.EOF
			For Each fld In rst.Fields
				Debug.Print fld.Value
			Next fld
			rst.MoveNext
		Wend
		fDone = Not rst.NextRecordset()
	Loop
	rst.Close
	cnn.Close
	wrk.Close
End Function