次のコントロールを持つフォームがあります: TDBEdit
、TDBMemo
、TDataSource
、TClientDataSet
ユーザーがフィールドを編集し、メソッドを呼び出すだけのフォーム上のボタンをクリックするとMyCDS.Cancel
(編集をキャンセルするため)、TDBEdit
フィールドは元の値に戻りますが、TDBMemo
フィールドは元に戻されません (空の値に設定されます)。
はTClientDataSet
、MSSQLServer 2008 データベースから取り込まれます。TDBEdit
フィールドはデータベースnvarchar(255)
にあり、TDBMemo
またはnvarchar(max)
フィールドxml
です。
Debug Inspector (ctrl+F7、MyCDS.FieldByName('afield')、Inspect) で値を見ると、nvarchar(max)
フィールドの 1 つについて次のように表示されます。
- データサイズ = 0
- データ型 = ftWideMemo
- サイズ = 1
これは、基になるフィールドにデータがあるかどうかに関係なく、すべてのフィールドnvarchar(max)
とフィールドで同じです。xml
nvarchar(max)
( として扱われるftWideMemo
) とTDBMemo
コントロールの間に非互換性があるようです。
誰もこのような問題を見たことがありますか? それを解決する方法について何か提案はありますか?