通知更新记录的问题
如果已经得到解答,我表示歉意,但是我现在真的没有时间彻底搜索。部分原因是因为我在为工作而努力。我从手机上询问,所以我不能截图等。通知更新记录的问题
我有一个建立在Access 2016中的数据库,并且有问题。
我有一个表格根据输入的内容更新表格,我希望查看表中是否有实际更新的内容,而不必打开查询和滚动结果。
我有一个宏设置为单击'update'按钮时运行,它根据特定字段的值运行不同的查询。 I.E. “如果字段= 6,runquery update6”
我叫RecordsChanged VBA的事情,是从字面上写了一个函数只是
[ AffectedRows = CurrentDb.RecordsAffected MSGBOX CStr的(AffectedRows)& “记载改变” ]
这是我从这里得到: How to show how many records were updated by an update query?
要退出散漫,消息框显示,但总是说0的记录,即使之前有WA一个人改变了。在挂接调用RecordsChanged的窗体上的按钮的宏的末尾有一个RunCode操作。
任何人都可以给我建议或解释?
据我所知,VBA中的DAO.Database.RecordsAffected
属性只适用于由DAO.Database.Execute
方法运行的SQL查询。既然你是无论如何从调用您的宏VBA函数,你可能有更好的运气使用DAO.QueryDef
对象中运行VBA查询和使用其RecordsAffected
属性,例如,
Public Function RunMyUpdateQuery(queryName As String)
Dim cdb As DAO.Database
Set cdb = CurrentDb
Dim qdf As DAO.QueryDef
Set qdf = cdb.QueryDefs(queryName)
qdf.Execute dbFailOnError
Dim affected As Long
affected = qdf.RecordsAffected
Set qdf = Nothing
Set cdb = Nothing
MsgBox affected & " record(s) affected."
End Function
其中宏会做
RunCode RunMyUpdateQuery("update6")
我即将离开工作,所以我会尝试明天的第一次机会。为了澄清,我会在访问本身中编写查询(我对SQL很好)将其保存为“update6”,然后或多或少地复制/粘贴您提供给VBA的内容?我认为我的混淆来自VB的语法。对于长时间的评论感谢,并感谢您的答案。 – D34DL0CK
答案是基于假设你已经有一个名为“update6”的保存更新查询(参考:我对该问题的评论)。如果你还没有保存的查询,那么你并不需要创建一个;你也可以让你的VBA代码'cdb.Execute'为SQL,然后使用'cdb.RecordsAffected'来获得计数。 –
对不起,迟到的回应。我一直都很忙。 谢谢你的回答。我稍微修改了一下,但那是我遇到的问题,而不是使用querydef对象recordsaffected。奇迹般有效。 – D34DL0CK
当你说“runquery update6”时,你的意思是“update6”是Access数据库中保存的更新查询的名称吗? –
Gord - 是的。不是字面的名字,但那是我的意思。它基本上在宏中设置为:if certain_field = 6 then runquery update6 – D34DL0CK
我已经玩了一下,我认为问题是要么我没有正确设置CurrentDb,要么在它询问是否任何记录都已更新,查询技术性完成。嗯... – D34DL0CK