古いdb ms sql 6.5からデータ変換を実行する必要があります。これはms sql 6.5内のイメージストアに問題があります。このイメージは古いデータを意味します。このmsql 6.5インターフェイスのアプリケーションでは、画像タイプにoleとしてイメージを格納します。私はselectbulobをpowerbuilderのblobに入れると、このブロブをole_1.objectdataに送り、次にこのole_1.objectdataをディスク上のビットマップファイルに出力するために必要な長さに変換する必要があります。この変換コードはexpert- 「Blobをbmp/jpgに印刷する」で交換されました(しかしBuasuwanによって投稿されましたが、ポストが古い投稿であるためdllを取得できません)。私のBLOBの60%がビットマップに変換されていますが、残りの部分は関連するファイルサイズの空のビューを生成し、それを見ることはできません。コードは、ビットマップへのOLEの翻訳を助けることができます。OLE BLOBからPowerBuilderのビットマップへの変換
Blob lb_image
SelectBLOB picture_image into :lb_image
from individual
where individual_object_id='200506061121430020'
using SQLCA;
if SQLCA.sqlcode<>0 then
messagebox("cannot connect","cannot connect")
end if
if(len(lb_image)>0) then
ole_1.objectdata=lb_image
gf_convertbmp(ole_1.objectdata,ls_path)
end if
私gf_convertbmp
long ll_index, ll_len, ll_length
integer li_FileNum
// Find Keyword 'BM' for starting Bitmap File
ll_len = Len(lb_ole_data)
ll_index = 1
blob lb_bm
lb_bm = blob('BM')
do while ll_index <= ll_len
if BlobMid(lb_ole_data, ll_index, 2) = lb_bm then
exit
end if
ll_index++;
loop
// Find Length of Image
ll_length = long(asc(char(BlobMid(lb_ole_data, ll_index - 4, 1)))) + &
long(asc(char(BlobMid(lb_ole_data, ll_index - 3, 1)))) * 256 + &
long(asc(char(BlobMid(lb_ole_data, ll_index - 2, 1)))) * 65536
// Save Bitmap to File
li_FileNum = FileOpen(filename, StreamMode!, Write!, LockWrite!, Replace!)
// Write Bitmap Data
do while ll_length > 0
if ll_length > 32000 then
FileWrite(li_FileNum, BlobMid(lb_ole_data, ll_index, 32000))
else
FileWrite(li_FileNum, BlobMid(lb_ole_data, ll_index, ll_length))
exit
end if
ll_index += 32000
ll_length -= 32000
loop
FileClose(li_FileNum)
素晴らしいです!これらの詳細はどこで手に入れますか?あなたはどのようにこれに関する文書をたどったのですか? :) – somnath
OLEStreamsとOLEStoresの一般的な使い方は、Sybaseのドキュメントにあります。残りの部分は複合ファイルを直接調べ、構造を把握してから解析する必要がありました。 –