用户
 找回密码
 入住 CI 中国社区
搜索
查看: 24511|回复: 28
收起左侧

[修补 Patch] [2.0.2]MSSQL 分页方法(limit)

[复制链接]
发表于 2007-11-27 18:20:40 | 显示全部楼层 |阅读模式
在 MSSQL 数据库驱动中,“_limit”函数无效,所以要修改“mssql_driver.php”这个文件。
修改文件“system/database/drivers/mssql/mssql_driver.php”中的“_limit”函数为:
PHP复制代码
function _limit($sql, $limit, $offset)
{
$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 FROM  MASTER.DBO.SYSCURSORS
    WHERE CURSOR_NAME = '"
.$cursorName."'
    EXEC SP_CURSORFETCH @CURSOR, 32, "
.($offset+1).", ".$limit."
    EXEC SP_CURSORCLOSE @CURSOR"
;
    return $sql;
}
复制代码
发表于 2007-11-27 21:42:27 | 显示全部楼层
只要修改这一个函数就可以了吗?
 楼主| 发表于 2007-11-27 23:26:47 | 显示全部楼层
是的,你试试吧,反正我这里没问题。
发表于 2007-11-28 08:38:38 | 显示全部楼层
能讲讲这几句代码的意思吗?谢谢

我把代码加上去了,好像没起任何作用。还有其他地方要做修改吗?
 楼主| 发表于 2007-11-28 09:32:06 | 显示全部楼层
不可能没作用吧,你看看修改的地方对吗,还有你的模型写的对吗?看看分页教程?
发表于 2007-11-28 12:49:38 | 显示全部楼层
模型写的应该是正确的,可以获得数据,只是没有分页,而是全部显示
 楼主| 发表于 2007-11-28 13:58:02 | 显示全部楼层
你在数据库查询里,用 limit() 这个函数了吗?
还是你自己手写的 SQL 语句?
MSSQL 分页问题主要是由于 MSSQL 没有 limit 这个东西。
不知道你那个是不是这个问题呢?
发表于 2007-11-29 08:58:23 | 显示全部楼层
我用的是MSSQL数据库,SQL语句如下:
SELECT Staff_ID, Staff_Name, Official_Name, Title, Brief FROM Staff_Brief Order By Staff_ID


我应该在什么地方调用Limit函数呢?能给个例子吗?谢谢先
 楼主| 发表于 2007-11-29 10:09:35 | 显示全部楼层
哦!你没用 Active Record 啊!那你就得自己写 SQL 了,我给你的代码就没用了,如果你用 AR 写就可以分页了。
发表于 2007-11-29 13:04:40 | 显示全部楼层
能给个用AR的DEMON吗?

本版积分规则