Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Access 2010)
OLE型のファイル(拡張子.docx .xlsx)のローカルへの保存
投稿日時: 21/02/05 10:56:59
投稿者: yanchi51

ACCESS VBAの勉強で、SELECT文でOLE型のファイル(拡張子.docx .xlsx)を読み込んで保存しようとしています。
.docxは処理を行ったところ、「ファイル『temp.docx』は内容に問題があるため、開けませんでした。」というメッセージが出ますが、「開いて修復」すれば元のファイルと同じに見えたので
SELECT文で項目だして、書き出すまである程度できているように感じます。
ところが、.xlsxは修復しても開くことすらできませんでした。
これらはどこがおかしいのでしょうか、ご意見をいただけたら幸いです。
 
参考にしたサイト
https://www.moug.net/tech/acvba/0080032.html
画像を読み込む(GetChunkメソッド)
 
.docx作業時ソース一部抜粋
 
'OLE型用変数
Dim bytFile() As Byte
Dim nFileNo As Integer
Dim nSize As Long
Dim olename As String
 
Set DB = CurrentDb
    '項目「OLE型データテスト」抽出のSELECT文の実行
Set rs = DB.OpenRecordset(sqlText)
 
nSize = rs.Fields("OLE型データテスト").FieldSize
bytFile() = rs.Fields("OLE型データテスト").GetChunk(0, nSize)
 
nFileNo = FreeFile
'Excel時はC:\Users\testuser\Documents\test.xlsxとした。
Open "C:\Users\testuser\Documents\test.docx" For Binary As #nFileNo
 
Put #nFileNo, , bytImage()
Close #nFileNo
 

回答
投稿日時: 21/02/05 16:57:33
投稿者: Suzu

そのOLEオブジェクト型のフィールドのデータはどのようにテーブルに保存しましたか?
手動で入れれいませんか?
 
AppendChunk にて 保存されたファイルデータを GetChunk にて ファイルを取り出す分には
 
問題ないはずです。
 
手動の場合、ヘッダーが入るので、、
そのまま GetChunk にてうまくいくとは限りません。

投稿日時: 21/02/05 17:22:20
投稿者: yanchi51

Suzu様
早速ご回答いただきありがとうございます。
おっしゃる通り手で保存いたしました。
疑問が解消でき非常に助かりました。
 
もしよろしければ以下についてご意見いただけないでしょうか。
 
学習の過程で「添付型ファイル」項目の同様の処理を行い、それが問題なく終わってから他に変わった(一般的でない)データ型の処理はないだろうかと調べたところ、「OLE型のファイル」というものがあったので
試してみたのですが、現在は「OLE型のファイル」ではなく「添付型ファイル」での処理が推奨されているという記載を見かけました。現在は「OLE型のファイル」というのはあまり使わない項目なのでしょうか
 
 

回答
投稿日時: 21/02/08 14:00:09
投稿者: Suzu

引用:
おっしゃる通り手で保存いたしました。
疑問が解消でき非常に助かりました。

 
解消できたとの事で何よりです。
 
 
引用:
学習の過程で「添付型ファイル」項目の同様の処理を行い、それが問題なく終わってから他に変わった(一般的でない)データ型の処理はないだろうかと調べたところ、「OLE型のファイル」というものがあったので
試してみたのですが、現在は「OLE型のファイル」ではなく「添付型ファイル」での処理が推奨されているという記載を見かけました。現在は「OLE型のファイル」というのはあまり使わない項目なのでしょうか

 
ソースが判らないので何とも言えませんが
 
 
メリット・デメリットとしては
 
OLEオブジェクト型
・フォームやレポート上で、その内容を直接表示する事が可能
・1ファイルのみ
・ファイル容量が大きくなりがち(ビットマップファイルとして保存)
 
添付ファイル型
・フォームやレポート上で、ファイル内容は表示できない → 別途開く必要がある
・複数ファイルの保存が可能
・OLEファイル型に比べ 容量は小さくて済む
・accdb から追加された仕様である
 
が挙げられると思います。
上記を鑑み、使い分ける事になるかと思います。
 
 
当方には、Access上で、ファイルを保存する仕様の物を触らないので
それぞれの、VBAの挙動については判りかねます。
 
(ファイル容量 が 2GB の制限があるので、添付ファイルAccessデータベースに保存すると
  すぐに、その制限に掛かる可能性が高くなるので、
  ファイルを扱いたい場合には、そのファイルへのフルパスを保存するに留めます)

投稿日時: 21/02/09 19:46:49
投稿者: yanchi51

Suzu様
再びご丁寧にありがとうございました。
私の周りのものに聞いても、同じようにパスを格納する使い方が多いようでした。非常に勉強になりました。ありがとうございました。