Acessに関する考察 @ 2GBというデータベース制限(その解決と画像をそとにおいてAccessはものすごく小さめに f)に最終的解決策) 本格的なデータベースを構築するというよりは個人趣味で2023年から映画.DB(映画2023.accdb)を作成しているが、画像なども取り入れているため、あっという間に2GBの制限を超えてしまった。InternetやAmazon、Unextなどからダウンロードした映画を7TBのハードディスクに格納し、その題名・原題・制昨年・監督・出演者やポスターを登録したもの(映画テーブル)さらには出演者(あるいは監督)に関して氏名・原地名・生誕国・生年月日・逝去年月日・顔写真などを登録したもの(人名テーブル)の2つのテーブル(前者が 1,320件、後者が3,485件)とそのフォームで構成されている。 画像欄は映画ポスターが横長ではあるが282X400ピクセルの映画ポスターあるいは400X228ピクセルの映画の一シーン この場合、画像欄は縦長はピッタリ枠に収まるが横長は上下の枠に少しだけ余裕ある。プロパティーシートによれば9.407X6.111cm。人名の方の画像は枠そのものは横長の6.984X3.302cmだが画像は縦か横のどちらか長いほうが300ピクセルとした。(300ピクセル=5.08cm)人名については映画ポスターとちがってNetにころがっている画像を採取して大きさを加工しているので縦横バラバラである。また今気が付いたことながらAccessのプロパティーシートはcm単位で大きさを調整できるが画像もcm単位で調節してもよかった。画像ソフトであるirFanViewでは画像のサイズ変更の種類としてピクセル、cm、インチのどれかが選べる。なお、実際の画像のサイズ(例えば縦300ピクセル)と枠のサイズ(例えば縦3.302cmすなわち196ピクセル)は一致しない。画像そのものを縮小したり拡大したりして表示するわけである。 上記の、すなわち格納されている画像を縮小して映画と人名のフォームに貼り付けなおすことにより、2,097,088KBあった映画2023.accdbは99,916KB(97.5MB)と劇的にサイズ縮小された。 以下、irFanViewの操作とAccessの操作を主に詳述してみる。なおAccesはOffice Premium 2013もひとつであるが、近時NetでほかのPCに安く仕入れたOfficeと微妙にレイアウトが異なるようではあるが大した違いはないようである。 a) Accessのフォームで画像ファイルを右クリックして添付ファイルの管理を選ぶ。 名前をつけて保存をえらぶ。(最初の1枚でどこに保存するか指定したほうが良い。以降、Access立ち上げ直しまでは同じ場所になる。また名前をつけて保存のときに映画名や人物名をつけて保存したほうが良い、クリップボード.jpgなど重複する名前でAccess格納時に好きな名前で格納していると10枚20枚を後でまとめて操作する際に混乱する。 添付ファイルの管理としては名前を付けて保存してさらに削除をして新しい画像に備える。 b) 画像の拡張子はjpgが一番良い(小さくなる)ので、そう心がけたいが、png、jpeg、bmpなど様々である。とくにjpegをサイズ変更して同じ画像を上書きするとjpgという一般的な画像ファイルに変更して元のファイルと2枚(1枚が2枚に)なるので一般的ではないほうを(jpeg)削除することができる。 irFanViewの操作としては1枚1枚を表示して、画像のサイズ変更/リサンプルを選ぶ。私の場合は縦か横を400/300ピクセルに変更すれば良いがそのあとファイルの保存(元のフォルダ)を選ばないと変更が反映されない。なお、画像の操作には色の自動調節や、色彩補正などもあり、例えばこれら3種類を行ってからファイルの保存(元のフォルダ)を押しても3種類すべてが反映される。 なお、複数枚を加工するには、ファイルの保存(元のフォルダ)のあと矢印の右に移動すればよい。ファイルの保存したっけと思ったら、元の画像に戻ればよい。ちゃんとサイズが変更になっていれば変更を反映したということである。ファイルの保存(元のフォルダ)の場合は上書き保存するかの確認がある。 c) Accessでは変更された画像を取り込むこととなる。添付ファイルの管理で追加で画像を指定すればよい。 d) 結局VBなどで画像を指定しない限り、データベースに格納したらば、画像ファイルは不要なのではあるが作業用フォルダ(データベースへ格納する作業用)と映画/人物のフォルダー(すなわち作業終了後の念のため保存用)を指定している。後で例えばデータベース件数と画像ファイル件数に不一致がないかの検証用として保存している。 例えばミッションインポッシブル2と映画タイトルがなっているのに、画像ファイルでは「ミッションインポッシブル2.jpg」と「ミッション インポッシブル2.jpg」と2枚格納されていると数があわない。また厄介なのは「ミッションインポッシブル2..jpgのような拡張子との境にコンマ2つなども数が不一致の原因となることもある。さらには「ミッションインポッシブル2.png」となったままですべてjpgになっているとおもったのにpngもまじっていたりした場合の発見にも役立つ。さらには発見が難しいのだが、jpegと4文字の拡張子はirFanViewでは画像サイズの変更が出来ていないケースがある。 e) なお、かつてVBを駆使していたころのちょっとはずかしいAdult2003.mdbにおいては画像は別ファイルに格納していたこともあるが、かなりこみいったデータベースであり新規モデルなどの登録については、今となっては、思い出さないと簡単に再現出来ないので、相当な時間を要すると思う。 f) 一切VBAを使用しない外部画像ファイルをAccess(xx.accdb)で表示することには下記の Urlで適例ではないかとも思える。 https://hamachan.info/win8/access/gazou.html いま一歩なのは、 (1)一つの画面に一つの画像(単票)ではなく、まるでExcelを単純にAccessにしたようなものであること。 (2)絶対表示というか、画像の場所がC:\云々と固定されておりDBを動かすと場所指定を見直すことになりかねないこと。 とりあえず、詳細を記しておこう。 Picというフォルダーに001.jpgから005.jpgまで画像がある。 Accessのフォームで="D:\MS Office練習\Access\09VBA VBE\Pic\" & [画像]と指定しているので拡張子はJPGでなくてもBMPでもよい。プロパティシートのコントロールシートで="D:\MS Office練習\Access\09VBA VBE\Pic\" & [画像]と指定している。テーブルとフォームを指定するが、テーブルはID 商品名(無意味) 画像(001.jpgなどとなっている つまり拡張子まで含めた指定である)の3つのフィールドであるが画像そのものの本体があるわけではない。IDはオートナンバー、商品名と画像フィールドは短いテキストであるが、商品名は無意味なので適当な文字列をいれている。(入力しなくてもいい)フォームは[作成]タブの[フォーム]グループにある[その他のフォーム]から[複数のアイテム]を選択し、いわゆるAcessまかせではなくて自分でフィールドの位置などを決めることができる。F4キイを押すとプロパティを表示できるので、IDだったり、画像だったりテーブルのどの項目かを指定できる。ここでいう画像は単なる文字列にすぎないので、[デザイン]タブにある[コントロール]から[イメージ]をクリックし適当な大きさにして配置する。画像を挿入するための[図の挿入]ダイアログボックスが表示されるが、[キャンセル]をクリックしてF4キイを押してプロパティを操作する。プロパティは="D:\MS Office練習\Access\09VBA VBE\Pic\" & [画像]と絶対パスを指定することとなるが、それゆえに注釈でいう(2)となる。またこの場合の[複数のアイテム]のフォームの場合は(1)のとおり、単票フォームではなく複数フォームとなってしまう。 Urlではフィールド [画像]を表示しないようにしてるが表示したほうがよいとおもわれる。 なおサンプルで試した場合は2GB以上の画像をためすことはできなかったが、jpg画像を大きくしたりして、画像の収まっているフォルダーは1.45MBだがAccessは464KBであった。 単票形式までは何とか作成できた。上記の ”フォームは[作成]タブの[フォーム]グループにある[その他のフォーム]から[複数のアイテム]を選択し” というところを[作成]タブの[フォームウイザード]にして項目(IDなど)を選んだ後に次へで単票形式をえらべば改ページできるものとなる。あとは表示でデザインビューにしてフォームデザインで画像を選びプロパティーシートでコントロールソースに="D:\MS Office練習\Access\09VBA VBE\Pic\" & [画像]と指定すれば よい。あとは画像の場所を絶対表示でなく相対表示にできれば当初の目的を果たせることになる。 できうれば昔VBAに凝っていたころのAdult2003.mdbのようなものができればいいのだが。 若干画像を小さくした。 さらには相対パスのAccessにおける解決策をみつけたのでここに結論と若干の説明をしておこう。 絶対パス ="D:\MS Office練習\Access\09VBA VBE\Pic\" & [画像] 相対パス =[CurrentProject].[Path] & "\Pic\" & [画像] つまり[CurrentProject].[Path] がAccessの相対パスであるということ。これをプロパティシートの画像イメージのコントロールシートに記述すればよいということ。私の場合はDエリアにMS Office練習\Accessというフォルダを作成し、さらに09VBA VBEというフォルダーに今回のAccess DB(accdb)を格納している。そこにPicというフォルダーを作り、そこに001.jpgから005.jpgのサンプル画像を格納しているわけである。相対パスであればCエリア直下でもどこでも可能となるわけである。なお、 [画像] & ".jpg"としておけばフィールド [画像] には拡張子を省略しておくこともできる。 今回は一切、VBAなどは使用せずAccessの一般操作で可能であった。 VBA使用せずだったのでD:\MS Office練習\Access\09VBA VBEからD:\MS Office練習\Access\09VBA VBE\No-VBというフォルダーすなわちNo-VBというフォルダー追加というひとひねりしたところ、Database1.accdbとDatabase2.accdbの2つはアドレス指定が絶対パスゆえ指定しなおさないと画像表示ができなくなったが、相対パスであるDatabase3.accdbはそのまま使えた。 g) 現在考えているのは、既存の映画2023.accdbを上記のような画像を外出しして、ほかにも経験上いくつかの改善点を 施そうとおもっている。(映画2024.accdb) 改善点は 1) 製作国を5くらいに増加させようと思う。(大概は1か国であるが、007などは米英2ヵ国である。4ヵ国などもありそうである。製作国5は4か国でも足りない場合に「ほかの国もあり」などと表示させるか。またフォームが大きくなりすぎるわけだが、例えばイギリスなど4文字ではなく英など1文字で表示で文字数節約するか。してみるとルクセンブルグなどが最大文字数かな。) 2)視聴方法も略語でよかろう。A(Amazon) U(Unext) N(Netによる視聴)くらいか。そのほかDisneyなどが追加されてもいわゆる英語一文字で十分な気がする。規定値を"A"としようかとおもっている。 3)また視聴日は書式で日付(S)を選んでおいたほうがよさそうである。この指定をしておかないと、画面の下の時刻・日付でとくに日付で曜日も表示できるようにするとDataBaseの視聴日の表示がおかしくなる。 4)画像は、相対パス =[CurrentProject].[Path] & "\Pic\" & [画像] 実際には、=[CurrentProject].[Path] & "\Pic\" & "映画\" & [邦題] & ".jpg" だったり =[CurrentProject].[Path] & "\Pic\" & "人名\" & [氏名] & ".jpg" であったり(映画と人名の2つのTable)するが。 5)なお、Accessでは横4,587cm 縦6,196cmの映画ポスターの画像がirFanViewでは横2.39cm 縦3.39cmと計測され、 (irFanViewでは単位をcm pixcel inchと3通りに表示できるが)282 X 400 Pixcelであると表示される。どちらかというと Accessのcm表示が実態を表していると思うが、この謎を解明したいとおもっている。 6)FormをTable存在時に作成する場合、 作成でフォームを選ぶとAccessが適当な大きさでTableの項目を並べ立てるが、横幅を調整したりするとすべての項目が同じ横幅になったりする(個別の横幅に調整する方法もあるのだろうけど)。 むしろ、面倒でなければフォームデザインでまっさらな画面にTableの項目を移していったほうが良い気がする、 その場合のフォームデザインのコントロールソースにTableの項目が表示されるので、なにを指定するかを選択すればよい。フォームのレコードソースではない。https://tasukete-access.com/2021/08/12/accessintro_form_disign/ 昔のVBAに凝っていたころのAdult2003.mdb(画像は実はBMP)
| |