Access パラメータを使った VBA のマスタ参照のモジュールも公開します。

はじめに

サイバーBB は、長年続けてきた Access による受託ソフト開発の新規受注をしない。と決めましたので、これまでの BB の開発手法を紹介します。

これまで、Dos 版の dBASE から Windows 版の Access とずっと独学と自分なりの我流でやってきました。ですから最近になって、「えっ!こんな便利なコマンドがあるの?」「Access ってこんな感じで開発するの?」と後で気づいた事もあります。

と言いながらも数十年間、何十社という会社の受託ソフト開発や、「顧客管理のテクノデービー」として通販でもパッケージソフトの販売をしたり、それに全国展開のある業種の OEM 供給を行った事もあります。しかし問題になった事は一切ありませんので大丈夫です。

もっとも自慢なのが自社独自の入力ルーチンです。これは、 Access 独特のコンボボックスを使わない。という考えの入力方式です。

コンボボックスを使わず、1行のパラメータ文で、ウインドウを開き、その中から該当するマスタのコードを選択してその内容を画面に取り込むと言う方法です。多分、この方法は、Access を使っているところでも自社だけしかやっていない自慢の方法だと思います。

それ以外でも、伝票入力中にマウス操作を極力少なくする。日付入力や時間入力など簡単な入力方法を部品として作る。などなど。。

こういう開発を行う場合、どうしても必要なのが変数の作り方です。と言う事で、今回は、変数について紹介して行きたいと思います。

サイバーBB の前、有限会社テクノデービーとして開発を行った Access の社内システム「商助」や資金繰りソフト「商助」など、YouTube で見る事が出来ます。恥ずかしいですが、[井手弘行] [有限会社テクノデービー] [社内システム「商助」] などで検索して頂ければ投稿している動画を見ることができます。下記は、社内システム「商助」の画面で、新規伝票の説明を行っている動画です。

 
Microsoft Access 2016 (最新 永続版)|カード版|Windows|PC2台
 

テーブル名の付け方

全て、半角文字の大文字で行います。ひらがなやフリガナなどは一切使いません。Access は、米国で開発されたものです。以前、英語と日本語の問題で色々ありました。つい最近も 2017 年 10月 もモジュールの名前に日本語文字で名前を付けているとモジュールが削除される。という大変な問題もありました。ですから、プログラミング上、オブジェクト名、変数には日本語は使わない。と決めています。

マスタには、TM_の後にアルファベット3文字名
TM_TOK 得意先マスターテーブル
TM_SYO 商品マスターテーブル
TM_TAN 担当マスターテーブル

伝票には、TD_の後にアルファベット3文字名、過去数回、システムが大きかったのでテーブル数も多く、3文字では表現できなく4文字にした事があります。しかし、だいたい3文字で大丈夫のようです。
TD_URH 売上伝票ヘッダーテーブル
TD_URM 売上伝票明細テーブル

帳票には、TR_の後にアルファベット6文字程度、このテーブル開発時に影響する事ってないので6文字から8文字程度で名前付します。これらは、複数個のテーブルを参照して複雑な帳票を出力する時などに使用します。簡単なものは TR_XXXXX の作成は行わず、作業テーブル W_XXXXX のままで帳票を作成し、帳票を閉じる時はこのテーブルも削除しています。
TR_TOKMTO 得意先元帳出力時のテーブル
TR_KKKKSH 顧客推移表テーブル

システム上、またはプログラム上で必要なテーブル TP_の後にアルファベット3文字、TP_TBL などSQLサーバーを使う場合、リンクするテーブル名リストのテーブルなどに使用しています。

以上は、BB が勝手に付けた約束事ですので、あまり気にしないでください。

ここでは難しく感じるので説明しませんが、TK_ や、TN_なども使っています。

プログラムの処理中に作成されるテーブルで直ぐ削除してもいいテーブルや、帳票作成時の一般的なテーブルには、W_アルファベット3文字から8文字程度にしています。又、プログラムが複雑になると区別するのに大変なので、できるだけ分かりやすい省略の名前を付けます。

どうして、TM_TOK や TD_URH 、TD_URM などのように3文字にこだわるかといいますと、部品を作るのに長さを一定にしておかないと複雑なプログラミングが出来ないからです。BB は、開発にクエリーを殆ど使いません。チョット複雑な SQL 文を記述しようとすると1行では記述出来ないようになってしまい、これを複数行に分けて記述するのが面倒だし、バグを発生しやすくなるからからです。ですから3文字にこだわっています。

 
よくわかる Microsoft Access 2016 基礎
 

プログラムの部品化

ソフト開発をずっと行っていると、同じ事の繰り返しが多く、一つ一つプログラミングするのが辛くなってきます。

そこで、もっと簡単に出来ないかなーと考えると、毎回同じ動作をする内容には違う値だけをパラメータとして送るといつもの処理を行ってくれるような部品をたくさん作ると楽になって行きます。

最初は上手く行かなくてもここを頑張ると、これから先の他のアプリ開発にも使えるので楽になります。

このパラメータ化した部品を作る為には、テーブル名、フィールド変数など、統一化した名前付けをしておかないと大変な事になります。宜しかったら BB の開発方法を参考にされてみませんか。

得意先マスタのテーブルのフィールド名について

TOKCODは、得意先コードをローマ字で TOKUISAKICODO と表し、赤文字分6個で名前付けします。
TOKKSMは、得意先会社名をローマ字で TOKUISAKIKAISYAMEI 
TOKKSFは、得意先会社フリガナをローマ字で TOKUISAKIKAISYAFURIGANA
というような感じで名前付をしております。

しかし、

  • 専門性のある大きなシステムになると、同じような名前の変数がたくさん必要になってきます。
  • 一つの内容に対して、前年分 MURHURG、今年の累計 KURHURG、当月分 TURHURG など
  • 一つの内容に対して、売上額 URHURGU、仕入額 URHURGS、粗利額 URHURGA、粗利率 URHURGR など

本来、メインとなる変数(上では URHURG )に6文字の最初や最後に 1文字又は、2文字を追加して、わかりやすい変数名に工夫するようにしています。

この調子で作って行くと、変数名もだいたい覚えたり、同じ名前が頭に浮かんできたりして困る事はそうありませんでした。

又、上図のように、それぞれのフィールド名の説明も残しておくと開発が終わってサポートをする場合に役立ちます。是非、説明文は入力しておいて下さい。

 
AccessVBA逆引き大全 600の極意 2016/2013/2010/2007対応
 

得意先マスタのフォーム(画面)の変数名について

BB の開発では、フォームのレコードソースに TM_TOK のテーブルを結合しない非連結型の開発で行っています。この非連結型の開発方法はプログラミングが面倒ではありますが、お客様の細かい要望に応えやすいように思います。

非連結の作り方なので、

名前:TOKCOD とし
コントロールソース:空白にします。

テーブル名とフォームのプロパティの名前を同じにすると、間違いも少なくなり開発効率も上がります。

 

 

モジュールを使う場合
 [ツール] – [オプション] – [エディター設定] で、フォント名をMSゴシック に設定し、MSPゴシックにはしない方が良いと思います。

テーブルの中のフィールドの変数、フォームの中のコントロールで使用する名前も全て半角英数大文字の6文字で統一すると下記のようにキチント並び作業性が良くなりミスが少なくなります。

Me.TOKKSN = Null
Me.TOKTAN = Null
Me.TOKYBN = Null
Me.TOKAD1 = Null
Me.TOKAD2 = Null
Me.TOKTEL = Null
Me.TOKFAX = Null

Me.TOKKSN = DN01!TOKKSN
Me.TOKTAN = DN01!TOKTAN
Me.TOKYBN = DN01!TOKYBN
Me.TOKAD1 = DN01!TOKAD1
Me.TOKAD2 = DN01!TOKAD2
Me.TOKTEL = DN01!TOKTEL
Me.TOKFAX = DN01!TOKFAX

テーブルの名前付や、フォームの名前付でこのような名前付をしておくと下記動画のような事も行えるようになります。

これは、有限会社テクノデービー時代に作成した社内システム「商助」の商品コードの入力の動画です。コード検索、カナ検索が、商品コードの入力欄からカーソルを移動する事無く、その場で行えます。

商品コードのプロパティの中の更新後処理のイベントプロシージャーの中に記述しているモジュールで、入力のところは下記のたったの 1行 のパラメータのみです。(もちろん、後の処理は、それぞれのアプリによって色々記述しています。)

WINOUT = WINSB2(“0”, “F_URIHED”, “F_URISUB”, “URMSYC”, “URMSYN”, “”, Me.URMSYC, “”, “TM_SYO”, “SYOCOD”, “SYONME”, “SYOKEN”, 6, “SYOCOD”, “SYONME”, “SYOKKK”, 12, 7, 12.7, “06004040”, 2)

得意先マスタ部分の入力パラメータ
WINOUT = WINHED(“0”, “F_URIHED”, “URHSKC”, “URHSKN”, “”, Me.URHSKC, “”, “TM_TOK”, “TOKCOD”, “TOKKSM”, “TOKKSF”, Me.TOKCDKS, “TOKCOD”, “TOKKSM”, “TOKAD1”, 6.7, 6.5, 12.2, Format(Me.TOKCDKS, “00”) + “004040”, 2)

担当マスタ部分の入力パラメータ
WINOUT = WINHED(“0”, “F_URIHED”, “URHTNC”, “URHTNN”, “”, Me.URHTNC, “”, “TM_TAN”, “TANCOD”, “”, “TANKEN”, 3, “TANCOD”, “TANNME”, “TANKEN”, 12, 5, 12.2, “03002000”, 0)

部門マスタ部分の入力パラメータ
WINOUT = WINHED(“0”, “F_URIHED”, “URHBMC”, “URHBMN”, “”, Me.URHBMC, “”, “TM_BMN”, “BMNCOD”, “”, “BMNKEN”, 3, “BMNCOD”, “BMNNME”, “”, 12, 5, 12.2, “03002000”, 0)

ほとんど同じようなパラメータを送っていますよね。これだと作業効率も上がるし、バグも極端に少なくなります。

そのかわり、WINHED という部品は相当時間を掛けて作成しましたが、一度作成しておくとどのシステムでも使えるから便利です。

このように、規則正しい変数付けで、どのシステムでも使えるような便利な部品をたくさん作ると信頼性も上がり、自分も楽ができ良い事ばかりです。