【问题标题】:MS Access Combobox not taking a value after requery shows value重新查询显示值后,MS Access Combobox 不取值
【发布时间】:2018-03-16 17:51:24
【问题描述】:

我有让用户编辑该字段的相关值的组合框 - cboBEA 使用按钮。我决定在他们想要添加新值时使用 NotInList 例程。编辑部分工作顺利,但 NotInList 部分需要在名为 frmBEA_JDIR 的弹出表单中提供相关字段后接受一个值

起初 cboBEA 的重新查询不起作用,所以我通过首先将其设置为 "" 然后将行源的实际 SQL 设置为行源进行了更谨慎的重置。

这是弹出窗体frmBEA_JDR的“保存”按钮中的代码

Private Sub cmdSave_Click()

    Select Case Me.OpenArgs
    Case "Edit"
        DoCmd.Save
        DoCmd.Close acForm, "frmBEA_JDIR"

        With Form_sfm_AddSPDistro
        .cboBEA.Requery
        .cboBESA.Requery
        .cmbPROGRAM.RowSource = ""
        .cmbPROGRAM.RowSource = "SELECT * FROM qLU_BEA_JDIR;"
        .cmbPROGRAM = .cboBEA
        End With


    Case "AddNew"


        Dim strSQL As String

        strSQL = "SELECT LU_BEA_JDIR.ID, LU_BEA_JDIR.BEA, LU_BEA_JDIR.BESA, LU_BEA_JDIR.ORGANIZATION " _
                   & "FROM LU_BEA_JDIR;"


        With Form_sfm_AddSPDistro
        'cboBEA.Requery doesn't work, so...
        .cboBEA.RowSource = ""
        .cboBEA.RowSource = strSQL

        .cboBESA.Requery
        .cboBEA.Value = Me.txtBEA
        .cmbPROGRAM.RowSource = ""
        .cmbPROGRAM.RowSource = "SELECT * FROM qLU_BEA_JDIR;"
        .cmbPROGRAM = .cboBEA
        End With

        DoCmd.Close acForm, "frmBEA_JDIR"

    End Select

End Sub

这里是调用表单的 NotInList 事件:

Private Sub cboBEA_NotInList(NewData As String, Response As Integer)
    Dim MsgBoxAnswer As Variant

    Response = acDataErrContinue
    Me!cboBEA.Undo  'Used this to prevent the requery error caused by frmBEA_JDIR

    MsgBoxAnswer = MsgBox(NewData & " is not in the list.  Do you want to add it?", vbQuestion + vbYesNo, "Add " & NewData & "?")

    If MsgBoxAnswer = vbNo Then
        Me.cboBEA = Null
        DoCmd.GoToControl "cboBEA"
    Else

        DoCmd.OpenForm "frmBEA_JDIR", acNormal, , , acFormAdd, , "AddNew"
        Form_frmBEA_JDIR.txtBEA = NewData


    End If

End Sub

因此,根据调用此表单的内容 - NotInList 或 Edit,我将其放在调用 frmBEA_JDIR 的 openargs 参数中。这就是我在“保存”按钮中处理更新的方式。同样,编辑部分工作得很好,但是 NotInList 事件中的 AddNew 即使在重新查询后也不会填充 cboBEA,我可以在其中看到新值。

【问题讨论】:

标签: ms-access vba


【解决方案1】:

简而言之:不要用 openargs 在弹出窗口中弄清楚要做什么,而是让acFormAdd 为您做; acFormAdd 会将表单打开到新记录。

在 openargs 中发送新数据。

以对话模式打开 frmBEA_JDIR。它会停止当前代码,直到打开的表单关闭。

' open frmBEA_JDIR in dialog mode to add the new data.
DoCmd.OpenForm "frmBEA_JDIR", acNormal, , , acFormAdd, acDialog, "NewData"

'data is added, now requery the dropdown
cboBEA.Requery

在没有“案例编辑”部分的情况下玩弄这个,直到你看到它工作。然后使用acFormEdit 添加编辑部分。您可以检查弹出表单的数据模式,看看它是添加还是编辑。

【讨论】:

  • 感谢您澄清这一点。我最初传递了 edit 和 AddNew 的参数,因为我计划使详细信息表单更大且不受约束,并且我将根据 AddNew 切换记录源。但是,由于它只有 3 个细节,我决定使用这种方法,效果很好。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多