2

我有一个带有以下控件的表单:TDBEdit, TDBMemo, TDataSource,TClientDataSet

如果用户编辑字段,然后单击表单上的一个按钮,该按钮仅调用该MyCDS.Cancel方法(取消编辑),则TDBEdit字段将恢复为其原始值,但TDBMemo字段不会恢复(它们被设置为空白值)。

TClientDataSetMSSQLServer 2008 数据库填充。TDBEdit字段在nvarchar(255)数据库中,并且TDBMemonvarchar(max)xml字段。

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

  • 数据大小 = 0
  • 数据类型 = ftWideMemo
  • 大小 = 1

无论底层字段是否有数据,所有的nvarchar(max)and字段都是一样的。xml

nvarchar(max)(被视为 a ftWideMemo)和TDBMemo控件之间似乎存在不兼容性。

有没有人见过这样的问题?您对如何解决它有什么建议吗?

4

1 回答 1

0

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

由于您不一定要Provider在基于文件的应用程序中使用 a,因此启用LogChanges. 但是,要解决备注字段的限制,您可以保持LogChanges打开状态,然后MergeChangeLog在更改克隆数据集的操作之后调用。

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

于 2012-11-15T23:09:26.983 回答