erebus 发表于 2009-7-8 07:36:35

mmsql 分页遇到的问题(已解决),求更好方法,tks

本帖最后由 erebus 于 2009-7-9 09:04 编辑

用ci做了个网站,发布到服务器上以后,每次访问到带有分页的页面时,分页连接可以显示,但是本页的内容就是显示不出来,随后就报出不能使用数据库的错误:Unable to select the specified database: lsrc       (lsrc是数据库名称)

我的ci是1.7版本,数据库驱动是用的此贴分享的,url地址:http://codeigniter.org.cn/forums/thread-72-1-5.html

驱动内容:
function _limit($sql, $limit, $offset)
{
// Horrible solucion =)
//$i = $limit + $offset;
//return preg_replace('/(^SELECT (DISTINCT)?)/i','\1 TOP '.$i.' ', $sql);      
$cursorName = 'mi_cursor_'.md5(strtolower($sql));
$sql = "DECLARE ".$cursorName." CURSOR DYNAMIC READ_ONLY FOR
    ".$sql."
    OPEN ".$cursorName."
    DECLARE @CURSOR AS INT
    SELECT @CURSOR = CURSOR_HANDLE FROMMASTER.DBO.SYSCURSORS
    WHERE CURSOR_NAME = '".$cursorName."'
    EXEC SP_CURSORFETCH @CURSOR, 32, ".($offset+1).", ".$limit."
    EXEC SP_CURSORCLOSE @CURSOR";
    return $sql;
}

一般什么问题啊,hex大哥帮帮忙,谢先!
在我的机器上是没哟问题的,难道是环境问题?服务器环境:win2003+iis+php5.0+sql2000

请大家帮忙分析下,谢谢

Hex 发表于 2009-7-8 10:20:05

目前还不能确定具体原因,但有可能是 CI 版本不同造成的,毕竟之前那个是基于 1.5.4 来做的。当然不排除服务器环境原因。

visvoy 发表于 2009-7-8 10:46:37

controller和model的分页部分代码贴一下吧

erebus 发表于 2009-7-9 09:03:39

本帖最后由 erebus 于 2009-7-9 09:49 编辑

已经解决,谢谢hex
服务器上的sql的权限不够或者把EXEC SP_CURSORFETCH 给禁掉了,自己把数据库驱动改了一下,但是这样比较弱,请大家讨论给下好点儿的解决办法。
我的网站基本都是一个表查询,语句都是select a,b,c from table where *** order by***类型的,所以就用一下变通办法,修改driver的_limit函数:

      function _limit($sql, $limit, $offset){
                $sql=trim($sql);
                if(strtolower(substr($sql,0,6))=='select'){
                        $sqlExep="select top ".intval($offset)." id ".strstr(str_replace('from','FROM',$sql),'FROM');
                        $sqlFrom="select top $limit ".substr($sql,6);
                        $sqlFromWhere=strstr(str_replace('where','WHERE',$sqlFrom),'WHERE');
                        if(empty($sqlFromWhere)){
                              $sqlFromOrder=strstr(str_replace('order','ORDER',$sqlFrom),'ORDER');
                              $sqlFrom=str_replace($sqlFromOrder,'',$sqlFrom);
                              $sqlFrom .= "where id not in(".$sqlExep.") ".$sqlFromOrder;
                        }else{
                              $sqlFrom=str_replace($sqlFromWhere,'',$sqlFrom);
                              $sqlFrom .= "where id not in(".$sqlExep.") and ".substr(trim($sqlFromWhere),5);
                        }
                        return $sqlFrom;
                }else{
                        return $sql;
                }
      }

Hex 发表于 2009-7-9 10:15:42

mssql 的分页方法太多了,比如可以 google 出来的基于存储过程的分页,这些都可以写到 _limit 函数中的。

visvoy 发表于 2009-7-9 12:14:26

俺是用mssql_seek分页,比较土
页: [1]
查看完整版本: mmsql 分页遇到的问题(已解决),求更好方法,tks