【发布时间】:2013-10-31 15:23:14
【问题描述】:
在 Delphi XE 上,我使用来自 TpFIBDataSet 的 OldValue 和 NewValue(但它可以应用于任何 TDataSet 后代),以验证不同字段是否已更改。我的问题是如何将 blob 字段的这两个值检索为 TMemoryStreams?我做了一些研究,但我什么也没找到。
【问题讨论】:
-
我不知道用本机代码来做这件事。您是否考虑过实现自己的子类来模仿旧值和新值的行为,但返回
TBytes而不是Variant? -
我也在考虑这个问题。我的问题是我不能同时拥有旧流和新流。假设在该二进制流中,您有一个 RTF 文件或图像文件。如何在不进行补充查询的情况下验证新的与旧的?
-
我想我找到了一种方法来检测 BLOB 是否已更改,因为您不能将
OldValue和NewValue用于 BLOB。我会发布它作为答案。 -
如果您只想检测 BLOB 何时被修改,那么旧值和新值有什么关系?只需使用
.Modified属性即可。 -
如果您出于其他原因需要旧值和新值,那么您必须对数据集组件进行子类化并编写新代码以将 BLOB 作为字节而不是变体返回,或者存储之前的在用户编辑它之前在内存流中,以便您拥有之前和之后,或者克隆(或复制)数据集,以便在用户更改它们之前拥有旧值的副本。如果您说明您打算如何使用新旧流,我或许可以提供更多信息。
标签: delphi blob firebird delphi-xe