我选择DoCmd.RunSQL
代替CurrentDb.Execute
,因为我想利用Access的内置警告为用户提供回滚查询的选项。然而,就在我今天运行它时,我注意到它不再显示警告。我写这个程序时,我几乎是肯定的。
我已尝试明确设置DoCmd.SetWarnings True
,即使首先没有理由SetWarnings
关闭,但这并不能解决问题。有谁知道问题可能是什么?
我的代码在下面(为了节省空间而轻轻编辑)。作为参考,这是上下文菜单上的一个功能,它记录当前记录的字段值,并将记录集中的所有记录更新为相同的值。它生成的查询是正确的,并且它正确执行 - 但它不会首先显示警告消息。
Public Function FillFoundRecords()
On Error GoTo ErrHandler
Dim controlField As String, idName As String, _
commandText As String, whereClause As String
'First save the current record
DoCmd.RunCommand acCmdSaveRecord
controlField = Screen.ActiveControl.ControlSource
With Screen.ActiveForm
'Check for any where clauses or filters on the active form
whereClause = GetWhereClause(.RecordSource)
'Build the UPDATE command. This uses a few custom functions and properties,
'but it's not the problem -- it always produces the correct query statement.
commandText = _
"UPDATE " & .BaseTable & _
" SET [" & controlField & "] = " & ActiveControlFilter & _
" WHERE " & whereClause
DoCmd.SetWarnings True
DoCmd.RunSQL commandText
.Refresh
End With
ExitHandler:
On Error Resume Next 'Ignore further errors
Exit Function
ErrHandler:
If Err.Number = 2501 Then 'RunSQL command was cancelled; ignore this
Resume ExitHandler
Else
ErrorHandle
Resume ExitHandler
End If
End Function
答案 0 :(得分:3)
也许你前一段时间对这些警告感到恼火而且你禁用了它们?在“选项”菜单中(我认为在“高级”选项卡下),有3个切换:
确认记录更改
确认文件更改
确认操作查询
这些都是未经检查的吗?
答案 1 :(得分:2)
在您评论的评论中,您现在从DoCmd.RunSQL
收到了所需的确认消息。不幸的是,我们仍然不理解他们的暂时失踪。
但是,如果您依赖这些确认消息,请注意每个用户可以根据自己的偏好设置高级选项“确认操作查询”,您的应用程序将尊重她的偏好。
因此,如果您需要这些确认消息,请修改您的应用程序以确保您需要的设置。
Application.SetOption "Confirm Action Queries", True
然后,该更改将在Access会话中持续存在。为避免让用户烦恼,您可以在应用程序启动时检查设置......
? Application.GetOption("Confirm Action Queries")
...保存,然后在关机时使用Application.SetOption
重新恢复。
答案 2 :(得分:1)
我没有在 long 时间使用DoCmd.SetWarnings
,但是对于它的值,下面的代码会引发警告,就像我双击Action查询一样:
Sub queryTest()
Dim cdb As DAO.Database, qdf As QueryDef
Set cdb = CurrentDb
On Error Resume Next
DoCmd.DeleteObject acQuery, "zzzTempQuery"
On Error GoTo queryTest_Error
Set qdf = cdb.CreateQueryDef("zzzTempQuery", "UPDATE Clients SET LastName=""Thompson"" WHERE ID=25")
qdf.Close
Set qdf = Nothing
Set cdb = Nothing
DoCmd.SetWarnings True
DoCmd.OpenQuery "zzzTempQuery", acViewNormal
DoCmd.Close acQuery, "zzzTempQuery"
DoCmd.DeleteObject acQuery, "zzzTempQuery"
Exit Sub
queryTest_Error:
If Err.Number = 2501 Then
'' user cancelled - just exit
Else
Err.Raise Err.Number
End If
End Sub
嗯,我认为它可能与DoCmd.OpenQuery
有关,但这种变体也会引发警告:
DoCmd.SetWarnings True
DoCmd.RunSQL "UPDATE Clients SET LastName=""Thompson"" WHERE ID=25"