2017-08-26 49 views
-3

如果已经得到解答,我表示歉意,但是我现在真的没有时间彻底搜索。部分原因是因为我在为工作而努力。我从手机上询问,所以我不能截图等。通知更新记录的问题

我有一个建立在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操作。

任何人都可以给我建议或解释?

+0

当你说“runquery update6”时,你的意思是“update6”是Access数据库中保存的更新查询的名称吗? –

+0

Gord - 是的。不是字面的名字,但那是我的意思。它基本上在宏中设置为:if certain_field = 6 then runquery update6 – D34DL0CK

+0

我已经玩了一下,我认为问题是要么我没有正确设置CurrentDb,要么在它询问是否任何记录都已更新,查询技术性完成。嗯... – D34DL0CK

回答

1

据我所知,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") 
+0

我即将离开工作,所以我会尝试明天的第一次机会。为了澄清,我会在访问本身中编写查询(我对SQL很好)将其保存为“update6”,然后或多或少地复制/粘贴您提供给VBA的内容?我认为我的混淆来自VB的语法。对于长时间的评论感谢,并感谢您的答案。 – D34DL0CK

+0

答案是基于假设你已经有一个名为“update6”的保存更新查询(参考:我对该问题的评论)。如果你还没有保存的查询,那么你并不需要创建一个;你也可以让你的VBA代码'cdb.Execute'为SQL,然后使用'cdb.RecordsAffected'来获得计数。 –

+0

对不起,迟到的回应。我一直都很忙。 谢谢你的回答。我稍微修改了一下,但那是我遇到的问题,而不是使用querydef对象recordsaffected。奇迹般有效。 – D34DL0CK