コンボボックスのNotInListイベントから新規レコードを登録するには (Part 1)



コンボボックスのNotInListイベントを利用して、新規レコードを登録する方法を解説します。ここで紹介する方法は、レコードの主キーがオートナンバー型のときにのみ適用できます。

  1. Access 2000を起動して Northwind.mdb を開きます。


  2. データベースウィンドウからフォームのタブをクリックして、新規作成ボタンをクリックします。

  3. フォームが表示されたら、得意先テーブルのコンボボックスを作成します。

    図1-フォーム上に得意先テーブルのコンボボックスを作成

    コンボボックスのプロパティは以下のように設定します。

    オブジェクト プロパティ 設定値
    コンボボックス 名前 cboCustomer
    値集合タイプ テーブル/クエリ
    値集合ソース SELECT 得意先.得意先コード, 得意先.得意先名
    FROM 得意先;
    連結式 1
    列数 2
    列幅 0cm;3cm


    メニューからコードのアイコンをクリックしてフォームモジュールを表示させてリスト1のNotInListイベント処理をコピー&ペーストします。リスト1では、条件付きコンパイラ定数(DAO)を定義して、DAOとADO双方に対応できるようにしています。

    リスト1-コンボボックスのNotInListイベント処理コード
    
    #Const DAO = True
    
    ' *******************************
    Private Sub cboCustomer_NotInList( _
      NewData As String, Response As Integer)
      
      Dim strMsg As String
    #If DAO Then
      Dim rs As DAO.Recordset
    #Else
      Dim rs As ADODB.Recordset
    #End If
    
      strMsg = NewData & " が得意先テーブルにありません!" _
             & vbCrLf & "登録しますか?"
      If MsgBox(strMsg, vbYesNo + vbQuestion) = vbNo Then
        Response = acDataErrDisplay
        Exit Sub
      End If
      
    #If DAO Then
      Set rs = CurrentDb.OpenRecordset("得意先")
    #Else
      Set rs = New ADODB.Recordset
      rs.Open _
        Source:="得意先", _
        ActiveConnection:=CurrentProject.Connection, _
        CursorType:=adOpenKeyset, _
        LockType:=adLockOptimistic, _
        Options:=adCmdTableDirect
    #End If
      With rs
        .AddNew
        !得意先名 = NewData
        .Update 
        .Close
      End With
      Set rs = Nothing
      Response = acDataErrAdded  
    End Sub

    NotInListのイベントでは、レコードを新規登録するかどうか問い合わせをして、NoのときはResponseにacDataErrDisplayを設定して戻ります。Yesのときは、新規レコードを追加してResponseにacDataErrAddedを設定して戻ります。
     

  4. フォームをfrmNotInListの名称で保存します。

  5. フォームビューに切り替えたら、コンボボックスにフレンドリーソフトと入力してリターンキーを押します。登録するかどうか問い合わせのメッセージが表示されたら、はいをクリックします。コンボボックスの一覧に新規登録したレコードが表示されるか確認します。



    図2-コンボボックスに未登録の得意先名を入力して新規登録した例


  6. 最後に、フォームを閉じてAccess 2000を終了します。