由于返回的结果集比较大!速度比较慢,我想实现在dbgrid中每次只显示500条记录!
进行翻页处理!每次从后台读入500条到内存中,再提取!我想可能会快的多!
但不知怎么去实现!??希望大家能提出更好的方法或者建议!!

解决方案 »

  1.   

    支持楼上!
    不过如果不是用三层的话该怎么办呢?
    这个还没做过,不过倒有种方法可以试一下:
    根据一个关键字段来决定查询的起始截止位置!
    先写个例子看看:
    var min,max:string;
    最初min随意定义一个最小值,同理max也定义一个值。
    select * from Table where id>'''+min+''' and id <='''+max+''''
    存入结果集;
    同时用一sql取出其最大最小值。with temp as (select * from Table where id>'''+min+''' and id <='''+max+'''') select max(id),min(id) from temp。
    下次取的时候就按这个原理,楼主不妨试一下!
      

  2.   

    参考
    如果可以排序的话(要不自己加一个自增id)
    select top 500 from table order by id
    记录最后一个排序的值ss
    第二次
    select * from table where id >ss and id =<ss+500 order by id
    ...
      

  3.   

    我就是两层结构的!先thank 楼上,现在问题?我怎么把记录读入内存中?在提取出来1!!?
      

  4.   

    分页显示 :  一个苯办法表加一个 ID ,int ,标识自增
    var  i : Integer ; //全局FormCreate : i := 0 ;procedure TForm1.Button1Click(Sender: TObject); //打开 ,每次显示10条记录
    begin
      with ADOQuery1 do
      begin
        Close ;
        Sql.Text := 'select * from TableName where Id > ' + IntToStr(10*i)
                + '  and id < ' + IntToStr(10*i + 11) ;
        Open ;
        First ;
      end;
      i := i + 1 ;
      if TButton(Sender) = Button1 then Button1.Enabled := False ;end;procedure TForm1.Button2Click(Sender: TObject);//下一页
    begin
      Button1Click(Button1) ;
    end;
      

  5.   

    如果是SQL 2000的话,可以这样写SQL 语句:select FieldName top 500 from table order by fieldName