【问题标题】:When does the control source save data in the database?控制源什么时候在数据库中保存数据?
【发布时间】:2020-07-13 22:12:48
【问题描述】:

我的问题是控制源属性和更新后事件在发生顺序方面如何相互关联?哪个先发生? 我想要一个 msgbox 要求用户确认他是否要保存他刚刚在文本框中输入的数据。文本框的控制源属性设置为某个字段。如果用户取消操作,他输入的文本不应该被保存. 如果我把msgbox放在文本框的OnChange事件中,提示用户确认数据输入会不会太早了? 注意:控制源是日期类型的字段。

【问题讨论】:

  • 还是在更新前事件中?

标签: ms-access sql-server-2005 vba ms-access-2007


【解决方案1】:

ControlSource 与 Change、BeforeUpdate 或 AfterUpdate 事件并不真正直接相关。

您需要使用的事件是 BeforeUpdate 事件。

Private Sub txtFirstName_BeforeUpdate(Cancel as Integer)
    If MsgBox("Are you sure you want to save this data?", vbYesNo, "Um...") = vbNo Then
        Cancel = True
    End If
End Sub

我想补充一点,在大多数情况下,最好使用 Form 的 BeforeUpdate 事件来验证事情,而不是在控件的 BeforeUpdate 事件上进行验证,因为它往往对用户更友好。 Form 的 BeforeUpdate 事件的工作方式与我在上面发布的代码相同。

此外,在验证例程中使用 MsgBox 是大多数人的做法,但它确实不被认为是一种好的设计实践。最好有一个文本框或标签,您可以使用它来输出验证消息,然后还可以播放声音,以便用户知道他们输入的数据无效。

【讨论】:

  • 当用户单击“否”时,我得到运行时错误,指向写入 recalc 的代码行。
  • 您可能需要在 AfterUpdate 事件上运行 ReCalc。如果用户在 BeforeUpdate 代码中单击“否”,AfterUpdate 将不会触发。
  • ReCalc 已经在同一个 texbox 的 afterupdate 事件中了。
  • 另外,还有另一个文本框 txt2,它依赖于更新的值。txt2 不会随着上述文本框的更新而立即更新。
  • 那么当用户点击no时recalc是如何被调用的呢?
猜你喜欢
  • 2011-05-06
  • 2020-02-11
  • 1970-01-01
  • 2013-07-29
  • 2017-05-18
  • 2017-12-28
  • 1970-01-01
  • 2021-06-09
  • 1970-01-01
相关资源
最近更新 更多