- 締切済み
Accessが画像データでパンク
画像データを取り込むとあっという間に 1Gを越えてしまいパンク。 なんとかならないもんでしょうか? 怪しげな対策ソフトがあるようですが・・・
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- ARC
- ベストアンサー率46% (643/1383)
>LAN上のほかのPCからでもうまく動作しますか? 一応LAN対応です。 っと思ったら、ちょっとLANではエラーが出てしまいますね。こりゃ。(やっぱ、短時間でコーディングしたものをすぐにリリースすると、ダメですね。) Form_Currentを以下のようにすると、多分LAN対応です。(といっても、これも時間かけてテストしていないんで…) Private Sub Form_Current() On Error Resume Next Me.画像.Picture = GetDir(CurrentDB.Name) _ & Me![イメージファイル名] If Err > 0 Then Me.画像.Picture = "" Err.Clear End If End Sub ちなみに、↑の方式は、MDBファイルが置かれているフォルダからの相対パスで指定する方式です。 ファイル名を絶対パスで指定する場合は On Error Resume Next Me.画像.Picture = Me![イメージファイル名] If Err > 0 Then '以下同じ ってな感じで書いてやります。
- katuya
- ベストアンサー率33% (38/115)
今まで回答された方のやり方でないと根本的な解決にはなりませんが、ひとつだけ・・・・ ACCESSはデータの編集を重ねるとファイルサイズが肥大化していきます。 その無駄な領域を最適化すればかなり小さくなります。 メニュー⇒ツール⇒データベースユーティリティ⇒最適化 もう対策済みでしたでしょうか? 実際の画像ファイルが1GB近ければどうしようもありませんが。
- ARC
- ベストアンサー率46% (643/1383)
えっと、他の皆さんがおっしゃるように、実際のところは画像ファイルをデータベースの外に置いたほうが使いやすそうですね。 商品ID 商品名 イメージファイル名 1 あんぱん Image\AN-Pan.jpg 2 ジャムぱん Image\Jam-Pan.jpg 3 クリームぱん Image\CreamPan.jpg 上のようなテーブルを作って フォームにイメージコントロール[画像]を配置してやり、下記のようなコードを書けば、うまく作動するはずです。(実際の画像はImageフォルダに置いておく) ちなみに、この方法は帳票フォームでは不具合をきたすので(連帳レポートはOK)、連帳フォームを使う際には、別途 [サムネイル]フィールド(OLE型)を付加してやったほうが良いかもしれません。 サムネイル(縮小画像)のサイズを1枚10KB以下程度に抑えれば、実用上は問題無いのではないかと思います。 Private Sub Form_Current() On Error Resume Next ChDir GetDir(CurrentDb.Name) Me.画像.Picture = Me![イメージファイル名] If Err > 0 Then Me.画像.Picture = "" Err.Clear End If End Sub Private Function GetDir(PathName As String) As String Dim i As Long Dim C As String * 1 For i = Len(PathName) To 1 Step -1 C = Mid(PathName, i, 1) If C = "\" Or C = ":" Then GetDir = Left$(PathName$, i) Exit For End If Next i End Function PS. が~ん!! 行頭の半角スペースは強制削除されるのね(T^T) 何とかしてよ~>OKWeb
- shigatsu
- ベストアンサー率26% (511/1924)
私も、DB内にはポインタとしてファイル名のみを保存し、 実際の画像データはデータフォルダを決めて、そこに保存しておく ほうが良いでしょうね。 ただでさえいじればいじるほどデータが肥大するアクセスですから 保管するデータは少ないほうが良いでしょうね。
- Tetsuro_M
- ベストアンサー率19% (4/21)
確かにアクセスのテーブルに直接画像データを保存するとmdbファイルは非常に大きくなりますよね。 例えば商品マスタにその画像を取り込みそれを表示参照したい等の処理ならば、テーブルには画像データの名前を登録しておいて、フォームにその商品レコードを呼び出した時、その名前から画像を読み込み、フォームに貼り付ける方法をとれば、mdbファイルは大きくなりませんし、ファイルの管理もらくですよ。
- ARC
- ベストアンサー率46% (643/1383)
Access2000だと、2GBまで耐えられるので、そっちに移行してみるとか…。 ちなみに、SQLサーバも最大2GBです。 あるいは、この制限は「データベース1つにつき」の値ですので、複数のDBを作成して、本体のMDBにリンクテーブルで取り込んでしまうとか…。 例えば"画像1.MDB","画像2.MDB"という名前にしておき、これらには画像のみを格納する。 別途、画像.MDBを作成し、これには、画像ファイルのインデックス(含MDB名称)を格納しておき、必要に応じて各MDBからデータを取り出す、ってな感じの仕様にすればいいと思います。
補足
フォーム及びレポート上で、ほぼ毎日画像を出力・追加しています。 申し訳ありませんがもう少し具体的な回答をいただけますでしょうか。 会社の業務をAccessで構築/運用/開発しております。なにせ一人で初期バージョンから仕事の合間に改良を重ねてきたのですが・・・ここにきて「画像問題」の壁にぶち当たりました。なお現在は97を使用しております。
補足
古い話になって申し訳ありません。今一度よろしいでしょうか? LAN上のほかのPCからでもうまく動作しますか? よろしくお願いします。