1

所以在我的 Access 应用程序中,有一个字段,用户可以从下拉列表中选择一个名称,或者键入一个。该列表应返回一个数字(如果在 People 表中,则为所选人员的 PersonID)或字符串(如果输入不在数据库中的某人的姓名)。

这一定是一个相当普遍的要求,但我没有看到任何非常简单的方法来做到这一点。我首先想到的方法是使用 VBA 代码,如果用户键入名称而不是从列表中选择,则在 People 表中为新人创建一个条目,然后返回他的 PersonID(由 AutoNumber 新分配)。这可能涉及向用户询问有关新人的所需信息(例如电话号码)的对话。

有没有更好的办法?谢谢。

4

1 回答 1

2

使用组合框的 NotInList 事件。这是一个快速示例:

Private Sub PersonID_NotInList(NewData As String, Response As Integer)
Dim Result As VbMsgBoxResult, NewPersonID As Long, MaxPersonID As Long

    On Error GoTo Err_PersonID_NotInList

    Response = acDataErrDisplay
    Result = MsgBox("'" & NewData & "' is not currently in the database.  " & _
                    "Would you like to add '" & NewData & _
                    "' to the database?", vbYesNo + vbExclamation, _
                    "Person Not In List")
    If Result = vbYes Then
        MaxPersonID = DMax("PersonID", "People")
        DoCmd.OpenForm "AddPerson", , , , acFormAdd, acDialog, NewData            
        NewPersonID = DMax("PersonID", "People")
        If NewPersonID > MaxPersonID Then
            Me.PersonID = NewPersonID
            Me.PersonID.Requery
            Response = acDataErrAdded
        End If
    End If

Exit_PersonID_NotInList:
    Exit Sub
Err_PersonID_NotInList:
    MsgBox Err.Description
    Resume Exit_PersonID_NotInList
End Sub

笔记:

  • 使用 DMax 不是获取新添加的 PersonID 的可靠方法,但它使示例更易于阅读。您应该SELECT @@Identity改用(谷歌了解更多信息)。
  • 我将 NewData 作为 OpenArg 传递给“AddPerson”表单。这将允许您在打开 AddPerson 表单时预先填充此人的姓名。
于 2012-05-08T20:59:07.377 回答