2010-05-20 78 views
3

我有一個C++應用程序需要支持二進制數據庫內容(圖像等)。當使用MS Access或MS SQL Server時,這些數據被包裝在一個OLE對象中。我如何去掉這個OLE頭信息?請注意,我不能只查找特定標籤的開頭,因爲內容可以是png,jpg和其他格式的整個堆。我應該使用類似COleDataObject的東西嗎?剝離OLE頭信息(MS Access/SQL Server)

+0

不要使用OLE字段,只需使用常規的BLOB。 – 2010-05-20 23:36:44

回答

2

使用MS Access 2007年(我需要測試其他MS數據庫)的格式似乎是:

84 bytes 
file name + \0 
full path + \0 
5 bytes + [2] bytes (the third byte of those five bytes) 
temp path + \0 
4 bytes 
actual data (if not using a link to the file) 

到目前爲止,我簡單地分析和實際數據之前剝去一部分,但我仍然不知道如果沒有辦法使用像COleDataSource這樣的東西來幫助更強大地解析這些信息。

另請注意,此格式僅適用於通用內容(開始標記0x15 0x1c 0x32)。當使用位圖(開始標記0x15 0x1c 0x2f)時,有78個字節的固定偏移量,當使用PowerPoint(開始標記0x15 0x1c 0x34)時,固定偏移量爲95個字節。

+0

不是理想的解決方案,但我找不到更好的答案。 – 2010-05-25 13:37:01

+0

我們確定OLE包裝總是一樣嗎? – 2010-05-25 17:48:05

+0

對於MS Access 2007,我測試了很多種文件類型(gif,bmp,jpg,tiff,png,avi。mpg,swf,...)和格式'holds'。不幸的是,我不能輕鬆訪問其他MS數據庫系統,所以我還沒有能夠驗證它們。 – 2010-05-26 07:51:43

1

請參閱Stephen Lebans OleToDisk的代碼。請注意,該代碼位於VBA中。此外,我不知道這將在SQL Server中的工作。

1

我重新張貼作爲一個答案我的評論:

不要使用OLE領域,只要使用正規的BLOB。

+0

我會,如果我可以:-) 不幸的是,我不能控制這部分問題(其他人/軟件寫入數據庫,我只需要閱讀它)。 – 2010-05-24 16:40:45