访问Form.Requery工作不一致

时间:2018-09-26 22:27:07

标签: forms ms-access access-vba

我在使用Access Form Requery方法时出现问题。

我有两种形式。第一种形式是用户的Data_Entry形式。第二种形式是Dashboard显示,用于排列和格式化第一种形式中的重要数据。在Data_Entry表单上,用户可以按下一个按钮以在Data_EntryDashboard表单上强制执行Requery事件。这是非常简单的代码:

Private Sub Button_Update_Click()
    Form_Data_Entry.Requery
    Form_Dashboard.Requery
End Sub

Dashboard表单中,我还有一个计时器事件,该事件每60秒触发一次:

Private Sub Form_Timer()
    Me.Requery
End Sub

所有这些中有大约50%的时间都可以正常工作。大约45%的时间,Data_Entry表单上的更新按钮将重新查询自身,但对仪​​表板无效。但是,单击Dashboard并按F5键将强制重新查询,计时器事件也会强制重新查询。另外5%的时间,无论更新按钮,F5还是计时器都不会重新查询Dashboard

100%的时间,更新按钮将重新查询Data_Entry表单,而不会出现问题。

如果我关闭Dashboard并重新打开它,它将再次按预期工作……一段时间。有时它将持续数小时没有问题,而其他时候只有15分钟。

我对造成这种不一致行为的原因不知所措。似乎不是VBA问题。这是Access源代码本身内部的某种更深层次的问题,还是我在其他地方缺少一些晦涩的东西?

2 个答案:

答案 0 :(得分:0)

我设法解决了这个问题,但是我仍然不知道是什么原因引起的。我发现从VBA代码或Access Macro打开表单仍然会出现相同的问题,但是关闭一次表单并重新打开它会使问题在会话期间消失。因此,我修改了用于打开显示表单的按钮代码,首先打开表单,将其关闭,然后重新打开。问题解决了。

def deputyfight(deputyawake):
     print("You do not have any weapons, you will have to fight him.")
     userhits = 5
     deputyhits = 5
     print("You run at the guard and throw a punch at him")
     print("He dodges it, the fight has begun")
     loop = True
     while loop:
        if loop:
            userdmg = int(random.randint(5, 10))
            deputydmg = int(random.randint(1, 10))
            if userdmg >= deputydmg:
                print("You punch the deputy")
                userhits -= 1
                print(userhits)
            elif userhits == 0:
                print("You knock out the deputy and drag him into the cell")
                print("He is out cold, he most likely won't remember this or
                you")
                deputyawake = False
                sheriffsoffice(deputyawake)
            elif deputydmg < userdmg:
                print("The deputy punches you")
                usershealth(5)
                deputyhits -= 1
                print(deputyhits)
            elif deputyhits == 0:
                print("The deputy puts up a good fight, but you catch him with a
                lucky punch")
                print("You win the fight, but have taken a lot of damage")
                print("Your health is at: ", health)
                deputyawake = False
                sheriffsoffice(deputyawake)

答案 1 :(得分:0)

这个错误有类似的问题。重新分配记录最终对我有用,很奇怪,但在我的情况下似乎一直清除这个故障。

rs = Me.Form.RecordSource
Me.Form.RecordSource = rs
Me.Requery