Accessオブジェクト命名規則
■ "わかりやすさ"を目指す為
アプリの作り方、作る順番は、人それぞれ。
私🍶の場合は、「メインメニュー」を一番最初に作ります。
理由があります。
一番の理由は、Accessの各オブジェクトの命名の為。
二番目の理由もあって、自分の作り方を確立。
自分1人で制作しても、後から見たら、赤の他人が作った様に思えてしまうのが、自作ツールというもの。
いわゆる「明日の自分は他人現象」
その現象を緩和させる為にもあります。
要するに、システム内の構造を "わかりやすく" する為。
実際の画面。
メインメニューの機能に番号を付与しています。
実例で、一番上のコマンドが
「1.送料テーブルのメンテナンス」です。
番号が「1」です。
で、クエリ、フォーム、レポート、マクロ、モジュールにも、001、002、と番号を付与させています。
各オブジェクトの名前の番号は、メインメニューの番号に合わせています。
メインメニューの「1.送料テーブルのメンテナンス」で新しいフォームが開きますが、そのフォームは、「frm_001_送料メンテナンス」となります。
コードを見る必要なし。
「frm_001_送料メンテナンス」で使用されている
クエリは、
「qry_001_サイズ荷姿対比表」と「qry_001_送料テーブル」。
レポートは、
「rpt_001_送料一覧」となるわけです。
私が初めてAccessを触って、アプリを作り始めたのは、1998年の頃。
あれから25年以上は経過。
25年の結果での、命名規則が図の様になっています。
これだけでも、「このクエリは、ここの機能で使われている」が見ただけで判断ができます。
ただし、この命名規則には、Accessのシステム作りにて、1つの制限を与えます。
それは、「サブメニュー禁止」
例えば、メインメニューで、「1.送料テーブルのメンテナンス」をクリックすると、「frm_001_送料メンテナンス」が開きます。
「frm_001_送料メンテナンス」から、新たに開けるフォームを作成することを禁止するルールです。
サブメニューを許してしまうと、この命名規則が複雑化します。
だから禁止としています。
Accessでアプリを作っている人で、このルールを明記している人はいるのかは不明瞭ですが・・・これが25年間Accessでシステムを作ってきた結論です。
ということで、Accessで新規に作成する場合、私🍶は、初めにこの操作を実行します。
オブジェクトブラウザで右クリックメニューで名前の順番で並び替えします。
■ 連続データ処理のクエリ名
シンプル イズ ベスト
ま、素晴らしい言葉ですが、実務って簡単じゃないから、処理も複雑なものになりがちです。
ある一つの結果を出力する為に、複数のデータ処理をしなければならない場合もあります。
実例は下図のようになりますが、正直良くない💦
でも、処理する順番はわかりますね。
それと、クエリ名は、恐れず長い名前を付けちゃいましょう!
正直、SQL文やクエリのデザインを見たところで、
理解できる人はどのくらいいるのでしょうか。
疑問です。
ある程度の処理内容を名前に書いてしまうのが良いです。
一つのフォームに、複数の独立した処理がある場合なら、下のような命名をすると良いと思います。
--- 連続した処理例 ---
qry_008_02_売上データ更新_01_トランザクションテーブルクリア
qry_008_02_売上データ更新_02_更新データ抽出01_○○情報_01
qry_008_02_売上データ更新_02_更新データ抽出01_○○情報_02
qry_008_02_売上データ更新_03_更新データ抽出02_△△情報_01
qry_008_02_売上データ更新_03_更新データ抽出02_△△情報_02
qry_008_02_売上データ更新_04_更新データをトランザクションテーブルに追加
qry_008_02_売上データ更新_05_本テーブルのデータ更新
qry_008_02_売上データ更新_06_本テーブルにデータ追加
qry_008_03_売上データのダウンロード_01_データ抽出
qry_008_03_売上データのダウンロード_02_抽出データのインポート
qry_008_03_売上データのダウンロード_03_ダウンロードデータ
-------
qry_<処理番号>_<処理の名前>_<処理順番>_<処理している内容>_<[順番]>
こんな感じです。
名前を長くして、分かりやすくを求めるのが吉です。
これによって「明日の自分は他人現象」を抑えられます。
■ 番号が無いオブジェクト
番号を付けましょうと書いておきながら、番号がないオブジェクトも存在します。
クエリであれば
「qry_送料抽出クエリ」
マクロは、全部。
モジュールにも複数存在しています。
これらは、「汎用オブジェクト」です。
つまり、複数の機能から使用されるオブジェクトのこと。
番号が無いオブジェクトは、どこの機能からでも利用されていると意味付けしており、変更するには、注意が必要と、無言の警告。
あまり、テクの記事を書かないと宣言しましたが、まったくしないとは書いていないので、テクの話をします。
「qry_送料抽出クエリ」
こいつの中身を見せます。
PARAMETERS Mover Text ( 255 ), KeyDate DateTime, Region Text ( 255 ), SizeA Long;
SELECT tbl_送料テーブル.配送方法, tbl_送料テーブル.[サイズ], tbl_送料テーブル.都道府県, tbl_地方テーブル.地方, tbl_送料テーブル.送料, tbl_送料テーブル.有効開始日 AS 有効開始日の最大
FROM (tbl_送料テーブル INNER JOIN tbl_地方テーブル ON tbl_送料テーブル.都道府県 = tbl_地方テーブル.都道府県) INNER JOIN (SELECT A.配送方法, A.[サイズ], B.地方, Max(A.有効開始日) AS 有効開始日の最大 FROM tbl_送料テーブル AS A INNER JOIN tbl_地方テーブル AS B ON A.都道府県 = B.都道府県 WHERE A.有効開始日<=[KeyDate] GROUP BY A.配送方法, A.[サイズ], B.地方) AS C ON (tbl_送料テーブル.有効開始日 = C.有効開始日の最大) AND (tbl_地方テーブル.地方 = C.地方) AND (tbl_送料テーブル.[サイズ] = C.[サイズ]) AND (tbl_送料テーブル.配送方法 = C.配送方法)
WHERE (((tbl_送料テーブル.配送方法)=[Mover]) AND ((tbl_送料テーブル.都道府県)=[Region]) AND ((tbl_送料テーブル.[サイズ])=[SizeA]))
GROUP BY tbl_送料テーブル.配送方法, tbl_送料テーブル.[サイズ], tbl_送料テーブル.都道府県, tbl_地方テーブル.地方, tbl_送料テーブル.送料, tbl_送料テーブル.有効開始日
ORDER BY tbl_送料テーブル.[サイズ], tbl_地方テーブル.地方;
個人的感想ですが、Accessでシステムを作る人で、クエリにパラメータを設定している人は少ないと思います。
多くの人は、WHERE句に、フォームの値、オブジェクト名を指定していると思います。
ただ、WHERE句に、オブジェクト名を指定してしまうと、汎用性0で専用のオブジェクトになります。
悪くはないですが、事例のような、複雑なクエリの場合、何個も作りたくないものです。
その時に、パラメータクエリが便利になってきます。
VBAでパラメータ値を指定して、レコードセットとして取り扱い可能になります。
VBAでは、ADODBのCommandオブジェクトを利用して、パラメータ値を設定します。
CommandオブジェクトのParamerersコレクションに、CreateParameterメソッドを利用することで、パラメータ値を設定できるようになります。
■ まとめ?
Access では、オブジェクトの組み合わせでシステムを作っていきます。
その為、これからの作業をした説明をする前に、命名規則の事例を紹介しました。
たぶん、ここまで細かく説明した記事は無いと思います。
参考にしていただければ、嬉しく思います。
余談ですが、私は、Accessで、クエリを1個も作成しない人を見た事があります。(現役の人です)
その人曰く「増えると混乱してくるから、修正が大変だから」と言っていて、全てVBAでSQL文ゴリゴリ書いていました。
内心は「そんなに変更あるかな?混乱するかな?」と思っていますが、
作り方は人それぞれです。
正解も無ければ不正解もないです。
でも、SQL文の訂正って苦な作業です。
だったら、出来る限りクエリを利用した方が良いと思います。
ま、以上になります。
ここまで読んでいただいてありがとうございました。
この記事が気に入ったらサポートをしてみませんか?