人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【SQLServer7.0】【BASP21】
BASP21を利用して、
buf = Request.BinaryRead(Request.TotalBytes)
rsMail.Fields("lbData") = BASP.FormBinary(buf,"upload")
という形でSQLServer7.0のImage型のフィールドに格納したバイナリがあります。

これをコマンドラインで
BCP "SELECT lbData FROM テーブル名 WHERE … " " queryout " C:\test\ファイル名 -T -f "c:\test\FILE.FMT"
という形でファイルに書き出しました。

すると、PDFやZIP、LZHなどは正しく再生されるのですが、
画像ファイルは「ファイルが破損しているか、大きすぎる可能性があります」となり、
Office文書は文字化けしていて、正しく再生されません。
(ただし、docxファイルは「開いて修復」の機能により正常化)

ちなみに、ASPで
lbData = rs("lbData")
Response.ContentType = "Application/Octet-Stream; name="ファイル名"
Response.AddHeader "Content-Disposition","attachment; filename="ファイル名"
Response.BinaryWrite(lbData)
として開くと、正しく再生できます。

何とかBCPユーティリティーのように
コマンドラインでバイナリからファイルを再生したいと思っています。
上記現象につき、何か思い当たる点はありませんでしょうか。
よろしくお願いいたします。

●質問者: j1987
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:application ASP bcp docx FIELDS
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● ererdfv
●0ポイント

調査中です

http://q.hatena.ne.jp

◎質問者からの返答

他の質問でも同様のことをしているようですね。


2 ● cx20
●100ポイント ベストアンサー

フォーマットファイル(FILE.FMT)での image 型の指定方法ですが、レコード毎にファイルサイズを指定する必要があるようです。


試しに、以下のコマンドにて1件目のデータ(ファイル)のサイズを確認してみてください。

SELECT TOP 1 DATALENGTH(lbData) FROM テーブル名

もし、1件目のサイズが 10,000 バイトだった場合、フォーマットファイルに

7.0 
1 
1 SQLIMAGE 0 10000 "" 1 lbData ""

と、記述して、以下の bcp コマンドを実行してみてください。

BCP "SELECT TOP1 lbData FROM テーブル名" queryout C:\test\ファイル名 -T -f "c:\test\FILE.FMT"

10,000 バイトのファイルが出来上がると思います。


以下に複数レコードの対応例が記載されていますので参考にしてみてください。

(SQL Server 2000 の例になっていますので SQL Server 7.0 の場合は「8.0」の箇所を「7.0」に変更してください。)

■ [SQL Server] imageデータをファイルに直接出力する。|Archive Redo Blog
http://ameblo.jp/archive-redo-blog/entry-10035872436.html
◎質問者からの返答

>cx20様

返答が遅れて申し訳ありません。

ファイルサイズの指定ですが、コメントに付したフォーマットファイルの

「5131」の部分が、DBに格納されていたファイルサイズです。

(DBにファイル名とファイルサイズがバイナリとともに格納されています)

フォーマットファイルはストアドプロシージャで動的に生成したので、

各ファイルごとにファイルサイズの部分もDBに格納されていた値に

変更されます。

もっとも、もしこれに誤りがあるとしたらお手上げですね…。

ただ、目的の行為はコメントでいただいた参照先のサンプルを

参考にして、ツールを製作することで達成できそうです。

有益な情報をどうもありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ