Рассмотрим эту строку:
MyObject.SomeRecord.SomeField := NewValue;
На самом деле это ошибка компиляции:
[Ошибка DCC]: E2064 Левая сторона не может быть назначена
Ваш реальный код, вероятно, выглядит примерно так:
MyRecord := MyObject.SomeRecord;
MyRecord.SomeField := NewValue;
Здесь происходит то, что вы копируете значение типа записи в локальную переменную MyRecord
.Затем вы изменяете поле этой локальной копии.Это не изменяет запись, хранящуюся в MyObject.Для этого вам нужно вызвать установщик свойств.
MyRecord := MyObject.SomeRecord;
MyRecord.SomeField := NewValue;
MyObject.SomeRecord := MyRecord;
Или переключиться на использование ссылочного типа, то есть класса, а не записи.
Подводя итог, проблема с вашимтекущий код состоит в том, что SetSomeRecord не вызывается, и вместо этого вы изменяете копию записи.И это потому, что запись имеет тип значения , а не тип ссылки .