dポイントプレゼントキャンペーン実施中!

OS: XP
Access Version: 2003

アクセスを使って、商品管理に画像を取り入れようと思い苦戦しています。

(1)商品データのフィールドにOLEを設定しました。
(2)BMPの24ビット保存画像でないと上手に表示されないことが分かりました。

さて、ここから質問なのですが、
◆ネット上から画像をWIN-SHOTというソフトで取り出し、
 bmpで保存をしても、その画像を挿入するとそのフィールドのデータとして
 「パッケージ」と表示されて上手に表示できません。

◆一度保存した画像を、再度ペイントで呼び出し、「名前をつけて保存」で
 同じタイトルで上書きをした画像は、「ビットマップファイル」と表示され、
 フォームでもちゃんと表示されます。

◆しかしながら、一度ちゃんと表示されても、しばらくして再度読み込みなおすと
 「パッケージ」になってしまい、表示されません。


マイクロソフトのサイトで、パッケージの場合の対処方法として、
BMPファイルにする・・・とかかれています。

まったく手を加えていない同じBMPファイルでも、
パッケージになって表示されないときと、ビットマップになって
表示される場合があるのはなぜでしょうか。
※一度パッケージと表示された画像はその後はずっとパッケージです。

また、画像1、画像2をまったく同じ手順で保存しても、
画像1は表示(ビットマップ)され、画像2は表示されない(パッケージ)ということもあります。

データとして管理するだけであれば、パッケージでも
クリックで開くので問題ありませんが、表示させたいと思っています。

どなたか、解決策をご存知の方、または違う方法でも上手に表示
する方法をご存知の方がいらっしゃいましたら、
是非教えてください。

よろしくお願いします。

A 回答 (3件)

> とりあえずは画像をjpgで保存し、


> パッケージの状態ではありますが、PC上ではクリックすれば
> 開きますので、それで管理していこうと思います。
これだとOLEを使用して、Access上に保管するってことでしょうね^^;
で、なぜパッケージになるの?となると・・・
以下の手順で、出来るかどうか確認してください
(Microsoft Photo Editorが入ってる前提で書いてあります)
1.OLEフィールドを逆クリックで、「オブジェクトの挿入」
2.「新規作成」で、「Microsoft Photo Editor」を選択
(ここで、表示されるプログラムの一覧が基本的にOLEに対応してあるものですが、DDEだけで表示部のOLEが使用できないものもあるみたいです)
3.「Microsoft Photo Editor」が起動して「作成済みのイメージを開く」で、ファイルを開いてください
4.「ファイル」-「終了して戻る~」で戻ってみてください
で、以上で内容が表示されれば・・・ラッキーってことで^^;

実際、PCによってWindowsのOLE設定が違うので「オブジェクトの挿入」後、「ファイルから~」で、オブジェクトの内容を表示するPCもありますが・・・残念ながら、どこでそれを設定しているOLEがあるのか私には、よく判りません^^;

>> ・Imageオブジェクトを使用して、その度にディスク上のファイルから呼び出す
> これは、私が今回やっているjpg保存で、パッケージでっていうことと
> 同じという解釈でよろしいですか?
>> ・LoadPicture関数を使用して、その度にディスク上のファイルから呼び出す

で、これらの話はOLEフィールドを使用せず、ファイルの保管位置、ファイル名等をテキスト型で保管し、フォームのイベントで、ファイル名等からイメージファイルを呼び出すという事で、アクセス上にファイル自体は保管しません
OLEの場合、ディスク上のイメージファイルを変更しても、基本的に更新されません
あくまでも、ディスク上のイメージファイルと、Access上のイメージデータは別物になります

OLEは、いろいろ改善はされてあるみたいなのですが・・・まだよく理解できないバグが潜在し、編集し表示部のデータは更新したが、編集用に保管してある元のデータは更新されてなかった、いきなりデータが破損して、表示も編集も出来なくなったなど、理解できない挙動を示すことがあるので、私自身は、極力避ける傾向にあります^^;

パッケージとして表示されているのであれば、表示部はPCのアイコンデータをメタファイル化して、保存してあるはずだったと思います^^;
    • good
    • 0
この回答へのお礼

おーーーーーーーーー!

おーーーーーーーーーーーーーーー!!!!

ありがとうございます!!!
できましたー
Microsoft Photo Editorで、画像を呼び出し、
ちゃんと表示されました!!!

重ね重ね、ありがとうございます。

ついでの質問というわけではないのですが、参考までに
教えていただければと思います。

このMicrosoft Photo Editorで呼び出して、
「終了して戻る」を選んだ場合、そのままMicrosoft Photo Editorは
閉じて、アクセス画面に戻りますよね。

これは、あくまでも表面上だけで表示されているのでしょうか?
(例えば、ワードに画像を挿入しただけの場合、
 元の保管してある画像を削除しても問題ありませんし、
 ネット上からコピーしてもってきた画像も、
 とくに保存することなく、ワード上で表示されますよね?)

またはパワーポイントのように、プログラムの中に自動的に
保管される場所があって、保管されているのでしょうか?

実際、Microsoft Photo Editorで呼び出した際の画像と
リンクしていないことは、確認しました。

本当にありがとうございました^^

お礼日時:2007/02/28 13:49

> これは、あくまでも表面上だけで表示されているのでしょうか?


> (例えば、ワードに画像を挿入しただけの場合、
>  元の保管してある画像を削除しても問題ありませんし、
>  ネット上からコピーしてもってきた画像も、
> とくに保存することなく、ワード上で表示されますよね?)
> またはパワーポイントのように、プログラムの中に自動的に
> 保管される場所があって、保管されているのでしょうか?

OLEには、ファイルとデータをリンクさせる機能もあったりしますが、
その機能を使ってない場合、
「ワードに画像を挿入した~」
と同じ事が起こります
「またパワーポイントのように~」
と言うのも、おそらくOLEを使っているのであれば、パワーポイントのファイルの中に画像を保管してあり、別途の画像ファイルを消しても問題ありません
AccessのOLEフィールドは、リンク機能を使用しない場合、ワードの様にと同じ状態で保管されてます
OLEのデータとファイルをリンクさせる機能を使って、データを少なく出来るのかな?って言うのもバイナリのデータを使って調べてみた事はあるのですが、リンクしてる先のデータが増えてるだけで、リンク先が見つからない場合、保持していたデータを使ってるようです

Officeで、画像(BMP、JPG、GIF等)、グラフ、数式、ワードアート等、すべてOLEを使用してます
(Excel、Word自体もOLEとして貼り付けることが可能です
ExcelにExcelのOLEを貼り付ける場合、芸が必要な気がしましたが^^;)
OLEはAccessだけ特別と言う話ではなく、Excel、Word、PowerPoint等も同じOLEを使用し、OLE自体はOfficeのために導入されているシステムではなくWindows自体のシステムになっています
    • good
    • 0
この回答へのお礼

本当にありがとうございました。

いろいろと勉強になりました。
Dxakさんのお陰で、仕事になりましたー
本当は多々お礼をしたい気持ちでいっぱいいっぱいですが、
ここでは何もできず、ポイントだけで残念です。
気持ちだけは、何千ポイントも送りたい気持ちですので~

またないているところを見かけたら、よろしくお願いします。
本当にありがとうございました。

お礼日時:2007/02/28 16:13

使ってるOLEフィールドの挙動は、WindowsのOLEにに依存してます


要するに、PCの環境が一緒じゃなければ、確認のしようが無いんです^^;

で、解答が付かないものと思います

まずは、OLEの説明を書いてみます
(独自解釈なので、合ってるとは言い難い部分がありますが><
 OLEの中のバイナリデータをファイルに書き出して調べた結果で
 解釈してたりします)

OLEとは、
・メタデータ(表示用ビットマップ)
・DDE用データ(編集時のデータ)
・操作用アプリケーションデータ
の3つから大体構成され保存されてます
OLEはマイクロソフトが提唱していた?アプリケーション間のデータ交換方式のDDEの拡張で、OLEが使えるアプリケーションも限られてきます

で、ここで、振り返ってみると「メタデータ」「DDE用データ」と同じようなものを2重に保管しますので、大体記憶している量が2倍近くにファイルが大きくなります^^;

Accessで画像管理する、お勧めとしては
・Imageオブジェクトを使用して、その度にディスク上のファイルから呼び出す
・LoadPicture関数を使用して、その度にディスク上のファイルから呼び出す
のどちらかがお勧めです
(ファイルサイズの関係上の話ね^^;、後VBAがある程度理解できないと・・・作れない問題も><)
で、問題としては、データベースとイメージ画像が別のファイルになるので、すべて移動させなければならないと言うのが一番の問題で・・・、ファイルサイズが大きくなっても良いよ~^^って場合は、OLEを使いますが・・・当初の話にあったように、PCによって違うので、こっちのPCでは表示されるのに、こっちのPCでは出ないとか、Accessと違うところで悩まなくてはなりません^^;
    • good
    • 0
この回答へのお礼

いつもありがとうございます。

昨日、アドバイスを頂きながら検討しまして、
とりあえずは画像をjpgで保存し、
パッケージの状態ではありますが、PC上ではクリックすれば
開きますので、それで管理していこうと思います。

上司が、画像の表示を希望していたのですが、
確かにBMPでは容量が大きすぎますしね。

>・Imageオブジェクトを使用して、その度にディスク上のファイルから呼び出す

これは、私が今回やっているjpg保存で、パッケージでっていうことと
同じという解釈でよろしいですか?


>・LoadPicture関数を使用して、その度にディスク上のファイルから呼び出す

すみません・・・
まだアクセスは関数までたどり着いておりません・・・

また何か躓いたとき、お世話になるかと思いますが、
よろしくお願いします。

本当にありがとうございました。

お礼日時:2007/02/28 10:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!