我有一个包含以下控件的表单:TDBEdit
,TDBMemo
,TDataSource
,TClientDataSet
如果用户修改字段,然后点击表单上只需调用MyCDS.Cancel
方法的按钮(取消编辑),TDBEdit
字段将恢复为原始值,但{ {1}}字段未被还原(它们被设置为空值)。
TDBMemo
是从MSSQLServer 2008数据库填充的。 TClientDataSet
字段在数据库中为TDBEdit
,nvarchar(255)
为TDBMemo
或nvarchar(max)
字段。
查看Debug Inspector中的值(ctrl + F7,MyCDS.FieldByName('afield'),Inspect)显示xml
个字段之一的以下内容:
对于所有nvarchar(max)
和nvarchar(max)
字段,这是相同的,无论基础字段是否包含数据。
xml
(被视为nvarchar(max)
)与ftWideMemo
控件之间似乎不兼容。
之前有没有人见过这样的问题?您有任何建议如何解决吗?
答案 0 :(得分:0)
如果有人感兴趣,问题是TClientDataSet
组件中的错误。只有在克隆数据集时,才会出现此问题,没有Provider
并关闭LogChanges
。如果您在克隆的数据集上编辑记录然后取消编辑,则任何备忘录字段都会丢失其值。
由于您不一定在基于文件的应用程序中使用Provider
,因此启用LogChanges
并不总是有意义的。但是,要解决备注字段的限制,您可以启用LogChanges
,然后在更改克隆数据集的操作后调用MergeChangeLog
。
我创建了一个演示该问题的程序。参见Embarcadero事件QC#110511。