今や商用DBは Oracle と SQL Server が2大勢力である。もちろん、無償のモノなら MySQL や PostGreSQL もある。

私の個人的な選択肢は、
・カネを掛けたくないなら PostgreSQL
・カネを存分に掛けられ、Windowsでよいなら SQL Server
としている。この2つは私が保守に慣れているからだ。

もちろん、お客さんの指定があったり、実際の保守要員が慣れているモノにするなど、他に適切なモノがあったりする場合は別のモノを提案する。実現はしなかったが、とにかく速いデータベースが必要という場合には、高速屋の「高速機関」が使えるかもメーカーに問い合わせたことがある。

今までは、XMLへの対応も気にして、DB2も範疇に入れていたが、他のDBMSでも対応が謳われてきていること、XMLDBという別カテゴリも出てきていることもあり、除外した。

OracleではなくSQL Server であるのは、これ以外に「ミラーリングが可能」であること。どうやら他の製品では対応していないようで、とことん高可用性を求めるならこれだろう、と思う。
ただ、そこまで必要になるシチュエーションはそうないはずだ。しかし、DBMSを変更するというのは厄介な作業である。プログラムを変更する、と言う程度ならまだマシであるが(一般にはコレすら嫌がられる)保守の画面やらが総入れ替えになり、再教育が必要になるからである。それなら初めからどう転んでも大丈夫なモノにしておく方が安全だ。


念のために書くが、このブログはVBAの情報がメインであるにも関わらず、上記の選択肢には Access が含まれていない。それは知れたことで、Access には DBMS と呼べるだけの機能が備わっていないからだ。それなら SQL Server Express Edition の方がずっといいだろう。

さて、AccessのMDE形式で保存したコードを作成する場合の注意点がある。Access2003で、それ以降は変わったか確認していないが・・。

共通モジュールを作るなら、折角だからClassモジュールにしておきたいが、一般的なクラスモジュールの利用方法はできない。
どういうことかというと、Classモジュールには Instancing というプロパティがある。値は
・1- Private
・2- PublicNotCreatable
のどちらかを設定できる。いや、この2つのどちらかしか設定できないのだ。


1- Privateを選択する

該当するMDEファイル内の Private クラスとなる。つまり、このクラスには直接外部からアクセスすることはできないし、オブジェクトブラウザにも出てこない。


2- PublicNotCreatableを選択する

オブジェクトブラウザには表示される。しかし、該当するMDEファイル内でインスタンスを生成することはできるが、外部ファイルからクラスを生成できない。


そう、せいぜい「Staticなものを作ったから利用して」という用途くらいにしか利用できないのだ。標準モジュールでラップするという手を使えば外部からもコントロールできるはずなので、関数名を長ったらしくして「それ」と分かるようにする等の手で実現は可能だろう。

しかし、もう少しいいやり方がないかな、と模索してみたい。アレを試そうか、というのは、あるので、試したらまた書くかも知れない。

ExcelでAccessに使える共通関数は作れません。その逆も然り。VSTOとか、Office Developer は除きますが・・。

最近、DLLにしたくないので、ということで、Excel向けの共通関数をAccessへ移植しました。ほぼモジュールをコピーしただけ、です。
AccessはMDE形式で保存することができます。この形式はExcelでいう .xla みたいなもの。だと思っていたらちょっと違いました。VBAをMDEにすると、ソースコードは閲覧できなくなってしまうのです。つまり隠蔽可能、ってことです。

これはこれで面白いので、ドキュメント付きで公開しようかな。