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