【问题标题】:How to get a control to update如何让控件更新
【发布时间】:2020-07-13 21:26:59
【问题描述】:

我正在创建一个按钮,当您按下它时,它会获取日期字段的值(在表单上表示)并向其添加一个数字。添加数字后,结果应在另一个日期字段中表示(在表单上表示):简而言之,我正在尝试创建一个按钮,将 7 天添加到开始日期,根据用户的周数计算完成日期选择(他按下按钮多少次)。我能想到的是如何让表格上的第二个日期立即更新。我试过 me.refresh 和 me.requery 但这不起作用。此外,有时(并非总是)我收到意外的“保存/复制/忽略消息”,告诉我数据已被另一个用户使用。

此外,似乎延迟时间过长。您可以多次运行代码,但没有任何反应。如果您等待(字面意思是 5 分钟),则会出现错误消息。关闭错误消息后,表单就会正确更新。

我学习编程已经有一段时间了,但是让表单快速更新这一方面我似乎仍然无法理解。以下是我的代码:

Private Sub Comando36_Click()

 If ObjectivesDialNumber.Value = 1 Then
    ObjectivesDialNumber.Value = 2
    Me.imgDue.Visible = True
    Me.imgTre.Visible = False
    Me.imgQuattro.Visible = False
    Me.imgCinque.Visible = False
    Me.imgSei.Visible = False
    Me.imgUno.Visible = False
    Me.lblNextReview.Caption = "weeks"


    st_sql = "UPDATE tblProjectMasterList SET tblProjectMasterList.NextReviewDateObjectives = [tblProjectMasterList].[LastReviewDateObjectives]+14"
    Application.DoCmd.RunSQL (st_sql)

ElseIf ObjectivesDialNumber.Value = 2 Then
    ObjectivesDialNumber.Value = 3
    Me.imgDue.Visible = False
    Me.imgTre.Visible = True
    Me.imgQuattro.Visible = False
    Me.imgCinque.Visible = False
    Me.imgSei.Visible = False
    Me.imgUno.Visible = False
    Me.lblNextReview.Caption = "weeks"

    st_sql = "UPDATE tblProjectMasterList SET tblProjectMasterList.NextReviewDateObjectives = [tblProjectMasterList].[LastReviewDateObjectives]+21"
    Application.DoCmd.RunSQL (st_sql)

ElseIf ObjectivesDialNumber.Value = 3 Then
    ObjectivesDialNumber.Value = 4
    Me.imgDue.Visible = False
    Me.imgTre.Visible = False
    Me.imgQuattro.Visible = True
    Me.imgCinque.Visible = False
    Me.imgSei.Visible = False
    Me.imgUno.Visible = False
    Me.lblNextReview.Caption = "weeks"

    st_sql = "UPDATE tblProjectMasterList SET tblProjectMasterList.NextReviewDateObjectives = [tblProjectMasterList].[LastReviewDateObjectives]+28"
    Application.DoCmd.RunSQL (st_sql)

ElseIf ObjectivesDialNumber.Value = 4 Then
    ObjectivesDialNumber.Value = 5
    Me.imgDue.Visible = False
    Me.imgTre.Visible = False
    Me.imgQuattro.Visible = False
    Me.imgCinque.Visible = True
    Me.imgSei.Visible = False
    Me.imgUno.Visible = False
    Me.lblNextReview.Caption = "weeks"

    st_sql = "UPDATE tblProjectMasterList SET tblProjectMasterList.NextReviewDateObjectives = [tblProjectMasterList].[LastReviewDateObjectives]+35"
    Application.DoCmd.RunSQL (st_sql)

ElseIf ObjectivesDialNumber.Value = 5 Then
    ObjectivesDialNumber.Value = 6
    Me.imgDue.Visible = False
    Me.imgTre.Visible = False
    Me.imgQuattro.Visible = False
    Me.imgCinque.Visible = False
    Me.imgSei.Visible = True
    Me.imgUno.Visible = False
    Me.lblNextReview.Caption = "weeks"

    st_sql = "UPDATE tblProjectMasterList SET tblProjectMasterList.NextReviewDateObjectives = [tblProjectMasterList].[LastReviewDateObjectives]+42"
    Application.DoCmd.RunSQL (st_sql)

ElseIf ObjectivesDialNumber.Value = 6 Then
    ObjectivesDialNumber.Value = 1
    Me.imgDue.Visible = False
    Me.imgTre.Visible = False
    Me.imgQuattro.Visible = False
    Me.imgCinque.Visible = False
    Me.imgSei.Visible = False
    Me.imgUno.Visible = True
    Me.lblNextReview.Caption = "week"

    st_sql = "UPDATE tblProjectMasterList SET tblProjectMasterList.NextReviewDateObjectives = [tblProjectMasterList].[LastReviewDateObjectives]+7"
    Application.DoCmd.RunSQL (st_sql)

  End If


End Sub

【问题讨论】:

  • 当您准备好进行 GUI 更新时可能会尝试 DoEvents()
  • 这越来越陌生了。当我运行代码时,该字段不会更新。一旦我打开表检查它是否有效并确认查询已更新,我就会收到错误消息“保存/复制/不保存”。只要我选择不保存,表格就会在表格关闭时正确更新。
  • 不,DoEvents 允许操作系统处理可能正在等待您的代码的事件。类似的问答在这里stackoverflow.com/questions/6584046/…
  • 抱歉,我的语法有问题。 DoEvents 是否单独出现在代码末尾?
  • 只需在结束子之前在行上键入 DoEvents。这样,如果您的任何 if 块被击中,并且控件的可见性或标题发生更改,则应该允许绘制这些更改

标签: ms-access vba ms-access-2010


【解决方案1】:

您可能想尝试一下,或者尝试将 me.repaint 添加到您的代码中。

 Private Sub Comando36_Click()


On Error GoTo Comando36_err
Dim db As Database
Dim rs As Recordset
Dim lrd As Integer
Set db = CurrentDb

Set rs = db.OpenRecordset("Select * From tblProjectMasterList")




    Me.imgDue.Visible = False
    Me.imgTre.Visible = False
    Me.imgQuattro.Visible = False
    Me.imgCinque.Visible = False
    Me.imgSei.Visible = False
    Me.imgUno.Visible = False
    Me.lblNextReview.Caption = "weeks"





 Select Case ObjectivesDialNumber.Value

    Case 1
        ObjectivesDialNumber.Value = 2
        Me.imgDue.Visible = True
        lrd = 14




    Case 2
        ObjectivesDialNumber.Value = 3
        Me.imgTre.Visible = True
        lrd = 21


    Case 3
        ObjectivesDialNumber.Value = 4
        Me.imgQuattro.Visible = True
        lrd = 28


    Case 4
        ObjectivesDialNumber.Value = 5
        Me.imgCinque.Visible = True
        lrd = 35


    Case 5
        ObjectivesDialNumber.Value = 6
        Me.imgSei.Visible = True
        lrd = 42


    Case Else
    ObjectivesDialNumber.Value = 1
        Me.imgUno.Visible = True
        Me.lblNextReview.Caption = "week"
        lrd = 7

End Select

rs.Edit
rs![NextReviewDateObjectives] = DateAdd("d", lrd, rs![LastReviewDateObjectives])
rs.Update
rs.Close

Me.Refresh
Me.Repaint

Comando36_Exit:
    Exit Sub

Comando36_err:
MsgBox Error$

我希望它有所帮助。这些年来,我当然得到了很多帮助。

【讨论】:

    猜你喜欢
    • 2022-01-07
    • 2011-05-13
    • 1970-01-01
    • 2015-08-12
    • 2017-01-06
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多