DoCmd.RunSQL不显示警告

时间:2013-04-11 17:56:09

标签: ms-access ms-access-2007

我选择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

3 个答案:

答案 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"