该示例举例说明了如何执行一个返回多个结果集的查询。对于存储过程来说,返回多个行组或返回包含动作查询结果的多个结果集是很普通的。结果,您的代码必须分别处理每个结果集,否则您将不能使用自己的查询结果。在 RDO 中,您使用 MoreResults 方法来每次处理一个结果集。每次对 MoreResults 的调用都将关闭当前的结果集,并移动到下一个结果集(如果有的话)。
Private Sub MultipleRSButton_Click()
sql = "Select * from Authors Where year_born is not null; " _
& "Select * from Authors where year_born is null"
Set rs = cn.OpenResultset(sql)
rdoGrid1.ShowData rs
i = MsgBox("Ready for next results?", vbYesNoCancel)
If i = vbYes Then
If rs.MoreResults Then
rdoGrid1.ShowData rs
End If
End If
End Sub
下面的代码举例说明了如何在 ADO 中处理返回多个结果集的 SP。ADO 的解决方案与 RDO 解决方案的不同之处在于:ADO 用的是 NextRecordset 方法,在该方法中,您将批处理中的下一个记录集分配给某个 ADO Recordset 对象。下一个记录集的读取并不覆盖第一个,如同在 RDO 中的那样。ADO 还允许多个记录集,如果数据提供程序支持的话。
Private Sub MultipleRSButton_Click()
Dim rs As New ADODB.Recordset
sql = "Select * from Authors Where year_born is not null; " _
& "Select * from Authors where year_born is null"
rs.Open sql, cn
Do
i = MsgBox("Ready for results?", vbYesNoCancel)
If i = vbYes Then
ADOGrid1.ShowData rs
Set rs = rs.NextRecordset
End If
Loop Until rs.State = adStateClosed
End Sub