TClientDataSet.Cancel丢失TDBMemo值

时间:2012-11-14 22:43:37

标签: delphi delphi-xe2 tclientdataset data-loss

我有一个包含以下控件的表单:TDBEditTDBMemoTDataSourceTClientDataSet

如果用户修改字段,然后点击表单上只需调用MyCDS.Cancel方法的按钮(取消编辑),TDBEdit字段将恢复为原始值,但{ {1}}字段未被还原(它们被设置为空值)。

TDBMemo是从MSSQLServer 2008数据库填充的。 TClientDataSet字段在数据库中为TDBEditnvarchar(255)TDBMemonvarchar(max)字段。

查看Debug Inspector中的值(ctrl + F7,MyCDS.FieldByName('afield'),Inspect)显示xml个字段之一的以下内容:

  • DataSize = 0
  • DataType = ftWideMemo
  • 尺寸= 1

对于所有nvarchar(max)nvarchar(max)字段,这是相同的,无论基础字段是否包含数据。

xml(被视为nvarchar(max))与ftWideMemo控件之间似乎不兼容。

之前有没有人见过这样的问题?您有任何建议如何解决吗?

1 个答案:

答案 0 :(得分:0)

如果有人感兴趣,问题是TClientDataSet组件中的错误。只有在克隆数据集时,才会出现此问题,没有Provider并关闭LogChanges。如果您在克隆的数据集上编辑记录然后取消编辑,则任何备忘录字段都会丢失其值。

由于您不一定在基于文件的应用程序中使用Provider,因此启用LogChanges并不总是有意义的。但是,要解决备注字段的限制,您可以启用LogChanges,然后在更改克隆数据集的操作后调用MergeChangeLog

我创建了一个演示该问题的程序。参见Embarcadero事件QC#110511。