MS-access数据库中的Delphi和附件文件

MS-access数据库中的Delphi和附件文件,delphi,delphi-10-seattle,Delphi,Delphi 10 Seattle,我在谷歌搜索了很多次,所以,我找不到任何关于通过delphi处理附件的信息,所以我决定写这个问题 我在.accdb数据库中有一个名为Files的表,其中包含以下字段: IDFile PK AutoIncField, FileName WideStringField, FilesAttached WideMemoFiled. 如何使用delphi在附件字段中保存/加载文件 这里的问题是,在delphi中,附加文件的数据类型是TwideMoField, 当我写ShowMessageFDTable1

我在谷歌搜索了很多次,所以,我找不到任何关于通过delphi处理附件的信息,所以我决定写这个问题

我在.accdb数据库中有一个名为Files的表,其中包含以下字段:

IDFile PK AutoIncField,
FileName WideStringField,
FilesAttached WideMemoFiled.
如何使用delphi在附件字段中保存/加载文件

这里的问题是,在delphi中,附加文件的数据类型是TwideMoField, 当我写ShowMessageFDTable1FilesAttached.Value时;它只给出附件的名称


我不知道如何使用delphi在该字段中插入/保存文件。

似乎不难找到使用.accdb附件字段的VBA/C示例,这些示例应该很容易转换为delphi。然而,事实证明,要找到a没有误解附件字段实际是什么,b实际起作用的东西比我想象的要困难得多。跳到下面的更新部分

例如,谷歌搜索

accdb在vba中创建附件

提供了包括这一个在内的众多点击

您可以尝试将其作为起点。它使用MS DAO对象,并包含用于将文件存储到附件字段和访问附件字段的简单代码。如果还没有,您需要使用IDE的导入类型库为DAO类型库创建一个Delphi包装单元

如果您喜欢基于ADO的东西,您可以看看

更新请参阅此线程中aspen date=4/11/2012 07:18 am发布的文章中的函数OpenFirstAttachmentaTempFile

这显示了从附件字段提取文件的一次明显成功的尝试。该线程还包含了编写此函数的其他几次尝试

请特别注意这一行

Set rstChild = rstCurrent.Fields(strFieldName).Value ' the .Value for a complex field returns the underlying recordset
这意味着附件字段的值可以返回包含附件的记录集

大概,将DAO类型库的最新版本导入Delphi将允许
一个Delphi应用程序可以做同样的事情,然后可以对rstChild记录集进行反向工程,以查看如何在代码中填充此字段。不过,我还没有这么做。

@DownVoter正如我之前所说的,不要只是dv然后离开,告诉我们问题出了什么问题,你的观点是什么,即使是访问者也会发现这些评论很有帮助并使他们的Qs更准确。@MartynA你的意思是TBlobFieldable1FileSattached?附件数据类型是一种结构,不仅仅是一个文件流,它还可以保存多个文件。。这个结构没有官方的描述,可能会有变化,所以我会尽量避免使用这种类型。请注意,不要试图按建议的方式对字段访问器进行类型转换。你是对的。实际上,如果没有附件数据类型结构的反向工程,您将无法在这样的表中插入行。您可以通过访问该列字段来读取附件文件数据,例如,从文件中选择FilesAttached.FileData,您将收到一个blob字段,其中包含文件数据。当在该字段中附加多个文件时,元组将被拆分为多个。如何使用ODBC客户端库将数据插入到这样的表中是一个谜。@Victoria:是的,嗯。ADO文章//Do something with data…-听起来很简单=嗯,我敢打赌,它内部会是一团。但是有结构的,只要我们没有对结构的定义,我们只能猜测。我试过了,但没有成功。@Victoria:我想知道在内部它是否是某种OLE存储,因为MS多年来一直在为这种东西进行所有的工程设计,但坦率地说,我不能鼓起热情花很多时间去寻找。我相信OLE对象会像SQL_LONGVARBINARY所看到的那样被获取。但对我来说也很难猜测。如果不知道这个结构,就不可能插入这样的领域。抓取是一种很好的方法。