Сайт Koder.kz сайт для Delphi программистов.

koder.kz

Web or desctop App Developer

Написать

Добавил admin | Категория Наши материалы | 18 Апреля 2014


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 чтобы выполнить действия по умолчанию.