Delphi 中 NextRecordset(j)

j:=0;DSTMRBpdctnomx.Recordset:=spMrbPdctno.NextRecordset(j);DSTMRBpdctno.Recordset:=s... j := 0;
DSTMRBpdctnomx.Recordset := spMrbPdctno.NextRecordset(j);
DSTMRBpdctno.Recordset := spMrbPdctno.NextRecordset(j);
什么意思,起什么作用
展开
 我来答
匿名用户
2013-05-14
展开全部
/*
* 标题: ADO的NextRecordset()的用法
* 作者:焦佳旺 网名:风归叶
* 如转载,请保持文档内容的完整性,谢谢!
*/

表1
产品ID 单位重量 销售数量
1 2.5 100
2 3.6 89
3 5.0 20

如果想得到单位重量大于3的产品信息在客户端显示出来(比如用DBGrid).
那么可以很简单的
select 产品ID,单位重量,销售数量 from 表1 where 单位重量 > 3
就行了.

如果客户又提出来,我还想知道单位重量大于3的产品一共销售了多少.怎么办呢?
我们可以
select 产品ID,sum(销售数量) as 合计 from 表1 where 单位重量 > 3

我们发现,必须要执行两次.也就是说,有两条SQL语句要发送,当然SQL数据库也就要分别编译.对于简单的SQL语句,
这不算什么,如果是复杂的SELECT查询呢?多少会影响效率吧.

熟悉SQL的朋友们都知道,类似的问题可以用一条SQL语句解决,即加上COMPUTE.

例如:
/*
*执行前,请在SQL2000中安装PUBS示例数据库
*/
USE pubs
SELECT type, price, advance
FROM titles
ORDER BY type
COMPUTE SUM(price), SUM(advance)
执行结果会有两个结果集. 一个是符合条件的数据, 另一个是合计.

那么上面的语句用ADODataset执行可不可以呢?答案是肯定的.
并且返回的也是两个结果集. 说到这,聪明的朋友肯定想到了. ADO的NextRecordset()原来是干这个用的!
例如
TADOTable *tbl;
try
{
int i;
tbl = new TADOTable(this);
tbl->Recordset = dtsFind->NextRecordset( i );
StatusBar->Panels->Items[0]->Text = "共有记录: " + IntToStr( dtsFind->RecordCount ) + " 条";
StatusBar->Panels->Items[1]->Text = "中国税务 " + tbl->Fields->Fields[0]->AsString + " 册";
StatusBar->Panels->Items[2]->Text = "税务研究 " + tbl->Fields->Fields[1]->AsString + " 册";
}
__finally
{
delete tbl; tbl = NULL;
}

这时候,我就可以访问tbl的中的数据了.也就是合计的数据.
可以发现, 这个方法在查询的时候很有用,一次查询,就可以得到两个"表"的内容了.省了不少事吧!:)
如果你对sql语句很精通,也可以返回3个或更多的结集.
更多追问追答
追问
那0是返回第一个数据集吗!
追答
是的
lovesky0414
2013-05-15 · TA获得超过3353个赞
知道大有可为答主
回答量:1610
采纳率:66%
帮助的人:1578万
展开全部
一个存储过程返回多个查询结果集的时候 用nextrecordset来查看下一个结果集
这里就是分别读取 第二个结果集和第三个结果集
追问
从哪可以看出是第二个和第三个
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式