ACCESS updateでテーブルの内容を更新する方法

updateでテーブルの内容を更新する方法

ACCESSはテーブルに格納されたデータを扱います。

このデータはフォームから入力・更新することができますが、VBAを使ってプログラムで更新することも可能です。

今日は、VBAでupdateを使ってテーブルの内容を更新する方法をご紹介します。


こんにちは。
はこにわガジェット (@hakoniwagadget) です。

ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。

VBAでのテーブル操作

VBAを使いこなしてくると、DLookup関数やDsum関数でVBA側からテーブルの値を取得することも多くなるでしょう。
そうなると逆にVBAからテーブルの値を更新したくなるものです。

しかし、VBAに標準で用意された関数では、テーブルから値を取得したり、クエリやフォームの操作はできるものの、テーブルの値を更新できる関数がありません、
VBAから直接テーブルを操作するためには、ADO(ActiveX Data Objects)というデータベースを操作するための手法が必要になります。

ADOについては以下の記事でも触れておりますので、詳しく知りたい方はご覧ください。

ADOを使ったレコード操作

Updateメソッド

レコードの内容を更新するためには、ADOのUpdateメソッドを利用します。

Updateメソッドには2つの記述方法があります。

複数のフィールドにまとめて値を代入してからUpdateする

テーブルの複数のフィールドの値をまとめて更新する際に、更新する値を記載してからまとめてUpdateを記述する方法です。

どちらかというこちらの使い方の方が便利かなと思います。

たとえば、rst1というレコードセットがあった際に、


 rst1!売上日 = #2022/06/26#
 rst1!商品ID = 1
 rst1!数量 = 3

 rst1.Update

という記述を行います。
売上日、商品ID、数量というフィールドごとに値を規定していって、最後に、まとめてrst1.Updateで値を更新します。

1フィールドずつ値を設定してUpdateする

もう一つの方法は、1フィールドずつ記述していきます。

どちらでも結果は同じです。


 rst1.Update "売上日" , #2022/06/26#
 rst1.Update "商品ID" , 1
 rst1.Update "数量" , 3

こちらの場合は、1行ずつUpdateを記載しています。

Updateの後には、「フィールド名」、「値」の順で記載しています。

サンプルテーブル

では実際のテーブルを使ってUpdateメソッドの使い方をご紹介しましょう。
今回はサンプルとして以下の売上情報が入ったテーブルを用意しました。

こちらのテーブルの値を、条件を指定して更新する方法を見ていきましょう。
今回は、商品IDが1の場合に、数量を+1するという更新を行いたいと思います。

フォームの準備

まずは、VBAを起動させるためのフォームを作成します。

ACCESSのメニューからフォームデザインを選択します。

フォームのデザインビュー

下記のように空のフォームができます。

ここにACCESSのメニューからボタンを配置します。

下記のようにボタンが配置できました。

このボタンをクリックしたときに、テーブルの値を更新するイベントが動作するように設定します。

更新ボタンを選択したうえで、フォームの右側にあるプロパティシートの「イベント」タブでクリック時イベント行の一番右にある「・・・」ボタンを押します。

ビルダーの選択、が表示されますので「コードビルダー」を選択します。

すると、Visual Vasic Editorが起動しますので、ここにプロシージャを設定していきます。

ADOを使ったレコード更新プロシージャ

それでは実際に、Updateメソッドを使ってプロシージャを作成しましょう。

下記のプロシージャを作成しました。


Dim cnn As ADODB.Connection
Dim rst1 As ADODB.Recordset

'変数にADOオブジェクトを代入
Set cnn = CurrentProject.Connection
Set rst1 = New ADODB.Recordset
rst1.CursorLocation = adUseClient
    
'レコードセットを取得
rst1.Open "売上テーブル", cnn, adOpenKeyset, adLockOptimistic
          
Do Until rst1.EOF

    If rst1!商品ID = 1 Then
                               
        rst1!数量 = rst1!数量 + 1
        rst1.Update
    
    End If

    rst1.MoveNext

Loop
    
'終了処理
rst1.Close: Set rst1 = Nothing
cnn.Close: Set cnn = Nothing

End Sub

プロシージャ解説

まず、レコードセットとして定義したrst1に今回の対象テーブルである「売上テーブル」を割り当てます。


 'レコードセットを取得
 rst1.Open "売上テーブル", cnn, adOpenKeyset, adLockOptimistic

その後、ループ処理を使ってrst1(売上テーブル)の全レコードに対して商品IDが1かどうかのチェックを行っていきます。


 Do Until rst1.EOF

    If rst1!商品ID = 1 Then

商品IDが1だった場合に、そのレコードの数量を+1する、という処理内容です。
最後にrst1.Updateを記述しないとレコードの更新がされませのでご注意ください。


        rst1!数量 = rst1!数量 + 1
        rst1.Update

1レコード分の処理が終わったら、次のレコードに進んでループで処理を繰り返します。
rst1がEOF(テーブルの最後のレコードより後)にたどり着くとループを脱出して処理を終了します。


    rst1.MoveNext

Loop

このように、Updateはループ処理と組み合わせて利用することが多くなりますので、覚えておきましょう。

以上、Updateでテーブルの内容を更新する方法をご紹介しました。


ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。

そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。

ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

最後までお読みいただき、ありがとうございました。