1

私の Access アプリケーションには、ユーザーがドロップダウン リストから名前を選択するか、名前を入力するフィールドがあります。リストは、数値 (People テーブルにある場合は選択された人物の PersonID) または文字列 (DB にない人物の名前を入力した場合) を返す必要があります。

これはかなり一般的な要件に違いありませんが、非常に簡単な方法はありません。私が最初に思いつく方法は、ユーザーがリストから選択する代わりに名前を入力すると、新しい人物の People テーブルにエントリを作成し、その PersonID (AutoNumber によって新しく割り当てられた) を返す VBA コードを使用することです。これにはおそらく、新しい人に関する必要な情報 (電話番号など) をユーザーに尋ねるダイアログが含まれます。

より良い方法はありますか?ありがとう。

4

1 に答える 1

2

ComboBox の 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(詳細については Google)。
  • NewData を OpenArg として "AddPerson" フォームに渡しました。これにより、AddPerson フォームを開くときに、個人の名前を事前入力できます。
于 2012-05-08T20:59:07.377 に答える