2017-09-02 119 views
3

我在谷歌搜索很多次,所以我找不到任何有關通過delphi工作的附件,所以我決定寫這個問題。德爾福和MS訪問數據庫中的附件文件

我有.accdb數據庫中的表稱爲文件與這些領域:

IDFile PK AutoIncField, 
FileName WideStringField, 
FilesAttached WideMemoFiled. 

enter image description here

我如何用delphi /加載文件保存到/附件字段?

Attach files and graphics to the records in your database

這裏的問題,德爾福(Delphi)FilesAttached的數據類型是TWideMemoField, 當我寫ShowMessage(FDTable1FilesAttached.Value);它給附件的只是名字。

我不知道如何使用delphi插入/保存文件到/從該字段。

+0

@DownVoter正如我之前所說,不要只是dv和離開,告訴我們這個問題有什麼問題,你的觀點是什麼,即使是訪問者也可以發現這個評論有幫助,並讓問題變得更加有趣。 – Sami

+0

@MartynA你的意思是'TBlobField(FDTable1FilesAttached)'? – Sami

+1

附件數據類型是一種結構,不僅僅是一個文件流(它可以保存多個文件)。沒有關於這個結構的官方描述,並且會有所改變,所以我只是避免使用這種類型。附:不要試圖以所提議的方式強制字段訪問器。 – Victoria

回答

1

似乎很難找到使用.accdb附件字段的VBA/C#示例,這些字段應該很容易轉換爲Delphi。然而,事實證明,這比我想象的更難以找到以下事情:a)沒有誤解Attachment字段實際上是什麼,b)實際工作。跳轉到下面的更新部分。

例如,谷歌搜索

ACCDB在VBA創建附件

給衆多命中包括本

http://sourcedaddy.com/ms-access/working-with-attachment-fields.html

,你可以嘗試爲出發點。它使用MS DAO對象,幷包含將文件存儲到附件字段並訪問它們的簡單代碼。您需要爲DAO類型庫中創建一個Delphi包裝單元,如果你不已經有一個,使用IDE的Import Type Library

如果將ADO爲主喜歡的東西,你可以看看

https://www.codeproject.com/Questions/843001/Handling-fields-of-Attachment-type-in-MS-Access-us

更新查看功能OpenFirstAttachmentAsTempFile在後在此線程

https://access-programmers.co.uk/forums/showthread.php?t=224112&page=2

「阿斯報」(日期2012/4/11 =上午7點18分) 210

它顯示了從attachment字段中提取文件的明顯成功的嘗試(該線程還包含編碼該函數的其他幾次嘗試)。

請特別注意這條線

Set rstChild = rstCurrent.Fields(strFieldName).Value ' the .Value for a complex field returns the underlying recordset 

這意味着該附件字段的Value可以返回其含有附加的文件(一個或多個)的記錄集。

據推測,導入最近DAO類型庫的版本爲德爾福將允許 Delphi應用程序做同樣的事情,那麼可以反向工程rstChild記錄,以瞭解如何在代碼填充此字段。不過,我還沒有這樣做。

+0

你說得對。實際上,如果沒有對'Attachment'數據類型結構進行逆向工程,您將無法在這樣的表中插入一行。您可以通過訪問該列字段來讀取附件文件數據,例如'SELECT FilesAttached.FileData FROM Files',您將收到一個包含文件數據的blob字段(當附加多個文件時,該元組將被拆分爲多個那個領域)。如何使用ODBC客戶端庫將數據插入此類表中是一個謎。 – Victoria

+0

@維多利亞:好的。 ADO文章中的評論「//用數據做某事......」 - 讓它聽起來那麼簡單; =) – MartynA

+0

好吧,它在內部會是blob,我敢打賭。但結構化,只要我們沒有定義那種我們只能猜測的結構。我試過沒有成功。 – Victoria