スポンサードリンク

Access VBA DAOでレコードを更新する方法。

VBA で DAO を使って、テーブルにあるレコードを更新(編集)するには、まず該当するレコードまで移動してから、操作する必要があります。

そのため先にレコードを検索する方法を学びました。あとは少しプログラムを変更するだけで、簡単にレコードを更新できます。


【1】Accessのファイル「SampleDB020.mdb」を起動し、テーブル「T01Prefecture」を開きます。

access-vba-211.gif


【2】最後のレコードが、「99 ハワイ」になっていることを、確認しておいてください。

access-vba-210.gif

これからこのレコードを、練習で更新しますので、無い場合は作成しておいてください。

レコードを確認したらテーブルを閉じます。


【3】続いて VBE を起動し、標準モジュールの test6 を表示します。

access-vba-212.gif

*VBEは「Altキー」+「F11キー」で起動できます。


【4】「test6」に以下のように、Subプロシージャ editData() を追加します。


Sub editData(pCd As Integer, pName As String)
  Dim db As DAO.Database
  Set db = CurrentDb
  
  Dim rs As DAO.Recordset
  Set rs = db.OpenRecordset("T01Prefecture")
  
  rs.Index = "Primarykey"
  rs.Seek "=", pCd
  
  If rs.NoMatch Then
    Debug.Print "該当するレコードは見つかりませんでした。"
  Else
    rs.Edit
      rs!PREF_NAME = pName
    rs.Update
    Debug.Print "レコードを更新しました。"
    dispData
  End If
  
  rs.Close
  Set rs = Nothing
  db.Close
  Set db = Nothing
  
End Sub


access-vba-213.gif


プログラムの準備ができたら、実行してみましょう。

【5】イミディエイト ウィンドウから editData() を実行してください。

call editData(99, "グアム")

access-vba-215.gif

*1番目の引数には、テーブルに存在する PREF_CD を指定します。


【6】更新のメッセージと、レコードが表示されました。

・PREF_CD が 99 の場合
access-vba-216.gif

・PREF_CD が 100 の場合(存在しない)
access-vba-219.gif


【7】イミディエイト ウィンドウをスクロールすると、レコードが更新されていることが確認できます。

access-vba-217.gif


【8】テーブル「T01Prefecture」を開き、レコードが更新されていることを確認してください。

access-vba-218.gif


【9】editData()を使って、レコードを更新する練習をしてください。

PREF_CD が 1〜47 までは今後も使いますので、更新しないでください。あらかじめ練習用に、addData() で新しいレコードを追加しておくとよいと思います。


【解説】

(1)前回の seekData() とほとんど同じです。変更箇所を赤枠で囲んでみました。

access-vba-214.gif


(2)イミディエイト ウィンドウから、editData() を引数を指定して呼び出しています。

call editData(99, "グアム")

1番目の引数は整数型です。PREF_CD はテーブルに存在する値を使います。2番目の引数は文字列型なので、半角の「"」ダブルクォーテーションで囲みます。


(3)整数型(Integer)と文字列型(String)の引数を、2つ受け取ります。

Sub editData(pCd As Integer, pName As String)


(4)前回とまったく同じですが、インデックスにプライマリーキーを指定し、レコードを検索しています。1番目の引数を検索条件として使っています。

rs.Index = "Primarykey"
rs.Seek "=", pCd

重要なことは、この時点で「対象となるレコードに移動済み」だということです。しかも主キーのフィールドで検索しているので、見つかるレコードは必ず1件だけです。


(5)実際にレコードを更新している部分です。

If rs.NoMatch Then
  Debug.Print "該当するレコードは見つかりませんでした。"
Else
  rs.Edit
    rs!PREF_NAME = pName
  rs.Update
  Debug.Print "レコードを更新しました。"
  dispData
End If

レコードが見つからなかった時に、条件式の rs.NoMatch が 真 (True) になります。

もしレコードが見つからなかったらメッセージを表示して、見つかったら都道府県名を更新するという処理です。

Recordsetオブジェクトに対して操作を行なっています。Edit から Updatete までをセットで覚えてください。

rs.Edit で編集を開始して、rs.Update で保存します。Updateを忘れると、テーブルに反映されませんのでご注意ください。

2番目の引数で、レコードのデータを更新しています。そして最後に確認のため、dispData でレコードを表示しています。


【ワンポイント】
新旧の番号を引数で渡すように改良すれば、PREF_CD も更新できますが、主キーのフィールドを更新するのはあまり良くないので、PREF_NAMEだけ更新しています。


スポンサードリンク






Access VBA 初心者入門講座 TOPへ