連載
» 2016年01月22日 05時00分 公開

Access VBAで学ぶ初心者のためのデータベース/SQL超入門(6):「SQL」文で登録されているデータをAccessを通じて編集し、変更をデータベースに反映させる方法 (3/3)

[薬師寺国安,PROJECT KySS]
前のページへ 1|2|3       

編集ボタンがクリックされたときの処理──SQLのUPDATE文による更新処理

 編集ボタンがクリックされたときの処理はリスト3のようになる。

Private Sub 編集ボタン_Click()
 Dim db As Database
 Set db = CurrentDb
 SQL = "UPDATE 顧客管理テーブル SET 氏名=" & "'" & 氏名テキストボックス.Value & "'" & ",性別=" & "'" & 性別コンボボックス.Value & "'" & ",年齢=" & "'" & CInt(年齢テキストボックス.Value) & " '" & ",郵便番号=" & "'" & 郵便番号テキストボックス.Value & "'" & ",住所=" & "'" & 住所テキストボックス.Value & " '" & ",電話番号=" & "'" & 電話テキストボックス.Value & "'" & " Where 電話番号=" & "'" & tel & "';"
db.Execute SQL
 Me.一覧リストボックス.Requery
 db.Close
 Set db = Nothing
End Sub
リスト3 「編集ボタン」がクリックされたときの処理

 ここでは、

  • 2行目:Databaseオブジェクトを扱う変数dbを宣言する。
  • 3行目:CurrentDB関数の戻り値をDatabase型オブジェクトに代入する。CurrentDB関数は、開いているデータベースを参照する関数だ。
  • 4行目:文字列型の変数「SQL」にUPDATE文を使ってレコードを更新する「SQL」文を記述する。

 UPDATE文の書式は「UPDATE テーブル名 SET フィールド名=値,フィールド名=値…… WHERE 条件式」となる。テーブル名には「顧客管理テーブル」、フィールド名には「氏名」「性別」「年齢」「郵便番号」「住所」「電話番号」を指定し、には、「氏名テキストボックスの値」「性別コンボボックス」の値などが入る。なお「年齢テキストボックスの値」は文字列で宣言していたので、CInt関数で数値に変換している。

ワンポイント

 プログラムで「SQL」文に変数を指定して記述する場合は、変数を「シングルコーテーション(‘)」でくくるように記述する必要がある。けっこう間違えやすいので注意してほしい。



 WHERE句には条件を指定する。ここでは「電話番号」の値を指定している。WHERE句に指定する条件に合致するレコードを編集することになるので、必ず一意のデータを指定する必要がある。WHERE句を指定せずに編集を実行すると、全てのレコードが編集したデータに置き換わってしまうので注意が必要だ。SQL文の最後は「セミコロン(;)」で閉じる。

ワンポイント

 「SQL」文が正しく書けたかどうかは、MsgBox関数で表示させて確認してみるといい。確認すると、図6のように表示される。

photo 図6 このように表示されれば問題はない


  • 5行目:db.Execute SQLのExecuteメソッドで「SQL」を実行する。
  • 6行目:Requeryメソッドで、「一覧リストボックス」内のデータを再読み込みする。これで、編集されたデータが「一覧リストボックス」に反映される。
  • 7〜8行目:dbを閉じ、全ての関連付けから解放する。

 ここで編集したデータは、「顧客管理テーブル」にも反映される。

実行結果

 きちんと変更が反映されるかを試そう。岡目八目さんの住所を「愛媛県松山市道後今市」から「東京都多摩市諏訪」に変更し、郵便番号も「790-0845」から「206-0024」に変更してみる(図7)。

photo 図7 上図が変更前、下図が変更後。岡目八目さんの住所と郵便番号が変更された

 なお、今回の処理には「データの検証処理」は付けていない。こちらは、第4回「VBAで正規表現や関数を使った入力チェックを行い、Accessに新規レコードを追加、保存するには」で使用したコードがそのまま利用可能なので、応用実習として各自で実装してみてほしい。

次回予告

 今回までの内容で、「データの入力」「データの検索」「データの編集」が可能になった。これまでのテクニックを組み合わせた応用も思い付くようになったのではないだろうか。

 次回は、顧客管理リストを利用した「タックシール印刷」のテクニックを解説する。お楽しみに。

筆者紹介

薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所

薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。

1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。

1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。

2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。

Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。


Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)

Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)

Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)

Microsoft MVP for Development Platforms-Windows Platform Development (Oct 2014-Sep 2015)


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。