如何强制Access查询数据表刷新其数据

时间:2017-06-19 16:54:02

标签: ms-access select refresh ms-access-2013

我是访问新手,我想要做的是选择标准,所以我使用向导创建了一个查询,并使用表单中的文本([Forms]![Form1]![Transacao]设置标准])并创建了一个按钮,以便在第一次运行查询时工作得很好,但是当我键入其他内容并单击按钮时,数据不会刷新。我需要做些什么才能刷新?我试图在事件点击按钮时添加刷新,但没有用。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

在Access中,通常在默认的数据表视图中打开查询。此默认数据表包含在窗口(或选项卡)中,只能使用宏或VBA中的DoCmd进行访问。

查询窗口打开后,当新记录添加到基础表时,其数据不一定会自动更新。数据表需要" requeried "。 (顺便说一句,术语"刷新"通常用于表示"重绘"屏幕上的窗口,与数据无关。在编程和开发环境中尤其如此它处理屏幕上的数据和绘图/绘画窗口和控件。)

这是强制查询更新其数据的一种方法(在默认数据表视图中打开时):

DoCmd.OpenQuery "QueryName"
DoCmd.Requery

如果查询窗口已经打开,则调用OpenQuery也应该激活它。如果您发现窗口未激活,您也可以在DoCmd.SelectObject acQuery, "QueryName"之前致电DoCmd.Requery

DoCmd方法对应于宏操作,因此如果查询是由宏激活的,只需在之后将 Requery 操作添加到宏 { {1}}或OpenQuery次操作。保留SelectObject操作空白Control Name参数,以强制更新整个查询。

答案 1 :(得分:1)

我知道这个问题现在有点过时了,但是由于我找不到适合这个问题的答案,并且上述答案对我没有用(并且仍然没有被接受),我想我将为仍然停留在Access中开发应用程序的那几个糟糕的问题提供我的解决方案。我的用例略有不同(更改查询的基础SQL,然后打开/刷新它),但是可以应用相同的原理。要点是首先check to see if the query is open,然后将其关闭。然后再次打开它。

为此,请将以下代码粘贴到VBA模块中:

Public Function open_or_refresh_query(query_name As String, Optional sql_str As String = "")
' Refresh or open an existing query
' query_name: Name of the query
' sql_str: optional new SQL string if changing the underlying SQL. If not given,
'   the query will open with its existing SQL string

    On Error GoTo err_handler

    Dim qdf As QueryDef
    ' Loop through each query in the DB and find the one of interest by name
    For Each qdf In CurrentDb.QueryDefs
        If qdf.Name = query_name Then
            ' If the query is open, close it
            If SysCmd(acSysCmdGetObjectState, acQuery, query_name) <> 0 Then
                DoCmd.Close acQuery, query_name, acSaveNo
            End If
            Exit For
        End If
    Next qdf

    Set qdf = CurrentDb.QueryDefs(query_name)

    ' Reset the SQL if new SQL string was given
    If Len(sql_str) > 0 Then qdf.sql = sql_str

    ' Close the QueryDef object to release resources
    qdf.Close

    ' Open the query in default datasheet view
    DoCmd.OpenQuery query_name

exit_function:
    Exit Function

err_handler:
    MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritical, "Error"
    Resume exit_function

End Function

这时,您可以从项目中的任何其他VBA代码中调用此函数。要按照OP的要求打开/刷新来自宏的查询,请创建一个新的宏,并在 Function Name 字段中使用open_or_refresh_query("my_query")添加一个RunCode操作,更改{ {1}}到您的查询名称。