Accessの添付ファイル型フィールドに記録された画像をフォーム上でランダムに切り替える

 メインブログでやれと言われるかもしれませんが、たいして意味のない内容なのでこちらで。

 n画面分割(同時にn個の画像を表示する)が可能で、そのうちランダムに選ばれたm画面の画像が一定時間ごとに切り替わるようなスライドショーというかフォトフレームのようなWindowsのフリーソフトはないだろうかと探してみたんですが見当たりませんでした。まさに情弱;-o-)というより、実際に全然ニーズがないんでしょう。
 ただ、これをAccessのフォームでやったらどうなるだろうかというのが気になり、実際にテーブルを作って添付ファイル型フィールドに画像を突っ込んでみましたが、これをフォーム上の非連結コントロールにバインドさせる方法がわかりません。まさに情弱;-o-)というより、このあたりの扱いにくさというか機能のショボさは20世紀から全然変わってないような気がします。

 結局思いついたのは次のようなやり方です。

  • 「ID」列(数値型)と「画像」列(添付ファイル型)を持つテーブルを設ける。
  • 単票型のメインフォームと単票型のサブフォームを1個ずつ作る。上記テーブル(クエリ)をサブフォームのレコードソースとし、「画像」列に連結した添付ファイルコントロールを設置する。
  • メインフォーム上に上記のサブフォームをn個設置する(サブフォーム1~サブフォームnとする)。
  • メインフォーム上にテキストボックスをn個設置する(テキストボックス1~テキストボックスnとする)。
  • それぞれのサブフォームのリンク親フィールドを「テキストボックスi(iは1~n)」、リンク子フィールドを「ID」とする。
  • フォームモジュールにタイマーイベントプロシージャを設ける。
  • 上記プロシージャに「IDの値からランダムにm個を選択し、さらにn個のテキストボックスからm個を選択し、m個のIDをm個のテキストボックスに記入する」コードを置く。

 要するにリンク親フィールドを書き換えることでサブフォームの画像を切り替えるというわけです。

f:id:accs2014:20171101215153p:plain:right:w400

 Accessですのでテキストを一緒に表示したり、ジャンル列やお気に入り列を設けてリアルタイムで表示対象を絞り込むことも考えられますが、この辺で飽きた;-o-)これだと画像の容量ですぐ2GB制限にひっかかるし。一応n=4で動作したときの画像を貼り付けますので参考まで。