Microsoft Access Club >AccessTips >このページ >次頁 <前項  サイト内検索


DAOを用いてリストボックスで選択したレコードを削除する : AccessTips133



今回は、前頁に引き続きリストボックスに表示されたレコードの一覧から任意に選択したレコードのみを削除する方法をご紹介します。組み立て方は、 リストボックスの複数選択プロパティを標準に変更し、選択したレコードのIDフィールド値をループを用いて変数に代入します。削除機能はDAOのOpenRecordSetを 用いてレコードセットを作成し、Deleteメソッドで実行します。

サンプルテーブル

以下のようなフィールドを持つサンプルテーブル(T_sample)を作成します。

ID 日付 売り上げ
00001 2005/08/10 ¥154,420
00002 2005/08/11 ¥54,200
00003 2005/08/12 ¥410,100
00004 2005/08/13 ¥310,050
00005 2005/08/14 ¥63,100
00006 2005/08/15 ¥84,100
00007 2005/08/16 ¥114,620

フォームの作成

T_sampleテーブルと連結した単票式フォーム(F_sampledelete)を作成します。 フォームに表示されたリストボックスから任意のレコードをマウスで選択します。以下のようなオブジェクトを追加します。

  1. リストボックス(lst表示)を作成します。
  2. 値集合ソースは、T_sampleテーブルです。
  3. 削除を実行するコマンドボタン(cmd削除)を作成します。

コマンドボタンのクリック時イベントプロシージャの作成

コマンドボタンのクリック時イベントに以下のプロシージャを作成します。プロシージャが実行されると、 リストボックスで選択されているレコードのIDフィールドを値を求めます。求めた値を 抽出条件にレコードセットを作成し、Deleteメソッドを用いてカレントレコードを削除します。

Private Sub cmd検索_Click()

    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim var条件 As Variant
    Dim var行 As Variant
    Dim mySQL As String
    Dim i As Long
    
    For Each var行 In Me.lst一覧.ItemsSelected
        var条件 = var条件 & IIf(Not var条件 = "", ",", "") & _
                                    Me.lst一覧.Column(0, var行) ' --- A
    Next
    
    If Not var条件 = "" Then ' --- B
        Set db = CurrentDb()
        mySQL = "SELECT * FROM T_sample WHERE ID IN (" & var条件 & ")"
        Set rs = db.OpenRecordset(mySQL) ' --- C
        Do Until rs.EOF
            rs.Delete ' --- D
            rs.MoveNext ' --- E
        Loop
        For i = 0 To Me.lst一覧.ListCount - 1 ' --- F
            Me.lst一覧.Selected(i) = False
        Next
        Me.lst一覧.Requery
        rs.Close: Set rs = Nothing
        db.Close: Set db = Nothing
    End If
    
End Sub
解説
  1. 選択したレコードのIDフィールドの値を求めます。
  2. 削除対象のレコードを選択していない場合を排除しています。
  3. OpenRecordSetオブジェクトを用いてレコードセットを作成します。
  4. Deleteメソッドを用いてカレントレコードを削除します。
  5. カレントレコードを次のレコードに移動させます。
  6. リストボックスを全てクリアにします。

フォームをビューモードで開く

  1. フォームをビューモードで開きます。
  2. 削除するレコードを選択します。

  1. 削除コマンドボタンをクリックします。
  2. DAOを用いてレコードを削除する場合、警告メッセージは表示されません。
  3. 当該レコードが削除されます。

解説
  1. 一旦削除したレコードは元に戻せません。

関連ページ

2005/08/16

ページの先頭へ 前ページへ戻る

 


DAOを用いてリストボックスで選択したレコードを削除する : AccessTips133


 

-Microsoft Access Club-