我在使用Access Form Requery方法时出现问题。
我有两种形式。第一种形式是用户的Data_Entry
形式。第二种形式是Dashboard
显示,用于排列和格式化第一种形式中的重要数据。在Data_Entry
表单上,用户可以按下一个按钮以在Data_Entry
和Dashboard
表单上强制执行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源代码本身内部的某种更深层次的问题,还是我在其他地方缺少一些晦涩的东西?
答案 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