最速怪談選手権

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

A 回答 (3件)

できないと思いますが、この点に自信はありません(^^;


で、代案として

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

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

ありがとうございます。
参考になりました。

お礼日時:2006/06/09 21:01

環境の違いか私が間違えてるだけなのか分かりませんが


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関数の方がコードが短く簡単です。
    • good
    • 0
この回答へのお礼

ありがというございます。
参考になりました。

お礼日時:2006/06/09 21:02

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


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

ありがというございます。
参考になりました。

お礼日時:2006/06/09 21:02

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