clonedataset с исходным кодом в состоянии dsInsert/dsEdit

Насколько я понимаю, наборы данных клонов используют одни и те же данные с исходным набором данных. Когда я клонирую набор данных в режиме вставки, клон находится в режиме просмотра и не может получить доступ к каким-либо значениям полей, уже установленным в исходном наборе данных. Можно ли получить доступ к новой записи из клона, чтобы настроить любое значение ее поля, не вызывая таких событий, как OnDataChange/OnUpdateData?

используя Delphi 7/2010, dbExpress и MySQL.


person Martin    schedule 05.11.2013    source источник
comment
Клонировать как? TClientDataSet.CloneCursor()?   -  person Marcus Adams    schedule 06.11.2013
comment
Почему вы не можете опубликовать измененную/вставленную запись в исходном наборе данных до ее клонирования? Пока исходный набор данных находится в состоянии dsEdit/dsInsert, изменение может быть отменено...   -  person MartynA    schedule 06.11.2013
comment
TClientDataSet.CloneCursor(SourceCDS, False); Я не могу опубликовать его, потому что пользователь все еще заполняет данные записи, но я хотел бы обновить некоторые поля на основе уже предоставленных данных. Пример: DepositMaster(ID, AmountSUM) -> DepositDetail(ID, Amount) Когда пользователь заканчивает вводить все детали, Master.Amount обновляется общей суммой Detail.Amounts, когда пользователь нажимает на публикацию. В качестве альтернативы пользователь может заполнить Master.Amount, а Detail.Amounts будут вставлены автоматически на основе общих записей, распределенных между записями Detail, чтобы они были равны Master.Amount.   -  person Martin    schedule 06.11.2013


Ответы (1)


Пока набор данных находится в режиме вставки/редактирования, значения полей сохраняются только в локальных буферах набора данных. Свойство Data из TClientDataSet, содержащее полную таблицу, обновляется только при вызове Post. Вот почему из любого клонированного набора данных нет доступа ни к каким неопубликованным записям.

person Uwe Raabe    schedule 05.11.2013
comment
Отличный ответ, спасибо. Означает ли это, что я могу получить доступ только к значениям записей из исходного набора данных. Могу ли я каким-то образом скопировать значения в клон и использовать клон для обновления базы данных? - person Martin; 06.11.2013
comment
Вы можете попробовать CopyFields. - person Uwe Raabe; 07.11.2013