以下是代码段:
Private Sub frmSearch_UnMarkAll()
Const sqlD As String = "DELETE * FROM PickList WHERE TableName = ""CARS"" AND KeyNo IN (" & _
"SELECT RecNo FROM Cars "
If frmSearch.WhereSql <> vbNullString Then
CurrentDb.Execute sqlD & frmSearch.WhereSql & ")"
End If
Stop
End Sub
通过单击frmSearch表单上的命令按钮来调用此函数。该按钮引发由上述代码处理的事件。 WhereSql是查找屏幕上显示的列表框中的where子句。它的值类似于&#34; WHERE Cars.RecNo&gt; 1441&#34; 当代码到达Stop语句时,我使用立即窗口并键入:
检查了RecordsAffected属性? Currentdb.RecordsAffected
0 is the result.
我检查了PickList表,删除了相应的项目。
我的问题:这是一个错误吗?或者,删除记录不影响它是否正常?
我已经解决了这个问题。我从PickList表中删除了SequenceNo字段。我在PickList表中创建了TableName和KeyNo并将其编入索引,并将Unique指定为yes。现在我只是
INSERT INTO PickList(TableName,LastChangedDate,KeyNo)
值( tablename ,now(),来自tablenamed的recno)
如果INSERT由于错误3022而失败,则尝试重复输入,我在此示例中忽略。其他一切都以我想要的方式发挥作用。当我在代码或视图中通过在调试器中打印来测试时,RecordsAffected属性始终为零。这仍然令人困惑,因为如果您以交互方式从访问中运行操作查询,则会显示所有信息。如果您运行其他关系DBMS(标准的那些),则在使用查询引擎时总会有反馈。如果这是访问中的错误,我发现很难相信其他人没有失败。我倾向于认为我搞砸了。希望我不是唯一的先锋。谢谢,提前看这个。
答案 0 :(得分:3)
请参阅答案here以了解出现问题的原因。实际上,当您获取RecordsAffected属性时,您不是指同一个对象。您需要在两种情况下都设置显式引用和使用。 类似的东西:
dim db as dao.database
set db=currentdb
db.execute "some SQL statement", dbfailonerror
debug.print db.recordsaffected