Classic ASP中Access ODBC查询LIMIT语法错误问题排查
Classic ASP + Access 分页报错解决方案
嘿,这个问题我太熟了!你遇到的错误根源特别明确——Microsoft Access 数据库根本不支持MySQL里的LIMIT关键字,这就是为啥去掉LIMIT 15后语句能正常跑的原因。而且顺便提一句,就算是支持LIMIT的数据库,你原来的语句顺序也不对,正确逻辑应该是先排序再分页,ORDER BY要放在分页关键字前面才行。
下面给你针对Access的两种分页方案,根据你的Access版本选就行:
方案1:适用于Access 2007及以上(.accdb格式)
从Access 2007开始支持标准SQL的分页语法OFFSET ... FETCH NEXT,直接替换你的LIMIT就行,语法逻辑更清晰:
' 第一页:跳过0行,取前15条 sql = "SELECT * FROM prezzi ORDER BY posizione OFFSET 0 ROWS FETCH NEXT 15 ROWS ONLY" ' 第二页:跳过前15行,取接下来的15条 sql = "SELECT * FROM prezzi ORDER BY posizione OFFSET 15 ROWS FETCH NEXT 15 ROWS ONLY"
这里的OFFSET后面的数字就是你要跳过的行数,分页时直接用(页码-1)*每页条数来计算就行。
方案2:适用于旧版Access(.mdb格式)
旧版Access不支持OFFSET,只能用TOP结合子查询实现分页,原理是先排除前面页码的内容,再取当前页的条数:
' 第一页:直接取前15条 sql = "SELECT TOP 15 * FROM prezzi ORDER BY posizione" ' 第二页:先排除前15条,再取剩下的前15条 sql = "SELECT TOP 15 * FROM prezzi WHERE posizione NOT IN (SELECT TOP 15 posizione FROM prezzi ORDER BY posizione) ORDER BY posizione"
⚠️ 注意:这里的posizione字段必须是唯一的,如果不是,建议用表的主键(比如ID字段)替换,避免出现重复或漏数据的情况。
内容的提问来源于stack exchange,提问作者FranCode
相关产品推荐
相关产品推荐

