ACCESSは大量のデータを一気に更新することができます。

しかし、場合によっては、1行の更新も必要になります。

今回紹介する記事は、VBAで更新したほうが便利でしょう。

スポンサーリンク

更新クエリをVBAで実行する

 

こんにちは。伊川(@naonaoke)です。

前回、前々回の続きになります。

時間のある方は、下記の記事を読んでから、本記事を読んでいただくことをお勧めします。

非連結のテキストボックスで入力フォームを作成する過程を説明しています。

今回は、入力した内容を修正する場合です。

連結のテキストボックスであれば、データを呼び出しで、上書きするだけで完了です。

しかし、非連結の場合はそうはいきません。

データは上書きできません。

修正というよりは、正しい情報に更新するということです。

そうなると、更新クエリを各フィールド毎に作成なんてできません。

ここは、1行の更新をVBAで実行することになります。

スポンサーリンク

このブログはこんな人にお勧め

 

今回のテーマ
  • ACCESSで入力フォームを作成している人
  • VBAでアクションクエリを実行したい人
  • VBAのコードを改行したい人

このブログを、読み終わるころには・・・・

今回は、このコードを作成していて、久々の8時間コースになりました。私の失敗談を含めて紹介していきます。

コードの書き方が参考になると思います。

スポンサーリンク

VBAで更新クエリを実行する

 

先ほども言いましたが、非連結のテキストボックスで入力フォームを作成した場合は、

データを上書きすることはできません。

すでに主キーが入力されているので、登録ボタンを押しても、新たにデータが追加されるだけです。

しかし、主キーが登録されているため、一旦レコードを削除してから、新たに登録という手順になります。

 

[

Naosuke

こんなの無理です。

入力項目が、100個あった場合には、面倒で、そのシステムは誰も利用しません。

 

だから、主キーを抽出条件として、主キーに紐づいているデータを更新するという手順が必要になります。

Naosuke
修正ではなく、更新というところがポイントだね。

 

では、VBAで作成していきましょう。

VBAで更新クエリを実行 作業手順 その1 コードを確認

実際には、上記のコードになります。

これで、データを更新します。

VBAで更新クエリを実行 作業手順 その2 フィールド名は、変数にする

 

VBAと、SQL文は、似て非なるものです。

このSQL文は、自動で修正されません。

しかも、フィールドの型によってシングルクォーテーションと、ダブルクォーテーションの違いがあります。

ここが本当に面倒でした。

慣れてしまえば、どうってことはないのでしょうが、できるだけSQL文は短くしたほうがいいでしょう。

VBAで更新クエリを実行 作業手順 その3 デバックの嵐

今回ほど、デバックに悩まされたコードはありませんでした。

今回の最大の難関は、このコードの記載方法につきます。

今回は、たまたま、更新項目が、4つですが、これが10個もあったら、赤枠のような長いSQL文を書かなくてはなりません。

実際に、現在作成している会社のシステムは、100個以上のフィールドがあります。

一応、数値型、文字型、日付型の3つを用意しているので、ここを参考にしていただければ、8時間もハマらないと思います。

出現したエラー達

 

このエラーに関しては、フィールドの型が一致しないときに出現します。

型が一致しませんとは表示されません。

パラメータが少なすぎます。2を指定してください。

キャプチャーするのを忘れましたが、2バージョンもあります。

 

キッカケは、上のコードです。

SQL文が長くなったので、アンダースコアで区切ましたが、なんとも見にくいっていうか、このコードは誰もメンテができないと思いました。

綺麗にまとめることができなくで、青枠のコードに変更したのです。

このエラーですが、日付型は、シャープ(#)で囲むのですが、シャープ(#)を忘れると出現します。

日付型はカンタンに見抜けますが、数値と文字型では、クォーテーションがあるか、ないかなので、結構判定が厳しいです。

これは、単純な構文エラーですが、いつもなら、カンタンに見抜いていたのですが、デバックの嵐の中で、やっていたので、調べていました。

このエラーの原因は、不要なカンマ、クォーテーションが原因です。

 

とにかく、様々はエラーが発生しました。

半角スペースと全角スペースが異なるだけも、エラーが発生しました。

VBAで更新クエリを実行 作業手順 その4 VBAでSQL文の書き方

 

上記のコードを見比べて、どちらが、他人にやさしいかですね。

断然に、下のコードだと思います。

特に、VBAでサブクエリを実行する場合などは、下のコードで記載したほうがいいでしょう。

vbNewLineは、改行コードです。今後は、改行コードはvbNewLineを利用しようと思っています。

 

ここがポイント

 

ここがポイント
Function8.png
今回は、コードの書き方に尽きます。
少しでも、見やすいコードを書くことは、可読性が上がり、メンテナンスが楽になります。
更新クエリをVBAで実行するに当たり、こんなにも難しいのかと思いました。
デバックとの戦いでしたが、完成したときは、本当にうれしかったですね。
ある意味ですが、アクションクエリは、VBAで実行できるようにしたほうがいいですね。
必ずしも、大量データだけを更新、追加、削除するのではなく、小回りの利く技も必要と実感した日でした。
動画とブログでわかりやすくExcelとACCESSを紹介しています

まとめ

今回は、ACCESSの中では、最も重要な更新クエリをVBAで実行してみました。

各アクションクエリもどこかで利用する可能性もありますので、機会があれば、紹介しようと思います。

今回も最後まで読んでいただき、ありがとうございました。

 

今回のサンプルファイルは、No246です。

毎日の業務が、3時間短縮できます

わからない事を延々と考えるのは、無駄です。

  • なんで作動かないの?
  • もうやだ!VBAなんか嫌い!
  • ネットで調べても情報がない!

必ず作動するコードが、ここにあります。

スポンサーリンク

Twitterでフォローしよう

おすすめの記事