- 締切済み
ACCESSのフィールドサイズについて
ACCESSのフィールドにOLEオブジェクト形式で写真データを格納しているのですが、この写真のサイズ(KB)を取得できるのでしょうか?
- みんなの回答 (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関数の方がコードが短く簡単です。
- O_cyan
- ベストアンサー率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 こんな感じで取得するようになります。
お礼
ありがというございます。 参考になりました。
できないと思いますが、この点に自信はありません(^^; で、代案として 1.格納時に元データのサイズを取得し記録しておく 2.OLEオブジェクト形式をやめ元データを特定のフォルダに格納すると共に、そのファイルパスをデータベースで管理する 特に、2.の方法がお勧めです。現在約8千枚(将来は数万枚)の画像を管理していますがOLEオブジェクト形式は何かと不便です。たとえばファイルパス方式ならば、1ドライブに格納しきれない大量のデータを複数ドライブに分散できるなど。またレタッチ時にオリジナルデータを残す操作なども簡単にできます。
お礼
ありがとうございます。 参考になりました。
お礼
ありがというございます。 参考になりました。