我有一个 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/