3

这是一个代码片段:

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)
值( tablename ,now(),recno from the tablenamed)

如果由于错误 3022 而导致 INSERT 失败,则表示尝试重复条目,我在此示例中忽略了该条目。其他一切都按照我最初想要的方式运行。当我在代码中测试 RecordsAffected 属性或通过在调试器中打印来查看它时,它始终为零。这仍然令人困惑,因为如果您以交互方式从 access 运行操作查询,则会显示所有这些信息。如果您运行其他关系 DBMS(那些是标准的),那么在您使用查询引擎时总会有反馈。如果这是访问中的错误,我很难相信其他人没有失败。我倾向于认为我搞砸了。希望我不是唯一的先驱。谢谢,提前看这个。

4

1 回答 1

3

请参阅此处的答案以了解发生了什么问题。实际上,当您获得 RecordsAffected 属性时,您并没有引用同一个对象。您需要在这两种情况下设置显式引用和使用。就像是:

dim db as dao.database
set db=currentdb
db.execute "some SQL statement", dbfailonerror
debug.print db.recordsaffected
于 2016-04-14T07:43:57.373 回答