是否可以在不使用记录集的情况下获取使用更新查询更新的记录报告?
例如:
sqltext = update table employees set bonus = 0 where salary > 50000
DoCmd.RunSQL sqltext
运行此查询后,是否可以获取为其执行此更新查询的员工的姓名?
答案 0 :(得分:4)
使用DoCmd.RunSQL
并不是一个好主意,因为它会生成一个提示(如果你不想要它就必须关闭),即使出现错误也会完成更新,而不是报告错误。更好的是用一个执行相同SQL的函数替换它:
Public Function SQLRun(strSQL As String) As Boolean
On Error GoTo errHandler
CurrentDB.Execute strSQL, dbFailOnError
SQLRun= True
exitRoutine:
Exit Function
errHandler:
MsgBox err.Number & ": " & err.Description, vbExclamation, "Error in SQLRun()"
Resume exitRoutine
End Function
将其放入公共模块后,您可以轻松地进行全局搜索并替换DoCmd.RunSQL
以将其替换为SQLRun
。
编辑:此函数的另一个版本返回受影响的记录数here。
答案 1 :(得分:2)
我知道这是一个老问题,但没有直接回答OP问题的答案(我在尝试记住语法时通过Google Top 3结果到达此处) 如果使用Execute方法,则可以直接获取受影响的记录数:
sqltext = "update table employees set bonus = 0 where salary > 50000"
CurrentDb.Execute sqltext
AffectedRows = CurrentDb.RecordsAffected
'Optional Notification
MsgBox CStr(AffectedRows) & " records were affected by this SQL statement."
答案 2 :(得分:1)
除非您有另一个区别字段(可能是更新的日期字段),否则我目前没有看到任何方式在更新查询运行后获取信息。为什么不为它运行一个select查询并运行该数据的报告,然后运行更新查询来更改'bonus'的值。
如果这有帮助,请告诉我! JFV