Особый случай: неправильный порядок обновлений для fly-away - PullRequest
0 голосов
/ 05 декабря 2018

Как я могу отследить местоположение ошибки " Особый случай: неправильный порядок обновлений для fly-away! "?

Это сообщение об ошибке определено в Datasnap.DSIntf как

const
  ...
  ERRCODE_FLYAWAY_WRONGORDER = 13;  { Special case: wrong order of updates for fly-away }
  ...
  DBERR_FLYAWAY_WRONGORDER  = ERRBASE_ALC + ERRCODE_FLYAWAY_WRONGORDER;

но нигде в источниках Delphi я не могу найти ссылки на подстроку FLYAWAY_WRONGORDER. *

Я намеревался скомпилировать с отладочными dcu, а затем поставить точку останована линии, где возникает исключение, и проверьте стек вызовов UP, чтобы найти причину.В настоящее время я шагаю вниз по коду до появления ошибки, но это менее эффективно (сложное приложение).

Размещение TApplicationEvents с точкой останова в ее обработчике OnException не дает мне полезную информацию стека вызовов:

enter image description here

Итак, как (эффективно) отследить место, где генерируется эта ошибка?

Справочная информация о происходящем:

  • Форма использует DevExpress TcxScheduler подключен к TcxSchedulerStorage компоненту в модуле данных, подключен к вложенному TClientDataSet s
  • Код сохраняет все изменения в этих наборах данных (ApplyUpdates)
  • В BeginUpdate / EndUpdate для этих компонентов DevExpress, Iзатем вставляйте, удаляйте и обновляйте записи в этих наборах данных, перемещайтесь при этом, даже изменяйте родительские идентификаторы в наборах подробных данных, чтобы они выпадали из текущего набора подробных данных «на виду».Ошибка происходит, когда я редактирую, а затем публикую запись, делающую именно это.
  • Delphi Tokyo 10.2.3, приложение Win32
  • Любая другая информация об этом сообщении об ошибке приветствуется, я не смогнайти что-нибудь.

Я фактически «исправил» ошибку, вызвав ApplyUpdates для основного набора данных в нескольких местах, но так как я не совсем уверен в причине, я хочу исследовать это дальше.Так что мой вопрос не Как я могу исправить ошибку в моем коде , это Как мне найти ошибка в моем коде ?

* В TCustomADODataSet.InternalPost в Data.Win.ADODB есть подпрограмма CheckForFlyAway, но мы не используем ADO, я не могу устанавливать точки останова в этих подпрограммах.

...