ACCESSは大量のデータを一気に更新することができます。
しかし、場合によっては、1行の更新も必要になります。
今回紹介する記事は、VBAで更新したほうが便利でしょう。
目次
更新クエリをVBAで実行する
こんにちは。伊川(@naonaoke)です。
前回、前々回の続きになります。
時間のある方は、下記の記事を読んでから、本記事を読んでいただくことをお勧めします。
非連結のテキストボックスで入力フォームを作成する過程を説明しています。
今回は、入力した内容を修正する場合です。
連結のテキストボックスであれば、データを呼び出しで、上書きするだけで完了です。
しかし、非連結の場合はそうはいきません。
データは上書きできません。
修正というよりは、正しい情報に更新するということです。
そうなると、更新クエリを各フィールド毎に作成なんてできません。
ここは、1行の更新をVBAで実行することになります。
このブログはこんな人にお勧め
- ACCESSで入力フォームを作成している人
- VBAでアクションクエリを実行したい人
- VBAのコードを改行したい人
このブログを、読み終わるころには・・・・
今回は、このコードを作成していて、久々の8時間コースになりました。私の失敗談を含めて紹介していきます。
コードの書き方が参考になると思います。
VBAで更新クエリを実行する
先ほども言いましたが、非連結のテキストボックスで入力フォームを作成した場合は、
データを上書きすることはできません。
すでに主キーが入力されているので、登録ボタンを押しても、新たにデータが追加されるだけです。
しかし、主キーが登録されているため、一旦レコードを削除してから、新たに登録という手順になります。
[
こんなの無理です。
入力項目が、100個あった場合には、面倒で、そのシステムは誰も利用しません。
だから、主キーを抽出条件として、主キーに紐づいているデータを更新するという手順が必要になります。
では、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を利用しようと思っています。
ここがポイント
今回は、コードの書き方に尽きます。
少しでも、見やすいコードを書くことは、可読性が上がり、メンテナンスが楽になります。
更新クエリをVBAで実行するに当たり、こんなにも難しいのかと思いました。
デバックとの戦いでしたが、完成したときは、本当にうれしかったですね。
ある意味ですが、アクションクエリは、VBAで実行できるようにしたほうがいいですね。
必ずしも、大量データだけを更新、追加、削除するのではなく、小回りの利く技も必要と実感した日でした。
まとめ
今回は、ACCESSの中では、最も重要な更新クエリをVBAで実行してみました。
各アクションクエリもどこかで利用する可能性もありますので、機会があれば、紹介しようと思います。
今回も最後まで読んでいただき、ありがとうございました。
今回のサンプルファイルは、No246です。
わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。