Компонент TDataDriverEh.

TDataDriverEh - это поставщик данных в TMemTableEh и обработчик изменений от TMemTableEh. TDataDriverEh это простейший поставщик данных, он является посредником между TMemTableEh и другим DataSet’ом, который умеет работать с базой данных. Хотя многие датасеты могут быть подключены к DBGrid’ напрямую, минуя TMemTableEh, связку (DBGridEh-DataSource-MemTableEh-DataDriverEh-DataSet), данную связку можно использовать если вы хоти иметь преимущества работы DBGridEh в связки с MemTableEh такие как ViewScroll режим, древовидные отображение данных, использование общих данных несколькими компонентами MemTableEh.

В режиме поставщика TDataDriverEh берет данные DataSet'а, определенного свойством ProviderDataSet и копирует их в TMemTableEh. Перед получением первой записи MemTableEh запрашивает у TDataDriverEh структуру полей таблицы и на основе их создает структуру внутреннего массива записей. TDataDriverEh формирует структуру полей на основе списка полей ProviderDataSet’а. Далее по мере требования TDataDriverEh берет значения текущей записи, записывает их TMemTableEh и переходит к следующей записи. Кроме того, TDataDriverEh может обновить значения уже записанной в TMemTableEh записи из ProviderDataSet’а (TMemTableEh.RefreshRecord). TDataDriverEh находит запись в ProviderDataSet'е, используя свойство KeyFields, и переписывает значения полей в запись TMemTableEh. В режиме обработчика изменений, он принимает измененную запись от TMemTableEh, используя свойство KeyFields, находит ее положение в ProviderDataSet, обновляет запись в ProviderDataSet'е, повторно запрашивает ее из ProviderDataSet'а и возвращает запрошенную запись обратно в TMemTableEh.

Используя события TDataDriverEh'а можно контролировать пересылаемые данные между TDataDriverEh'ом и TMemTableEh'ом, а также передавать и обрабатывать изменения из любого другого источника данных отличного от ProviderDataSet'а.

TDataDriverEh содержит следующие события:

OnBuildDataStruct – пишите обработчик этого события, чтобы создать структуру создаваемых данных в TMemTableEh перед принятием первых записей. В событии можно вызвать процедуру TDataDriverEh.DafaultBuildDataStruct для создания структуры по умолчанию.

OnProduceDataReader - пишите обработчик этого события, чтобы переопределить датасет-поставщик данных. Если это событие не присвоено, то поставщиком данных станет ProviderDataSet. В событии можно вызвать процедуру TDataDriverEh.DefaultProduceDataReader чтобы определить датасет-поставщик по умолчанию.

OnReadRecord - пишите обработчик этого события, чтобы присвоить значения полей новой поставляемой TMemTableEh'у записи или указать, что данных больше нет. В событии можно вызвать процедуру TDataDriverEh.DefaultReadRecord чтобы присвоить значения полей по умолчанию.

OnAssignFieldValue - пишите обработчик этого события, чтобы присвоить значение конкретного поля новой поставляемой TMemTableEh'у записи или для обновления записи. Используйте DataValueVersion для определения режима запрашиваемой записи: dvvValueEh – при присваивании новой записи, dvvRefreshValue – при обновлении значений существующей. В событии можно вызвать процедуру TDataDriverEh.DefaultAssignFieldValue чтобы присвоить значение поля по умолчанию.

OnRefreshRecord - пишите обработчик этого события, чтобы присвоить свежие значения полей при обновлении записи с сервера. В событии можно вызвать процедуру TDataDriverEh.DefaultRefreshRecord чтобы присвоить свежие значения по умолчанию.

OnUpdateRecord - пишите обработчик этого события, чтобы обработать измененную в TMemTableEh'е запись. Используйте MemRec.UpdateStatus для определения типа изменения: Изменение, Удаление или Добавление. В событии можно вызвать процедуру TDataDriverEh.DefaultUpdateRecord для обработки измененной записи по умолчанию. По умолчанию DataDriver проводит изменения в ProviderDataSet.

OnUpdateError - пишите обработчик этого события, чтобы выполнить определенные действия при возникновении ошибки обработки измененной записи. При возникновении ошибки возможна следующая реакция:

ueaBreakAbortEh Прервать эту и все последующие операции изменения, исключение не вызывать.

ueaBreakRaiseEh Прервать эту и все последующие операции изменения, откатить транзакцию, вызвать исключение об ошибке.

ueaCountinueEh Игнорировать ошибку, не менять статус изменения записи и продолжить выполнение остальных изменений.

ueaRetryEh Повторить операцию (Вы должны предпринять какие либо действия для предотвращения этой ошибки при повторной операции).

ueaCountinueSkip Игнорировать ошибку, выставить у записи статус Unchanged или удалить в случае статуса usDelete и продолжить выполнение остальных изменений.

 

В событии можно вызвать процедуру TDataDriverEh.DefaultUpdateError чтобы выполнить действия по умолчанию.