【问题标题】:Delphi and attachment files in MS access databaseMS access 数据库中的 Delphi 和附件文件
【发布时间】:2017-09-02 07:13:43
【问题描述】:

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

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

IDFile PK AutoIncField,
FileName WideStringField,
FilesAttached WideMemoFiled.

如何使用 delphi 将文件保存到附件字段/从附件字段加载文件?

Attach files and graphics to the records in your database

这里的问题,在delphi中FilesAttached的数据类型是TWideMemoField, 当我写ShowMessage(FDTable1FilesAttached.Value); 时,它只给出附件的名称。

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

【问题讨论】:

  • @DownVoter 正如我之前所说,不要只是 dv 和离开,告诉我们这个问题有什么问题,你的观点是什么,即使是访问者也可以发现这个 cmets 很有帮助,让他们的 Qs 更好.
  • @MartynA 你的意思是TBlobField(FDTable1FilesAttached)
  • 附件数据类型是一种结构,而不仅仅是一个文件流(顺便说一句,它可以容纳多个文件)。这种结构没有官方描述,可能会发生变化,所以我只是避免使用这种类型。附言不要尝试按照建议的方式对字段访问器进行类型转换。

标签: delphi delphi-10-seattle


【解决方案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

更新请参阅此线程中“aspen”(日期 = 4/11/2012 07:18 am)的帖子中的函数OpenFirstAttachmentAsTempFile

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

这显示了从attachment 字段中提取文件的明显成功尝试(该线程还包含其他几个对该函数进行编码的尝试)。

特别注意这一行

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

这意味着附件字段的Value 可以返回一个包含附件的记录集。

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

【讨论】:

  • 你是对的。实际上,如果不对 Attachment 数据类型结构进行逆向工程,您将无法在此类表中插入一行。您可以通过访问该列字段来读取附件文件数据,例如SELECT FilesAttached.FileData FROM Files,您将收到一个包含文件数据的 blob 字段(当该字段中附加了多个文件时,元组将被拆分为多个)。如何使用 ODBC 客户端库将数据插入此类表是一个谜。
  • @Victoria:是的,好吧。我被 ADO 文章 // Do something with data ... 中的评论逗乐了 - 听起来很简单;=)
  • 好吧,我敢打赌,它会在内部变成 blob。但是有结构的,而且这么长时间我们还没有这个结构的定义,我们只能猜测。我试过没有成功。
  • @Victoria:我想知道在内部它是否是某种 OLE 存储,因为 MS 多年来一直在为这些东西进行所有工程设计,但坦率地说,我无法鼓起热情花太多时间找出答案。
  • 我相信 OLE 对象会以SQL_LONGVARBINARY 的形式获取(请参阅data types)。但对我来说也很难猜到。如果不知道该结构,就不可能插入这样的字段。正在抓取。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
相关资源
最近更新 更多