2010-05-24 56 views
1

我需要能夠從Access 2003和Access 2007中提取BLOB。Access 2003將BLOBs存儲爲「OLE對象」,Access 2007爲您提供了另一個選項「Attachment 」。主要區別在於可以將多個附件添加到單個行,而每個「OLE Object」數據類型只能有一個BLOB。從.Net訪問Microsoft Access 2003和2007 BLOB字段

我必須能夠在不使用互操作的情況下執行此操作,因爲我無法強制安裝Office的依賴關係。這讓我無論是DAO還是ADO。所以我編寫了代碼,使用這兩種技術將BLOB從測試數據庫中拉出來,並嵌入了不同類型的文件類型。

我遇到的問題是,它似乎訪問包裝在某些類型的元數據的嵌入式文件。最終的結果是,文件一旦被提取,就不再是相同的,並且不能由關聯的應用程序打開,因爲它的「損壞」。 Access在這個元數據中存儲了原始文件名等內容。我需要能夠從文件中去除元數據以使文件處於其原始狀態。

有沒有可以做到這一點的黑暗伏都教魔法?關於這個問題的文件很少。任何幫助,將不勝感激。

在此先感謝。

+0

當你說ADO時,你的意思是ADODB.Stream? – Fionnuala 2010-05-24 08:46:28

+0

在Jet/ACE中,BLOB和OLE字段是兩種截然不同的數據類型。前者是根據您的需要存儲任意數據的純二進制字段。另一方面,OLE字段在二進制內容周圍具有標準包裝,該包裝控制如何打開和操作嵌入在其中的對象。 – 2010-05-24 16:42:07

+2

我不確定你可以在沒有自動化的情況下完成你需要做的事情。你看過Stephen Lebans的OLE提取工具嗎? http://www.lebans.com/oletodisk.htm - 該數據庫中的代碼可能會爲您提供有關在Access中如何完成的一些想法,因此可能會爲您提供有關沒有自動化(或不自動)的情況的線索。 – 2010-05-24 16:44:11

回答

0

由於OLE對象在Access上像「圖像」一樣存儲,因此會發生這種情況。這會導致性能問題,還有像您這樣的問題。爲了處理這些限制,Microsoft在Access 2007/2010上引入了附件字段,它不需要OLE服務器來運行內容。附件,每個記錄應該有多個文件,在MS-Access後臺自動管理。也許你應該使用附件或更改數據庫的SQL Server,MY-SQL,Firebird。