Col*_*lin 3 ms-access 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
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
3021 bof或eof为true或当前记录已被删除
当我在没有WHERE子句的同一函数中运行完全相同的查询时,如下所示:
strsql0 = "SELECT lnk_stockitm.C_C FROM lnk_stockitm;
Run Code Online (Sandbox Code Playgroud)
我得到了56,000条记录的正确结果.如果我将带有WHERE子句的完整SQL语句粘贴到常规查询中,如下所示:
SELECT lnk_stockitm.C_C FROM lnk_stockitm WHERE (((lnk_stockitm.C_C) Like 'T*'));
Run Code Online (Sandbox Code Playgroud)
它返回结果的正确子集(2800条记录).
谁能告诉我我做错了什么?
通配符差异是导致从ADO执行的操作与访问数据库之间的差异的原因.将语句转换为使用"%"而不是"*".作为一般经验法则,通过在调用之前检查eof来封装代码可能是个好主意MoveLast.如果你的查询结果为零,那么它每次都会爆炸.
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
Run Code Online (Sandbox Code Playgroud)