Delphi中计算字段为blob类型的TADQuery

Delphi中计算字段为blob类型的TADQuery,delphi,field,anydac,Delphi,Field,Anydac,我正在使用Anydac组件访问数据库。TADOQuery用于从SQL数据库中选择数据 其中一个字段是文本,但我需要显示一些RTF而不是此文本(相同的文本,但带有突出显示的单词,等等)。我试图创建BLOB类型的计算字段,并在TADQuery的OnCalcFields事件中用正确的值(来自DB的原始文本+一些处理)填充它。但它不起作用。我在应用程序启动时获得AV: 字段“xxx”不能是计算字段或查找字段。 如果我将FieldKind属性更改为FKCInternalCalc(默认值为FKCompula

我正在使用Anydac组件访问数据库。TADOQuery用于从SQL数据库中选择数据

其中一个字段是文本,但我需要显示一些RTF而不是此文本(相同的文本,但带有突出显示的单词,等等)。我试图创建BLOB类型的计算字段,并在TADQuery的OnCalcFields事件中用正确的值(来自DB的原始文本+一些处理)填充它。但它不起作用。我在应用程序启动时获得AV:

字段“xxx”不能是计算字段或查找字段。

如果我将FieldKind属性更改为FKCInternalCalc(默认值为FKCompulated),则应用程序将启动,但在尝试设置值时,我会在OnCalcFields上获得AV:

“数据集未处于编辑或插入模式。”

若我定义了计算字符串字段(而不是BLOB字段),那个么一切都正常,但字符串类型还有另一个问题。对于字符串类型,我必须提供限制文本最大大小的Size属性。如果我使用高于64k的值,例如67000,则在OnCalcFields事件处理程序中尝试赋值(甚至是短值!)时会得到AV:

Project xxx.exe引发异常类$C0000005,消息为“0x004094fc处的访问冲突:读取地址0xFFFFFC”。

所以,我既不能创建计算BLOB字段,也不能创建计算字符串字段。(它的最大大小是有限的,并且没有关于最大大小是否真正安全的信息。我发现大小>64k存在问题,但不确定它在较小的块中是否稳定。)

你知道我做错了什么吗

更新:目前我已经用不同的方式实现了它。我替换了表示层上的数据,但这只是一个解决方法,问题还在这里。是否可以在Delphi中使用BLOB类型的计算字段(最好使用Anydac TADQuery)?是否有关于字符串类型的计算字段限制的信息(或者可能有人有经验如何避免)


所以,TADQuery有一些SQL查询,一些字段定义+1 BLOB类型的计算字段+OnCalcFields事件处理程序(代码在上面)。当我启动应用程序(并尝试打开查询)时,它会生成AV。前面已经描述了我尝试的其他方法。

为什么不使用普通字段?你为什么认为应该“计算”呢?如果您收到AV或异常,请发布相关代码。2Sam:对不起,我不明白您所说的“普通字段”是什么意思。计算字段是普通字段,但它不存储在DB中,它是计算出来的,这是我认为唯一的区别。我不能在数据库中添加新字段,因为我在数据库中不需要它。我不知道如何添加“regular”字段,它既不计算也不存储在数据库中。所有的代码都是MyCalcField.AsString:='test'在OnCalcFields事件处理程序中,其他的一切都是在GUI中完成的,正如我所描述的,所以可能与代码无关。为什么不将rtf文本存储在数据库中,而不是在选择时对其进行处理。2Sam:问题与(我的)代码无关。这似乎是Anydac库中的问题(可能Anydac的某些版本不受此影响?)或Delphi DB相关组件中的问题(Anydac在许多方面依赖于标准组件)。2KE50:生产数据库不是一个游乐场,只有在确实需要时,我才会对数据库进行更改。事实并非如此。
procedure TDBDM.CommentsCalcFields(DataSet: TDataSet);
begin
  CommentsHighlighted.AsString := 'test';
end;