MS Access Combobox在requery之后没有取值,显示值

时间:2018-03-16 17:51:24

标签: ms-access access-vba

我有Combobox,可以让用户编辑此字段的相关值   - 使用按钮cboBEA。我决定在想要添加新值时使用NotInList例程。编辑部分顺利运行,但NotInList部分需要在名为frmBEA_JDIR

的弹出窗体中提供相关字段后接受一个值

首先,cboBEA的重新查询不起作用,所以我首先将其设置为""""""""""""""""然后是rowsource的实际SQL。

以下是" Save"中的代码。弹出窗体的按钮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参数中。这是我在SAVE按钮中处理更新的方法。同样,编辑部分工作得很好,但是NotInList事件中的AddNew即使在被重新查询后也不会填充cboBEA,我可以在其中看到新值。

1 个答案:

答案 0 :(得分:0)

简而言之:让acFormAdd为你完成,而不是通过openargs确定弹出窗口中的内容。 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添加编辑部分。您可以检查弹出窗体的数据代码,看看它是否可以添加或编辑。