質問: ACCESS で通販用の商品管理をしております。 現在は商品テーブルには商品名やサイズ等、テキストベースの情報しか持っておりません。 今回画像(jpg等)もデータとして持たせようと考えております。 画像の保存方法は、ACCESSのファイルと同じディレクトリにフォルダ「ItemImg」を作りその中に各商品ごとに、フォルダ名「商品ID(0001など)」を作って画像を保存する予定です。 現在は、商品テーブルにフィールド「画像パス」を作り、画像までのフルパスを保存し、フォーム上にはイメージコントロールを配置し、コントロールソースに「画像パス」を指定し表示まではできております。 商品画像は主に、問屋のWEBサイトの画像を使用するため、問屋WEBサイトから画像を右クリックで商品個別のフォルダに保存し、エクスプローラのプロパティーから画像のフルパスを確認、コピーしてデータに登録してようやくフォームに表示という結構めんどくさい状況になっております。 そこでACCESS VBAで下記の処理を実現するためのアドバイスがいただければと思います。 1: WEB上の画像をACCESS フォームにドラッグアンドドロップ(画像をデスクトップにドラッグしてコピーできる画像に限られるのかな?) 2:ドラッグアンドドロップされた画像を指定のフォルダにダウンロード(パスではなくて画像ファイルのコピー) 商品フォームでは新規商品(新規レコード)がつくられると、ACCESSファイルと同じディレクトリに ItemImg>0001(商品ID)のように自動でフォルダが作られるVBAを作成ずみ。 3:商品ID名のついた各フォルダにダウンロード保存した画像ファイルのフルパスを取得して商品テーブルの画像パスに入力 4:フォーム上のイメージコントロールで画像ファイルのフルパスをもとに表示 上記ような流れで実現できないかな?と考えているのですが、特に「1:、2:」のステップがどうやったら可能なのか見当が付きません。 ネット上でACCESS 画像ドラッグアンドドロップなどで検索して、すでにローカル上にある画像ファイルをプログレスバーコントロールにドラッグしてデータに登録などの記事は見つかったのですが、検索の方法が悪いのか、今回やりたい処理に関係する記事が見つけることができませんでした。 どのようなプロセスで実現可能かアドバイスや、関連記事があれば教えていただければと思います。
回答: 自分がやるとしたら、ですが 1. Web上の画像を指定のフォルダ(商品ID)にダウンロード 2. フォーム表示時に商品IDから画像ファイルのパスを作成しイメージコントロールにセット でどうかな?と思いますが・・・ この方法だと質問者さんの要望にあるフォームにドラッグアンドドロップという方法ではありませんし DBに画像パスが残らないのと、ダウンロード時の操作ミスに関しての不安がありますので ちょっと乱暴ですかね? ### 追記 不親切のような気がしたので実験がてら調べてみましたが、質問者さんが検索で見つけられた > > ローカル上にある画像ファイルをプログレスバーコントロールにドラッグしてデータに登録などの記事 > > > にあるような方法でフォームを作成し(ProgressBar_OLEDragDropにData.Filesでパスを取得) そのフォームを使用して、ローカルにあるファイルではなくブラウザから直接ドラッグアンドドロップすると、 ブラウザキャッシュの画像のパスが取れました。 そのままブラウザキャッシュにある画像のパスから目的の(商品IDの)フォルダへファイルコピーし (FileCopy source, target を使用)、画像フォルダのパスはコピー先なのでそのままDBに登録できます。 ただ、実験的にやってみただけなので、例えばブラウザキャッシュにあるファイルの形式がビットマップになっちゃっていたり、 そもそもブラウザによってキャッシュがちゃんと保存されるのかとか、 いろいろクリアしなければならない問題はあると思いますが、いかがでしょうか。