【发布时间】:2011-02-07 20:51:10
【问题描述】:
如何通过 vba 刷新所有内容? 我要刷新所有打开的表单...
【问题讨论】:
-
刷新什么?你的意思是重新查询?这似乎是一件不太可能的事情。
-
顺便说一句。如果他们确实充分地回答了您的问题,那么“接受”您之前问题的一些答案将是一种很好的形式。
如何通过 vba 刷新所有内容? 我要刷新所有打开的表单...
【问题讨论】:
@CodeSlave 的回答可能没有满足您的需要,因为您需要的 VBA 方法是 requery,而不是刷新。刷新将显示对现有记录所做的更改,但只有重新查询才会显示新添加的记录。
这是一个更简洁的代码版本(把它放在一个模块中,这样你就可以从任何形式调用它):
Public Sub RequeryOpenForms()
Dim f as Form
For Each f In Access.Forms
f.Requery
Next
End Sub
注意:不幸的是,重新查询具有丢失当前选定记录的副作用。如果有很长的记录列表,这对于使用来说尤其令人沮丧,因为他们可能需要向下滚动很长一段距离才能找到他们之前查看的记录。
【讨论】:
这样的事情呢?
Sub AllForms()
Dim obj As AccessObject
dim dbs As Object
Dim i As Integer
dim intFormCount as Integer
Set dbs = Application.CurrentProject
intFormCount = dbs.AllForms.Count - 1
For i = 0 To intFormCount
If dbs.AllForms(i).isloaded = True Then
dbs.AllForms(i).refresh
End If
Next
End Sub
【讨论】:
在上面的评论中你说:
我想要刚刚添加的新记录 以该形式提供的表格 当我回到它时
您可能想要检查激活事件。但是,除非您知道记录已被添加,否则重新查询表单让我很困扰。我希望如果我需要这样做(实际上我从来没有这样做过——我的用户知道 Shift-F9 是相关的,但他们中的大多数人从不需要它),我会使用 OnActivate 事件并检查当前记录计数,并且仅在计数与当前记录集不匹配时才重新查询表单。
但是,我再次认为这是一件相当奇特的事情。一般来说,如果有太多的表单与您离开然后返回的打开的记录集放在一起,这可能是一个架构错误。当您远离它们时,它们可能应该完全关闭而不是保持打开状态。这减少了表句柄的数量,以及后端数据库上持有的锁的数量,如果管理不当,这两者都可能成为问题。
【讨论】: