ms-access - 错误代码 3021 bof 或 eof 为真或当前记录已被删除

标签 ms-access vba

我有一个 Access 2003 数据库,其中包含一些使用 ADO 调用的可视化基本代码。当我做一个

strsql0 = "SELECT lnk_stockitm.C_C FROM lnk_stockitm WHERE (((lnk_stockitm.C_C) Like 'T*'));"
newRS.Open strsql0, cn1, adOpenKeyset, adLockReadOnly  
newRS.movelast

我收到此错误:

3021 either bof or eof is true or the current record has been deleted

当我在没有 WHERE 子句的情况下在同一个函数中运行完全相同的查询时,如下所示:

strsql0 = "SELECT lnk_stockitm.C_C FROM lnk_stockitm;

我得到了 56,000 条记录的正确结果。如果我将带有 WHERE 子句的完整 SQL 语句粘贴到常规查询中,如下所示:

SELECT lnk_stockitm.C_C FROM lnk_stockitm WHERE (((lnk_stockitm.C_C) Like 'T*'));

它返回正确的结果子集(2800 条记录)。

谁能告诉我我做错了什么?

最佳答案

通配符差异是导致您从 ADO 执行的内容与在您的 access 数据库中执行的内容之间存在差异的原因。将您的语句转换为使用“%”而不是“*”。作为一般经验法则,在调用 MoveLast 之前通过检查 eof 来封装代码可能是个好主意。如果您的查询的结果为零,则每次都会被炸毁。

strsql0 = "SELECT lnk_stockitm.C_C FROM lnk_stockitm WHERE (((lnk_stockitm.C_C) Like 'T*'));"
newRS.Open strsql0, cn1, adOpenKeyset, adLockReadOnly  

if not newRs.eof then
   newRS.movelast
else
  ' do something here if necessary to handle blank results
end if

关于ms-access - 错误代码 3021 bof 或 eof 为真或当前记录已被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1712383/

相关文章:

sql-server - Access 从 SQL Server 截断我的 Decimal 值的链接表

vba - 如何查找项目符号列表并设置项目符号格式(VBA _ Word 文档)

vba - Excel宏函数中插入饼图

excel - MS Excel 对于每个循环 : Insert Rows

ms-access - 从 LotusScript 写入 MS Access 中的日期/时间数据字段的 SQL 查询语法是什么?

聚合函数上的 SQL 比较

sql - “CREATE TABLE”生成运行时错误 '3290'

vba - 如何编辑 Access ADP 文件?

excel - 在当前目录中打开工作簿

excel - 索引匹配以返回最接近匹配值的相邻单元格