在CSDN上有很多关于 sqlserver 的分页存储过程,
之前我写了一个网址,也用上了。
可现在老板说要改用 Access数据库,没办法呀,一定要改。
可是这样我的分页功能就是不是不能用了?Access能接受多行的查询语句吗?  它也有像 Sql Server 这样建立存储过程的吗?多行的或者你们有没有用Access做过分页的例子?没有分了,改天在报答你们,谢谢!!

解决方案 »

  1.   

    把你的sqlserver分页sp贴上来看看,是否可以改成access的
      

  2.   

    从网上抄的一个存储过程:CREATE PROCEDURE sp_page
      @tb         varchar(50), --表名
      @col        varchar(50), --按该列来进行分页
      @coltype    int,         --@col列的类型,0-数字类型,1-字符类型,2-日期时间类型
      @orderby    bit,         --排序,0-顺序,1-倒序
      @collist    varchar(800),--要查询出的字段列表,*表示全部字段
      @pagesize   int,         --每页记录数
      @page       int,         --指定页
      @condition  varchar(800),--查询条件
      @pages      int OUTPUT   --总页数
    AS
    /*
    功能描述:对指定表中满足条件的记录按指定列进行分页查询,分页可以顺序、倒序
             查询可以指定页大小、指定查询任意页、指定输出字段列表,返回总页数
    作    者:pbsql
    版    本:1.10
    最后修改:2004-11-29
    */
    DECLARE @sql nvarchar(4000),@where1 varchar(800),@where2 varchar(800)
    IF @condition is null or rtrim(@condition)=''
    BEGIN--没有查询条件
      SET @where1=' WHERE '
      SET @where2='  '
    END
    ELSE
    BEGIN--有查询条件
      SET @where1=' WHERE ('+@condition+') AND '--本来有条件再加上此条件
      SET @where2=' WHERE ('+@condition+') '--原本没有条件而加上此条件
    END
    SET @sql='SELECT @pages=CEILING((COUNT(*)+0.0)/'+CAST(@pagesize AS varchar)+
             ') FROM '+@tb+@where2
    EXEC sp_executesql @sql,N'@pages int OUTPUT',@pages OUTPUT--计算总页数
    IF @orderby=0
      SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+
               ' FROM '+@tb+@where1+@col+'>(SELECT MAX('+@col+') '+
               ' FROM (SELECT TOP '+CAST(@pagesize*(@page-1) AS varchar)+' '+
               @col+' FROM '+@tb+@where2+'ORDER BY '+@col+') t) ORDER BY '+@col
    ELSE
      SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+
               ' FROM '+@tb+@where1+@col+'<(SELECT MIN('+@col+') '+
               ' FROM (SELECT TOP '+CAST(@pagesize*(@page-1) AS varchar)+' '+
               @col+' FROM '+@tb+@where2+'ORDER BY '+@col+' DESC) t) ORDER BY '+
               @col+' DESC'
    IF @page=1--第一页
      SET @sql='SELECT TOP '+CAST(@pagesize AS varchar)+' '+@collist+' FROM '+@tb+
        @where2+'ORDER BY '+@col+CASE @orderby WHEN 0 THEN '' ELSE ' DESC' END
    EXEC(@sql)
    GO
    希望能尽快回复!!
      

  3.   

    改不了的,ACCSESS不支持存储过程用语句啦,既然用ACCSESS也没有多少记录,用不用存储过程还不是一样,简单的事何必要搞复杂呢
      

  4.   

    使用top xxx in 子查询作
      

  5.   

    access不支持存储过程 用sql查询不分页了也罢
      

  6.   

    灵活SQL看看我的分页算法strSQL="select top "+SumCont+" * from "+TableName+" where "+keystring+" NOT IN (SELECT TOP " +SumCont*(PageNumber-1)+" "+ keystring+" FROM "+TableName+" where 1=1 "+StrWhere+" ORDER BY "+Filed+" desc) "+StrWhere+" ORDER BY "+Filed+" desc";
      

  7.   

    不要一次全取出啦
     NOT IN 挺好
      

  8.   

    你给的存贮过程不是很好,我自己用C#写了一个:/// <summary>分页查询</summary>
    /// <param name="conn">指向Access的数据库连接</param>
    /// <param name="key_field">主键字段名称,这个分页程序要求被查表必须有一个主键字段</param>
    /// <param name="select">字段列表,相当于下面示例中 fieldList 部分</param>
    /// <param name="from">表的名称,相当于下面示例中 table 部分</param>
    /// <param name="where">查询条件,相当于下面示例中 expression 部分</param>
    /// <param name="orderby">排序子句,相当于下面示例中 sortFields 部分</param>
    /// <param name="firstRecord">返回的第1条记录,从1开始</param>
    /// <param name="lastRecord">返回的最后1条记录,记录序号从1开始算起</param>
    /// <returns>DataTable 类型的数据查询结果</returns>
    /// <example>
    /// 例如,希望查询数据表“table”中的数据,“table”表的主键是“id”, 查询第1-20条记录:
    ///       不分页的sql为:SELECT fieldList FROM table WHERE expression ORDER BY sortFields
    /// 则,对应的调用方法:
    ///       dt = PagingQuery(conn, "id", "fieldList", "table", "expression", "orderby", 1, 20);
    /// <example>
    /// <res>
    /// 主键,表名称必须填写, 查询条件,排序条件可以为String.Empty(不可为null);
    /// </re>DataTable PagingQuery(OleDbConnection conn, 
            string key_field, string select, string from, string where, string orderby,
            int firstRecord, int lastRecord)
    {
        firstRecord = Math.Max(1, firstRecord);    // 拼装sql
        string sql = String.Format(@"select top 100 percent {0} from {1}", 
                select, from, (where==""? "" : " where " + where), (orderby==""? "" : " order by " + orderby));    sql = String.Format(@"select top {4} {0} from ({2}) t where t.{1} not in
                (select top {3} {1} from ({2}) t0)",
                select, key_field, sql, firstRecord-1, lastRecord-firstRecord+1);    // 执行查询
        OleDbCommand cmd = new OleDbCommand(sql);
        cmd.Connection = conn;
        OleDbDataAdapter da = new OleDbDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        return dt;
    }
      

  9.   

    可以写一个分页控件,或者干脆用DataGrid的分页功能.
      

  10.   

    对不起,写完也没检查,发现个错误,修正一下:DataTable PagingQuery(OleDbConnection conn, 
            string key_field, string select, string from, string where, string orderby,
            int firstRecord, int lastRecord)
    {
        firstRecord = Math.Max(1, firstRecord);    // 拼装sql
        string sql = String.Format(@"select top 100 percent {0} from {1} {2} {3} ", 
                select, from, (where==""? "" : " where " + where), (orderby==""? "" : " order by " + orderby));    sql = String.Format(@"select top {4} {0} from ({2}) t where t.{1} not in
                (select top {3} {1} from ({2}) t0)",
                select, key_field, sql, firstRecord-1, lastRecord-firstRecord+1);    // 执行查询
        OleDbCommand cmd = new OleDbCommand(sql);
        cmd.Connection = conn;
        OleDbDataAdapter da = new OleDbDataAdapter(cmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        return dt;
    }