to chechy(chechy): 非常感谢你告诉我的方法,这个方法的确实现了分批次查询的功能,但是因为使用了datasetProvider,所以就会有一个clientdataset和一个给datasetprovider提供数据集的query,其实这个query在open时已经查出了所有记录,所以将这个方法用于c/s系统并没有达到我提高查询速度的目的。请问有无其它方法实现? 谢谢!
set rowcount @RecNo (自定义) select * from SomeTable where Id > :FirstNo set rowcount 0在整个过程中你要做的是怎样取得变量 :FirstNo 因为你要向前翻页,也要向后翻页,在实际操作中我们 会做一个存储过程来专门取出你从数据库里得到的第一 条记录及最后一条记录的ID(FirstId,LastId),随后你 就可以用 :FirstNo = LastId 代入上式向后翻页了 当你要向前翻页的时候你不得不用LastId在去做一次 查询select @firstID = Id from SomeTable Order By Id Desc 这个@FirstId 就是你向前翻页 时代入上式的 @FirstNo . 方法就是这样, 具体存储过程如何写,如何操作就 要看你自己了。 (别忘了给分)
to chechy(chechy): clientdataset的确只从datasetprovider中一次取20条记录。但query已经取出了所有记录,所以... 总之,谢谢你了。拿分!
to falaly(风雨): 你误解了问题的意思,“开始查询第1-20条纪录,当纪录移动到21条时,查询第21-40条纪录(注意:此时结果集 中是40条纪录),以此类推。” 谢谢参与!
要么,你就自己辛苦一些,做个cursor,慢慢地fetch好了。
非常感谢!我试一试。
非常感谢你告诉我的方法,这个方法的确实现了分批次查询的功能,但是因为使用了datasetProvider,所以就会有一个clientdataset和一个给datasetprovider提供数据集的query,其实这个query在open时已经查出了所有记录,所以将这个方法用于c/s系统并没有达到我提高查询速度的目的。请问有无其它方法实现?
谢谢!
还有的方法,我想大概只有CURSOR了,不过这样做很烦。
select * from SomeTable where Id > :FirstNo
set rowcount 0在整个过程中你要做的是怎样取得变量 :FirstNo
因为你要向前翻页,也要向后翻页,在实际操作中我们
会做一个存储过程来专门取出你从数据库里得到的第一
条记录及最后一条记录的ID(FirstId,LastId),随后你
就可以用 :FirstNo = LastId 代入上式向后翻页了
当你要向前翻页的时候你不得不用LastId在去做一次
查询select @firstID = Id from SomeTable
Order By Id Desc 这个@FirstId 就是你向前翻页
时代入上式的 @FirstNo .
方法就是这样, 具体存储过程如何写,如何操作就
要看你自己了。 (别忘了给分)
clientdataset的确只从datasetprovider中一次取20条记录。但query已经取出了所有记录,所以...
总之,谢谢你了。拿分!
你误解了问题的意思,“开始查询第1-20条纪录,当纪录移动到21条时,查询第21-40条纪录(注意:此时结果集
中是40条纪录),以此类推。”
谢谢参与!
而且是每次都保证数据集中只有恆定数量的记录,你所说
的机制跟ASP中用ADO分页机制是一样的,烂的很,当有
1000000条记录时,你取第999981-1000000条记录时看你
有没有效率可言!我提供的方案唯一的缺陷是不可跳转.
然后自己在Panel上加两个SpeedButton实现翻页,还有,键盘
也会响应DBGruid的上下翻滚,你必须扑捉该事件!
select top 20 key from tbl no in
(select top 20 key from tbl)
SELECT TOP 20 *
FROM ASM_LINE
WHERE line_no NOT IN
(SELECT TOP 20 line_no
FROM asm_line)