• 締切
  • 困ってます

ACCESSのフィールドサイズについて

  • 質問No.2201668
  • 閲覧数377
  • ありがとう数3
  • 回答数3

お礼率 75% (9/12)

ACCESSのフィールドにOLEオブジェクト形式で写真データを格納しているのですが、この写真のサイズ(KB)を取得できるのでしょうか?

回答 (全3件)

  • 回答No.3
環境の違いか私が間違えてるだけなのか分かりませんが
O_cyanさんの記載方法ではACCESSマクロでファイルサイズが
取得出来なかったので訂正させて頂きます。

Dim Fso As New FileSystemObject
Dim MyFile As File
Dim MySize As Long 'ファイルサイズがバイト単位で返るのでIntegerでなくてLongに。

Set MyFile = Fso.GetFile(ファイルのフルパス)
MySize = MyFile.Size 'ファイルサイズがバイト単位で返ります
Set Fso = Nothing '注*1

注1:Set Fso = Nothing が無くても
コード終了時に自動的にNothingされるが
私は念の為に付けるようにしています。

尚、FileSystemObjectを使用する場合はマクロの参照設定で
Microsoft Scripting Runtimeにチェックを入れて下さい。

他にFileLen関数を使用しても可能かと
Dim MySize As Long

MySize = FileLen("C:\My Documents\db1.mdb") 'ファイルサイズがバイト単位で返ります

また、APIのGetFileSize等でもファイルサイズを取得出来ますが
FileSystemObjectやFileLen関数の方がコードが短く簡単です。
お礼コメント
kurimame

お礼率 75% (9/12)

ありがというございます。
参考になりました。
投稿日時:2006/06/09 21:02
  • 回答No.2

ベストアンサー率 59% (745/1260)

>OLEオブジェクト形式で写真データを格納しているのですがこの写真のサイズ(KB)を取得できるのでしょうか
OLEオブジェクトではその写真のバイナリデータを格納しているのでその中からでは出来ません。
VBで通常はFileSystemObject等を使って写真のファイルサイズなどを取得します。
Dim Fso As New FileSystemObject
Dim MyFile As File
Dim MySize As integer
MyFile = Fso.GetFile("写真のフルパスとファイ名.拡張子")
MySize = FsoFile.Size
こんな感じで取得するようになります。
お礼コメント
kurimame

お礼率 75% (9/12)

ありがというございます。
参考になりました。
投稿日時:2006/06/09 21:02
  • 回答No.1
できないと思いますが、この点に自信はありません(^^;
で、代案として

1.格納時に元データのサイズを取得し記録しておく
2.OLEオブジェクト形式をやめ元データを特定のフォルダに格納すると共に、そのファイルパスをデータベースで管理する

特に、2.の方法がお勧めです。現在約8千枚(将来は数万枚)の画像を管理していますがOLEオブジェクト形式は何かと不便です。たとえばファイルパス方式ならば、1ドライブに格納しきれない大量のデータを複数ドライブに分散できるなど。またレタッチ時にオリジナルデータを残す操作なども簡単にできます。
お礼コメント
kurimame

お礼率 75% (9/12)

ありがとうございます。
参考になりました。
投稿日時:2006/06/09 21:01
関連するQ&A

ピックアップ

ページ先頭へ