我需要從舊數據庫MS SQL 6.5進行數據轉換,現在我有店面形象問題裏面MS SQL 6.5,該圖像存儲都OLE數據意味着老應用程序接口這個MS SQL 6.5實際上將圖像存儲爲圖像類型中的ole。當我SELECTBLOB成團塊在PowerBuilder我需要此團塊送入ole_1.objectdata,然後轉換此ole_1.objectdata成所需的長度,以便被輸出到磁盤上的位圖文件,我已提取的這個翻譯代碼從專家 - 在「將Blob打印到bmp/jpg」(由Buasuwan發佈,但無法設法獲取該dll,因爲該帖子是舊帖子)交換。它做工精細我的BLOB的60%轉換爲位圖,而有關文件大小的剩餘產空視圖,就不能認爲它只是。這裏是代碼,我希望一些大師有可以幫助我與OLE轉換成位圖轉換爲位圖的問題在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和OLEStore的一點是來自Sybase文檔。其餘的是直接檢查複合文件,找出它們的結構,然後根據需要解析它們。 –