【Access VBA】rs.Editの使い方|Updateとの違いを解説

Access VBAでテーブルデータを更新する際に使うのが、rs.Editです。

ただ、初心者だと、

  • なぜEditが必要なの?
  • Updateとの違いは?
  • どんなタイミングで使うの?
  • 書かないとどうなる?

と疑問を持つことが多いです。

Access VBAでは、Recordsetを使ったデータ更新処理が非常によく使われます。

その中でも、rs.Editはレコード編集の開始を行う重要な命令です。

この記事では、rs.Editの使い方とUpdateとの違いを解説初心者向けにわかりやすく解説します。

目次

rs.Editとは?

rs.Editは、「これからレコードを編集します」とAccessへ伝えるための命令です。

主にDAO.Recordsetで既存データを更新するときに使用します。

基本構文はこちらです。

rs.Edit

ただし、Editだけではデータは保存されません。

実際には次の流れで使います。

  1. Editで編集開始
  2. フィールドの値を変更
  3. Updateで保存

Access VBAでは非常に基本となるレコード更新処理です。

rs.Editの基本的な使い方

実際のコードを見てみましょう。

Dim db As DAO.Database
Dim rs As DAO.Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("T_社員")

rs.MoveFirst
rs.Edit

rs!社員名 = "田中"
rs!部署 = "営業"

rs.Update
rs.Close

Set rs = Nothing
Set db = Nothing

コード全体の目的

テーブル「T_社員」の先頭レコードを更新するコードです。

社員名と部署を変更しています。

コード解説

Dim db As DAO.Database
Dim rs As DAO.Recordset

データベース操作用の変数と、レコード操作用のRecordset変数を定義しています。

Set db = CurrentDb

現在開いているAccessデータベースを取得しています。

Set rs = db.OpenRecordset("T_社員")

テーブル「T_社員」を開いています。

rs.MoveFirst

先頭レコードへ移動しています。

rs.Edit

レコードを編集可能な状態にしています。

rs!社員名 = "田中"
rs!部署 = "営業"

社員名と部署を更新しています。

rs.Update

変更内容を保存しています。

rs.EditとUpdateの違い

初心者がかなり混乱しやすいのが、EditUpdateの違いです。

メソッド役割
Edit編集開始
Update変更保存

つまり、次のような流れになります。

rs.Edit

値変更

rs.Update

という流れになります。

イメージとしては、

  • Edit → 編集モードに入る
  • Update → 保存ボタンを押す

に近いです。

この順番を間違えるとエラーになるため注意してください。

また、新規追加の場合は、rs.AddNewを使用します。

rs.Editでよくあるエラーと注意点

Editを書かずに更新する

次のコードはエラーになります。

rs!社員名 = "田中"
rs.Update

これはEditを書いていないためです。

Access VBAでは、Edit → 値変更 → Updateの順番が必要です。

Updateを忘れる

初心者がかなりやりがちなミスです。

rs.Edit
rs!社員名 = "田中"

この場合、変更内容は保存されません。

必ず最後に、rs.Updateが必要です。

レコードが存在しない

Recordsetにデータが存在しない状態で、rs.MoveFirstを実行するとエラーになります。

実務では次のようなチェックを行うことが多いです。

If rs.EOF = False Then
   rs.Edit
   rs!社員名 = "田中"
   rs.Update
End If

EOFは、「レコードが存在しない状態」を判定するプロパティです。

業務システムでは非常によく使います。

更新できないクエリを開いている

クエリによっては更新不可になる場合があります。

例えば、

  • 集計クエリ
  • DISTINCTを使ったクエリ
  • 複雑な結合クエリ

などは編集できないケースがあります。

実務での活用ポイント

rs.Editは業務システム開発で非常によく使います。

例えば、一括更新処理では次のようなコードをよく使います。

Do While Not rs.EOF
   rs.Edit
   rs!状態 = "完了"
   rs.Update
   rs.MoveNext
Loop

このコードは、全レコードの状態を「完了」に変更しています。

実務ではこのようなループ更新処理がかなり多いです。

ただし、大量データ更新では処理速度が遅くなることがあります。

その場合は、UPDATEクエリを使ったほうが高速になるケースもあります。

まとめ

rs.Editは、「これからレコードを編集する」ことをAccessへ伝える命令です。

基本的には、

rs.Edit

値変更

rs.Update

の流れで覚えると理解しやすいです。

まずは小さなテーブルで実際に試しながら覚えていくのがおすすめです。

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

目次