使用ADOQuery 如何分批或取记录,如每次100 条,(c/s结构,不是3层的)
现在我一共找到600 条记录.
在ADOQuery 的MaxRecords=100,在第一次打开时是100条,我如何获取下100 条那?

解决方案 »

  1.   

    ADOQuery.RecordSet.PageSize := 100;
    for i := 1 to ADOQuery.RecordSet.PageCount do
    begin
      ADOQuery1.Recordset.AbsolutePage := i;
    end;
      

  2.   

    有自增id吗
    按id划分纪录数
      

  3.   

    学习。
    但我自己写了一段代码实现分页的。
    用tlist和stringgrid来显示的。
      

  4.   

    学习。
    但我自己写了一段代码实现分页的。
    用tlist和stringgrid来显示的。
      

  5.   

    ADOQuery.RecordSet.PageSize := 100;
    for i := 1 to ADOQuery.RecordSet.PageCount do
    begin
      ADOQuery1.Recordset.AbsolutePage := i;
    end;////////////////
    大概就是这样子了,
    给AbsolutePage赋值,即是你要取的页号
      

  6.   

    ADOQuery.RecordSet.PageSize := 100;
    for i := 1 to ADOQuery.RecordSet.PageCount do
    begin
      ADOQuery1.Recordset.AbsolutePage := i;
    end;
    写在什么事件好那
      

  7.   

    使用存儲過程來操作
    //----分页存储过程开始创建-----------------------------------------------------------------------------------------------------------
    IF EXISTS (SELECT name FROM sysobjects WHERE name = 'PageShowOne' AND type = 'P')
       DROP PROCEDURE PageShowOne
    GOCREATE Proc PageShowOne
        @PageSize int=10 ,--每页显示的记录数
        @PageCurrent int=1 ,--当前要显示的页号
        @FdName varchar(100)='' ,--主键名或者标识列名
        @SelectStr varchar(2000)='', --select子句,不包含select关键字,如:*或者Id,UserId,UserName等。
        @FromStr varchar(1000)='', --from子句,不包含from关键子,如:myTable或者myTable,yourTable
        @WhereStr varchar(2000)='', --Where子句,不包含where关键字,如空的,或者 id>2 等
        @OrderByStr varchar(1000)='',--order by 子句,不包含order by 子句 ,如id desc,UserId asc 等
        @CountRows int=0 output, --返回记录总数
        @CountPage int=0 output --返回总页数
    as
    --------定义局部变量---------
    declare @Id1 varchar(20),@Id2 varchar(20) --开始和结束的记录号
    declare @OrderBySqls varchar(1000) --order by 子句
    declare @WhereSqls varchar(2000) --where 子句
    declare @Sqls nvarchar(4000) --最终组合成的Sqls语句
    declare @TmpStr varchar(2000) --临时
    ----------------------------
    if @OrderByStr <> ''
        set @OrderBySqls = ' order by '+@OrderByStr
    else
        set @OrderBySqls = ''
    --------
    if @WhereStr <> ''
        set @WhereSqls = ' where ('+@WhereStr+')'
    else
        set @WhereSqls = ''
    --------
    set @TmpStr = @WhereSqls
    --如果显示第一页,可以直接用top来完成
    if @PageCurrent<=1 
    begin
        select @Id1=cast(@PageSize as varchar(20))
        exec('select top '+@Id1+' '+@SelectStr+' from '+@FromStr+@WhereSqls+@OrderBySqls)
        goto LabelRes
    end
    ---------------------------
    select @Id1=cast(@PageSize as varchar(20))
           ,@Id2=cast((@PageCurrent-1)*@PageSize as varchar(20))
    ----------
    if @WhereSqls <> ''
        set @WhereSqls = @WhereSqls + ' and (' + @FdName+' not in(select top '+@Id2+' '+@FdName+' from '+@FromStr+@WhereSqls+@OrderBySqls+'))'
    else
        set @WhereSqls = ' where ' + @FdName+' not in(select top '+@Id2+' '+@FdName+' from '+@FromStr+@WhereSqls+@OrderBySqls+')'
    ----------
    set @Sqls = 'select top '+@Id1+ ' '+ @SelectStr+' from '+@FromStr+@WhereSqls+@OrderBySqls
    exec (@Sqls)
    -----------
    LabelRes:
    -----返回总记录数
    set @Sqls = 'select @a=count(1)  from '+@FromStr+@TmpStr
    exec sp_executesql @sqls,N'@a int output',@CountRows output 
    -----返回总页数
    if @CountRows <= @PageSize
        set @CountPage = 1
    else
    begin
        set @CountPage = @CountRows/@PageSize
        if (@CountRows%@PageSize) > 0
           set @CountPage = @CountPage + 1
    end
    return
    GO
    //----分页存储过程结束---------------------------------------------------------------------------------------//----Delphi7调用过程开始----------------------------------------------------------------------------------------首先在 public 中定义 i, RsCount: integer;
    在frmMain中放置一个dbgrid , datasource, AdoStoredProc [name->sp], 和4个 Button, 设置好相关连接!procedure TfrmMain.btnFirstClick(Sender: TObject);
    begin
      i := 1;
      sp.ProcedureName := 'PageShowOne;1';
      sp.Close;
      sp.Parameters.ParamByName('@PageSize').Value := 50;
      sp.Parameters.ParamByName('@PageCurrent').Value := i;
      sp.Parameters.ParamByName('@FdName').Value := '图纸编号';
      sp.Parameters.ParamByName('@SelectStr').Value := '图纸编号,模具形状一,模具形状二,模具形状三,最大高度,最大宽度,重量,有无波面,螺丝孔数';
      sp.Parameters.ParamByName('@FromStr').Value := 'tuzhi';
      sp.Parameters.ParamByName('@WhereStr').Value := '';
      sp.Parameters.ParamByName('@OrderByStr').Value := '日期';
      sp.Open;
      Label1.Caption := '记录总数:'+IntToStr(sp.Parameters.ParamValues['@CountRows']);
      Label2.Caption := '总页数:'+IntToStr(sp.Parameters.ParamValues['@CountPage']);
      RsCount := sp.Parameters.ParamValues['@CountPage'];
      Label3.Caption := '第 '+IntToStr(i)+ ' 页';
    end;procedure TfrmMain.btnNextClick(Sender: TObject);
    begin
      if i >= RsCount then
        ShowMessage('已经是最后一页!')
      else
        i := i + 1;
      sp.ProcedureName := 'PageShowOne;1';
      sp.Close;
      sp.Parameters.ParamByName('@PageSize').Value := 50;
      sp.Parameters.ParamByName('@PageCurrent').Value := i;
      sp.Parameters.ParamByName('@FdName').Value := '图纸编号';
      sp.Parameters.ParamByName('@SelectStr').Value := '图纸编号,模具形状一,模具形状二,模具形状三,最大高度,最大宽度,重量,有无波面,螺丝孔数';
      sp.Parameters.ParamByName('@FromStr').Value := 'tuzhi';
      sp.Parameters.ParamByName('@WhereStr').Value := '';
      sp.Parameters.ParamByName('@OrderByStr').Value := '日期';
      sp.Open;
      Label3.Caption := '第 '+IntToStr(i)+ ' 页';
    end;procedure TfrmMain.btnPriorClick(Sender: TObject);
    begin
      if i > 1 then
        i := i - 1
      else ShowMessage('已经是第一页了!');
      sp.ProcedureName := 'PageShowOne;1';
      sp.Close;
      sp.Parameters.ParamByName('@PageSize').Value := 50;
      sp.Parameters.ParamByName('@PageCurrent').Value := i;
      sp.Parameters.ParamByName('@FdName').Value := '图纸编号';
      sp.Parameters.ParamByName('@SelectStr').Value := '图纸编号,模具形状一,模具形状二,模具形状三,最大高度,最大宽度,重量,有无波面,螺丝孔数';
      sp.Parameters.ParamByName('@FromStr').Value := 'tuzhi';
      sp.Parameters.ParamByName('@WhereStr').Value := '';
      sp.Parameters.ParamByName('@OrderByStr').Value := '日期';
      sp.Open;
      Label3.Caption := '第 '+IntToStr(i)+ ' 页';
    end;procedure TfrmMain.btnLastClick(Sender: TObject);
    begin
      i := RsCount;
      sp.ProcedureName := 'PageShowOne;1';
      sp.Close;
      sp.Parameters.ParamByName('@PageSize').Value := 50;
      sp.Parameters.ParamByName('@PageCurrent').Value := i;
      sp.Parameters.ParamByName('@FdName').Value := '图纸编号';
      sp.Parameters.ParamByName('@SelectStr').Value := '图纸编号,模具形状一,模具形状二,模具形状三,最大高度,最大宽度,重量,有无波面,螺丝孔数';
      sp.Parameters.ParamByName('@FromStr').Value := 'tuzhi';
      sp.Parameters.ParamByName('@WhereStr').Value := '';
      sp.Parameters.ParamByName('@OrderByStr').Value := '日期';
      sp.Open;
      Label3.Caption := '第 '+IntToStr(i)+ ' 页';
    end;
    //--------------调用结束--------------------------------------------------------------------------------------------------------------------
    來自:http://down.gmplay.com 理想下載!
      

  8.   


    ADOQuery.RecordSet.PageSize := 100;
    for i := 1 to ADOQuery.RecordSet.PageCount do
    begin
      ADOQuery1.Recordset.AbsolutePage := i;
    end;
    -------------------------------------------
    可是不明白这段代码应该放到哪里啊?
      

  9.   

    ADOQuery.RecordSet.PageSize := 100;
    for i := 1 to ADOQuery.RecordSet.PageCount do
    begin
      ADOQuery1.Recordset.AbsolutePage := i;
    end;
    好像没反应