【发布时间】: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,我可以在其中看到新值。
【问题讨论】:
-
这篇文章展示了如何使用 NotInList 事件打开一个表单来输入新记录,然后用新值blueclaw-db.com/access_notinlist_advanced_example.htm填充组合框