2007/02/19

Access2007 新機能 Attachment型 -- 3

Microsoft Office2007を使い始めて早数ヶ月。やっと正面から取り組んでいるような気がする今日この頃ですが、まずはAccessから弄っています。本来ならばβの段階でやっとけって話なんですが、Accessに望む機能というか期待と実際の新機能のバランスと、精神的というか時間的なゆとりとかモチベーションみたいなものが低い・少ないみたない理由からか今になって色々見ています。

ちなみにManualとかDocumentって後から必要な部分だけ読むタイプであり、試行錯誤しながら理解を深める(素晴らしい表現だ・・)のが好きだったりしますので、既出のことを今更何を言ってるのみたいな事も多いかもしれません。このBlogも仕事柄人に説明したりするときに必要な知識とか資料の作成のベースとするべく、雰囲気というかノリで書いてます。

本題のAttachment型に関してですが、今回はVBAからの扱いを見てみました。まずDAO.DataTypeEnumに定数dbAttachment = 101 (&H65)が、それとObjectとしてのAttachment型とそれを扱うコントロールが追加されされた形になります。Access2007に関してMSDNの当該ページを見ると、追加されたObjectって今回は6個のみなんです。そのうちの3つはマクロ関連(TempVar, TempVars, MacroError)なんで、マクロ嫌いの私としてはあまり関係なく、残りはImportExportSpecificationImportExportSpecifications、そしてAttachmentとなります。

注意すべきなのは、AccessFormを作りRecordsetBindした場合、Form上にそのRecordsetの各Field毎にAccessField Objectが定義されるという事です。これがどうしたって言うと、MailsテーブルをBindした場合、Mailsに含まれるFieldであるAttachmentsは、me. Attachmentsでアクセスできるのですが、それと同一名称のコントロールであるAttachmentsも存在しうる、むしろWizard等でアクセスに任せた場合同一であるって事です。

上記のような場合は、me. Attachmentsにアクセスした場合、それはAccess ObjectであるAttachmentコントロールになります。

上記のようにAttachment(Accessのコントロール)です。

ですが、このコントロール名を変更すると、

上記のようにAccessField型、つまりはFormBindされているRecordsetFieldになります。

実際にはコントロールとFieldは常にBindされており、値(Valueプロパティ)は同一ですし、相互に反映されるので値のみを扱っている場合は問題は少ないのですが、プロパティやメゾッドを扱う際にエラーになったりして混乱したり。

Formを作成する際に半ばAccess任せでコントロールまで作成して、不要なコントロールを削除とかって事をする場合があるかと思いますが、後からFormに手を入れたりしてコントロールを扱ってるのか、それともFormBindされたAccessFieldを扱っているのか良くわからないコードが結構あったりします。オブジェクトの名称を変更している場合、その変更した本人ですら中途半端になってコード上で双方をその場の思いつきのように使っていたりとか。

シンプルにAccessを使っている場合は問題は少ないのですが、Control全体をループで回して操作(Enable/Disableとか)したり凝った機能を後日追加しようとしたりすると頭が痛くなったりしますので、注意して貰いたいです。まぁMicrosoftもこの辺りなんとかしてくれないかとは思うんですが。

なんか本題からそれてきてしまったので、続きは次回のPostで。

関連のありそうな記事

0 コメント: