set rowcount 20
select × from bbb where  .....

解决方案 »

  1.   

    用MIDAS,ClientDataset的PacketRecords设为20,就可以了。(注,即便是同一个程序,也可以使用MIDAS)。
      

  2.   

    普通的C/S程序,并没有禁止使用TDatasetProvider、TClientDataset啊?
    要么,你就自己辛苦一些,做个cursor,慢慢地fetch好了。
      

  3.   

    to chechy(chechy):
    非常感谢!我试一试。
      

  4.   

    to chechy(chechy):
    非常感谢你告诉我的方法,这个方法的确实现了分批次查询的功能,但是因为使用了datasetProvider,所以就会有一个clientdataset和一个给datasetprovider提供数据集的query,其实这个query在open时已经查出了所有记录,所以将这个方法用于c/s系统并没有达到我提高查询速度的目的。请问有无其它方法实现?
    谢谢!
      

  5.   

    可是我以前通过SQL MONITOR查看得时候,发现Query只从数据库中一次20条记录的取啊?这是怎么回事。
    还有的方法,我想大概只有CURSOR了,不过这样做很烦。
      

  6.   

    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 .
    方法就是这样, 具体存储过程如何写,如何操作就
    要看你自己了。 (别忘了给分)
      

  7.   

    to chechy(chechy):
    clientdataset的确只从datasetprovider中一次取20条记录。但query已经取出了所有记录,所以...
    总之,谢谢你了。拿分!
      

  8.   

    to falaly(风雨):
    你误解了问题的意思,“开始查询第1-20条纪录,当纪录移动到21条时,查询第21-40条纪录(注意:此时结果集
    中是40条纪录),以此类推。”
    谢谢参与!
      

  9.   

    kao,要想有最好的查询效率就必须自己做分页查询机制,
    而且是每次都保证数据集中只有恆定数量的记录,你所说
    的机制跟ASP中用ADO分页机制是一样的,烂的很,当有
    1000000条记录时,你取第999981-1000000条记录时看你
    有没有效率可言!我提供的方案唯一的缺陷是不可跳转.
      

  10.   

    你最好把DBGruid的边筐用Panel覆盖掉(目的:注销鼠标拖动)
    然后自己在Panel上加两个SpeedButton实现翻页,还有,键盘
    也会响应DBGruid的上下翻滚,你必须扑捉该事件!
      

  11.   

    如果有关键字的话,可以用
    select top 20 key from tbl no in
    (select top 20 key from tbl)
      

  12.   

    打错了,给你源代码算了
    SELECT TOP 20 *
    FROM ASM_LINE
    WHERE line_no NOT IN
              (SELECT TOP 20 line_no
             FROM asm_line)