Обработка ошибок обновления в нескольких записях в методе ReconcileError в TClientDataset - PullRequest
1 голос
/ 12 мая 2010

Я пытаюсь использовать событие ReconcileError, чтобы позволить пользователю исправить данные после ошибки обновления, которая произошла в определенной записи среди других.

Пример:

У меня есть набор данных с одним полем и 3 записями, это поле имеет уникальное ограничение для базы данных, затем я изменяю одно значение на конфликт, когда оно достигает базы данных, затем я вызываю ApplyUpdates для набора данных.

Это вызовет ошибку (нарушение уникального ограничения) в поставщике и прервет процесс applyupdates, вернув raAbort в переменную Action переменной ReconcileError.

В методе ReconcileError, который я попытался использовать:

Action := HandleReconcileError(aDataSet, UpdateKind, E); 

** РЕДАКТИРОВАТЬ **

После отладки и выгрузки записей DataSet, которые были возвращены с сервера, я заметил, что в этом наборе данных есть 2 записи, первая - Старая запись, а вторая - все изменения, которые я внес в первую запись.

Я немного запутался, всегда ли я получу этот DataSet с двумя записями? Я думал, что у него должна быть только одна запись со старыми / новыми значениями.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 13 мая 2010

После небольшой отладки и чтения я понял следующее:

  • OnReconcileError вызывается для каждой записи, которая не может быть применена, и для каждой создается набор данных.
  • Этот DataSet имеет 2 записи, когда UpdateKind имеет значение ukModify, одну запись как usUnModified (исходная запись) и вторую запись как usModified (все изменения находятся во второй записи)
  • При изменении ukInsert или ukDelete набор данных имеет только одну запись
  • Этот набор данных не следует изменять, так как это просто временный набор данных, созданный для чтения данных
  • Диалог согласования не работает должным образом, так как он никогда не показывает правильные значения измененной записи (ошибка Delphi 2010?)
1 голос
/ 20 июня 2013

В dbExpress вы найдете с компонентом TSQLConnection, в параметрах запись, Mars_Connection , которая по умолчанию имеет значение False , установите для этого True и сообщение об ошибке разрешено

0 голосов
/ 12 мая 2010

Запись, переданная OnReconcileError или OnUpdateError, является записью, к которой нельзя применить обновления. В соответствии с файлом справки D2007 (обратите внимание, что это ссылка на файл справки, а не веб-ссылка!) - обратите внимание на раздел, касающийся параметра DataSet:

Вы всегда должны кодировать OnReconcileError или OnUpdateError обработчик событий, даже если только отказаться возвращенные записи, которые не могли быть применяется. Обработчики событий для этих два события работают одинаково. Oни включают следующие параметры:

DataSet: набор данных клиента, который содержит обновленную запись, которая не может быть применено. Вы можете использовать это методы набора данных для получения информации о проблеме записи и редактирования запись для того, чтобы исправить любой проблемы. В частности, вы захотите использовать CurValue, OldValue и Свойства NewValue полей в текущая запись для определения причина проблемы обновления. Тем не мение, Вы не должны вызывать любой набор данных клиента методы, которые изменяют текущую запись в вашем обработчике событий.

...