这是一个代码片段:
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 子句。它的值类似于“WHERE Cars.RecNo > 1441” 当代码到达 Stop 语句时,我通过使用立即窗口并键入以下内容来检查 RecordsAffected 属性:
? Currentdb.RecordsAffected
0 is the result.
我检查了 PickList 表并删除了相应的项目。
我的问题:这是一个错误吗?或者,删除记录不影响是正常的吗?
我已经解决了这个问题。我从 PickList 表中删除了 SequenceNo 字段。我在 PickList 表中的 TableName 和 KeyNo 上创建索引,并将 Unique 指定为 yes。现在我只是
INSERT INTO PickList (TableName,LastChangedDate,KeyNo)
Values(tablename,now(),recno from the tablenamed)
如果 INSERT 由于错误 3022 而失败,则这是我在本例中忽略的重复输入尝试。其他所有功能都按照我最初想要的方式运行。当我在我的代码中测试它或通过在调试器中打印查看时,RecordsAffected 属性始终为零。这仍然令人困惑,因为如果您以交互方式从访问中运行操作查询,则会显示所有这些信息。如果您运行其他关系 DBMS(标准的),那么在您使用查询引擎时总会有反馈。如果这是访问中的错误,我很难相信其他人不会失败。我倾向于认为我搞砸了。希望我不是孤独的先驱。感谢您提前查看此内容。
最佳答案
查看答案here解释出了什么问题。实际上,当您获得 RecordsAffected 属性时,您并不是在引用同一个对象。在这两种情况下,您都需要设置显式引用和使用。 像这样的东西:
dim db as dao.database
set db=currentdb
db.execute "some SQL statement", dbfailonerror
debug.print db.recordsaffected
关于ms-access-2013 - 删除 5 条记录但 RecordsAffected 属性为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36610395/