Q.Accessを使ってシステム開発するときに、気をつけることってありますか?
2020年6月24日
2020年7月6日

* おすすめ書籍:失敗しないデータベース プログラミング
もともとはAccessって、個人向けデータベースソフトなんですよ(^^;;)開発ツールとして作られた訳じゃないんですよ(^^;;)
…とは言っても。世はデータベース全盛時代(なの?)。Oracleなんか高くて手が出ない、ってゆーか運用できないよだけどデータベース使ったシステムが欲しいんだよーんってなお客さんは星の数ほどいるはず。
そうゆう人には(お客さんが払う)ライセンス不要(開発者がDevelopper持ってればの話だけど)、お手軽簡単すぐできるAccessはやっぱり使われちゃいますよねぇ。
実は「地獄への階段」は、まさにこの質問のために作ったコンテンツなのです。ここをシステム設計する前に読むか後に読むかで、かかる経費工数期間すべてに大きな差が出ます!…という効果を狙ったんですが、出てますかね?(^^;;)まぁそれはいいとして。
まず、おおまかなところでは「地獄への階段」に目を通してもらうとして、ここでは「使ったらハマる!これをするのは要注意」として簡単に紹介します。
- レポートの用紙設定は変更しないこと
ちょっと待てなんで?!じゃあ用紙 A3 とか B5 とかのレポート作っちゃダメだっつの?ばっかじゃねーの冗談じゃねーよ!
…と思うデショ。実はこれは超クセモノなんだな…
まず。世の中には星の数以上のプリンタがあります。機種はさまざまです。つーことは、その設定した用紙が使えるプリンタばっかりじゃないってことなんですよ。
A4 横、余白は 3mm ならキレイに印字できるレポートを設計したとします。しかし、余白が 3mm に設定できないプリンタなんてゴマンとあるわけですよ。お客さんに「印字できるプリンタ買ってくれ」って言えばすむのならいいですが、そーでない場合は注意しましょう。
特に、大勢に配布するようなシステムは注意が必要です。不特定多数ならよけいです。
おまけに Access のレポートは、前回設定を保存したプリンタドライバの情報をしっかりレポート毎に持ってます。次にレポートを開いたとき、プリンタドライバの情報が少しでも違っていると、ページ設定をそのマシンの「通常使うプリンタ」の規定の設定に変更してしまいます。なにも知らないユーザーが見たら、レポートがめちゃくちゃとしか見えなくなってしまうでしょう。
ん?PrtDevMode を使えばいい?そーなんですが、これはレポートをデザインで開く必要があるので、不特定多数の人に配布するには使えません(赤の他人にデザインで開かせてもいいんなら別だけど)。mde ファイルにしたらもっと使えません。
そんな工数かけて苦労するぐらいなら、たいがいのプリンタが用紙の規定値にしてる「A4 縦」で最初っから設計しておけば問題ないですよね。A4 縦で印字できないプリンタだったらどうしよう(^_^;)そんなんあるのかなぁ?
印刷帳票とか、レイアウトの決まっているものに印字したい場合は、エンドユーザーに覚悟してもらうしかないでしょう。結局確実なのは実際に使う環境でページ設定を行うことなんです。
…そうは言っても、なかなかそう上手くはいきませんよねぇ…(-_-;)
Access 2002 からは、レポートで Printer オブジェクトがサポートされました!\(^o^)/ ばんざい
他にもいろいろ「なぜいままでできなかったんだ」的機能が増えているので、レポートに重点を置いたシステムを作ろう or 配布しようと思ったら、迷わず Access 2002 以降を選択することをお勧めします!
開発がラクなだけじゃなく、エンドユーザの負担も軽くなることうけあい。まず、だまされたと思ってここ読んでみなって。きっとあなたも洗脳されます(笑) - OCXは極力使わないこと (たぶんもうだれも使わない!)
不特定多数のユーザーに配布することを考えた場合、OCX の利用は避けましょう。バーコードは避けようがないのでしかたありませんが、コモンダイアログとかドライブリストボックスとか、そういったものはもう絶対に使わないようにしましょう。
理由は簡単。Office 製品はなにかっつーとバージョンアップします。OCX は IE なんかにもついてきたりします。これがまたしょっちゅーバージョンアップします。
Access の場合、OCX のバージョンが設計時に使ったものと違っていると、すべての機能が正常に動作しなくなることがあります。
標準関数がコンパイルエラーになったり、#Name? なんてのが出たり、ウィザードが起動しなくなったり、全然関係ない場所でわけわからん影響が出ます。
こーゆー場合、OCX のバージョンが変わってしまったことにより参照設定がくずれてしまった可能性があります。
参照設定をしなおしただけで直るかどうかはわかりません。OCX の状態にもよるでしょう。
Access 本体は違うバージョンの同居は(基本的には)OKです。なぼも今 Access 全バージョンがインストールされた状態になってます(^^;;)
でも OCX はそーはいきません、レジストリがありますんで。Access95 についてきたグラフは、Access97 がインストールされちゃうと動作しなくなるそうです。(やったことないけど)
もしこれらのコンポーネントを利用してシステムを作る場合、契約書(または使用許諾書?)に、「余計なソフトをインストールしたり Office、IE のバージョンを変更した場合動作保証はしない」ことを明記し、事前にお客さんの承諾を得ておくのがいいでしょう。
まぁたいがいの場合、OCX 使わなくても同等の機能が実現できるはずですよ。API 使うことになりますけど。あまりお勧めしないけど。 - Sendkey には頼らない
SendKey って、つまりはキーボードから入力されたのと同じ信号を送るわけですが(厳密に言うと違うかも)、これが実にタイミングが難しい。
同時に起動してるアプリがあるかないかとか、リソースの状態や CPU 負荷がどうとか、OS は NT だ Win9X だとか、そういう環境に特化したことで成功するか失敗するかが決まっちゃうんです。
つまり、当たるも八卦当たらぬも八卦な訳ですよ。こ~~~~んな危ない橋渡るのやめましょうよ。
SendKey でしかできないよ~(;_;)と思われる機能も、どっかに別のやり方で実現する道があるはずです。探しましょう。Help を見て。Docmd オブジェクトあたりはよーーーく見るべし。 - 作ったオブジェクトは開放しよう!
もはや常識かなこんなのは(^^;)しかも Access に限ったことじゃないし。
Dim MyDB as Database
Set MyDB = CurrentDB
とかやって、作った MyDB 。Close も Nothing のセットもしないと、Access 本体が終われなくなることがあります。
定義したプロシージャが終われば開放してくれることにはなってるけど、どーもいまいち信用できないみたいなんで、自分で責任もって開放しとくにこしたことありません。
これは MyDB に限らず、RecordSet オブジェクトなんかも同じです。特にレコードセットは、いらなくなったらそっこー Close しちゃいましょう。無駄にメモリ確保しててもしょうがないですから。 - 開発環境での異なるバージョンの共存には注意!
…さっき、「基本的には」OK だとか言ってたような気がしますが。
Access は、Excel とは違い、違うバージョンの同じマシンでの共存が可能なようにできてます。(Excel は異バージョンが共存することを前提として作られていません)できてはいます。一応そうゆうふうには作られてはいます。いますが…
自分ひとりで使ってる分にはおそらく不便しないで使えますし、開発作業もできます(配布パッケージの作成とかは別ね)。ですが、他環境へ配布することを考えた場合、相当考慮が必要であることは否定できないと思います。
配布先のパソコンに Office 製品(Access があってもなくても)がすでにある場合、そこに Access ランタイム(とか Access 単体パッケージとか)をインストールしたら、異なるバージョンの Office が共存することになる可能性がありますよね。
しかもこういうケースって、たいていの場合 Office がプレインストールされてる環境なんで、先にセットアップされてる Office のほうがこれから入れる Access より新しいんですよねー…
(こういう場合どうしなきゃいけないかってーと、すでに入ってる新しい Office をアンインストールして、Acces 入れて、それからまた Office を入れなおし ウザイ)
さらに。Access 2003 から、なんとデジタル署名の機能が追加されやがりました。
ふつうに mdb ファイルを開いたとき、署名がない and セキュリティレベルが「低」でない場合には必ず「セキュリティの警告」が出やがるという恐ろしい仕様になりました。(しかも、Excel とは違ってモジュールコードがあるなしは一切関係なし。テーブルだけの mdb でも警告される)
そりゃぁね、「開く」ボタンを押せば開けますよ。でも「意図的にお使いのコンピュータに損害を与えるコードが含まれていた場合」「ファイルは安全でない可能性が」なんてメッセージが出て驚かないユーザーさんがいますか?
すでに慣れちゃってて驚かなかったとしても、起動するたんびにこれじゃウザイっての。
…まぁ 100 歩譲って、「デジタル署名すればいいんだろ」という結論に達したとします。
しかし思い出してください。デジタル署名は Access 2003 からの新機能。ってことは、Access 2000 形式 mdb ファイルにデジタル署名した場合、Access 2002 以前のバージョンでは開けなくなってしまうのですよ…どないせぇっちゅーの&いみなーいじゃーん。 - しつこいけど最適化
最適化のしくみは忘れずに!
自慢じゃないですが、なぼが設計し作成したシステムでは、mdb が破損したと思われるトラブルは起きていません。(いきなり電源切っちゃったとかそうゆうのは除く)
実は、自分でもmdb を壊したことはありません(あ、こないだ初めて壊しました、詳しくはここ)。Excel ブックや Word 文書は数え切れないほど壊しましたけど(–;;;)
「壊れるかも」ってことを頭に入れて、気をつけて使っていれば破損の確率は限りなくゼロに近くにまで下げられるんです。だったら気をつけましょう。
ユーザーにもきちんとそのあたりを説明して運用してもらいましょう。バックアップを忘れずに取る、こまめに最適化する、この程度のことで設計開発の工数が抑えられ(他 DBMS を利用することに比べればですが)安くて良いシステムが提供できる&利用できるのなら、双方にとって素晴らしいことだと思うのはなぼだけ?!?