我一直在使用Access" On Not In List"事件很长一段时间。它允许您将组合框中的项目限制为特定列表,但允许用户在想要输入已经存在的内容时动态地将项目添加到组合的记录源。您设置"限制列表"组合框的属性为是,但是你把一些代码放在" On Not In List"事件。间歇性地,我在Access 2016中遇到了这种情况似乎不起作用的情况。我得到了标准"该项目不在列表中。"尝试输入新项目时出错,没有看到和调用我的代码隐藏逻辑。什么了?
答案 0 :(得分:0)
在我的头撞墙后很长一段时间,我相信这是Access 2016中的错误,我想我偶然发现了一个问题。我将表单的RecordSetType属性设置为Snapshot,关闭和保存的表单,在设计视图中重新打开表单,将RecordSetType属性设置回Dynaset。这似乎已经解决了这个问题。我不知道为什么。
但是因为我在这里。 。 。一些额外的细节:在每个控件的代码隐藏中,我使用这样的代码:
Private Sub VendorID_NotInList(NewData As String, Response As Integer)
Response = RU_NotInList("Lookup Vendor", "Description", NewData, gc_strMsgCap)
End Sub
这种类型的子程序会自动创建在" On Not In List"当您点击代码生成器'选项。我有一个很久以前写过的实用函数。 (" RU"指代码库。)
该函数返回一个内部Access整数常量,该常量直接传递给Access来处理。
该例程的内部如下所示:
Function RU_NotInList(TableName As String, FieldName As String, newdata As String, Optional pstrTile As String) As Integer
Dim rs As DAO.Recordset, db As DAO.Database, n1 As Integer
RU_NotInList = DATA_ERRCONTINUE
On Error GoTo RU_NotInList_Error
If Len(Trim(newdata)) = 0 Then Exit Function
n1 = MsgBox(newdata & " is not in the list. Do you wish to add it?", MB_ICONQUESTION + MB_YESNO, pstrTile)
If n1 = IDNO Then Exit Function
Dim strSQL As String
strSQL = "INSERT INTO [" & TableName & "] ([" & FieldName & "]) VALUES (""" & newdata & """)"
WarningsHour True 'Turns hourglass cursor on, warning messages off.
DoCmd.RunSQL strSQL
WarningsHour False 'Undoes the above.
RU_NotInList = DATA_ERRADDED
Exit Function
RU_NotInList_Error:
RUError "RU_NotInList", Err 'generic error-handling routine in the RU library
Exit Function
End Function
上面代码中的所有全部大写项都是Access内部常量。