Быстрый доступ к значениям записи.
Для доступа к значениям полей конкретной записи в стандартном DataSet’е необходимо вначале перейти на нужную запись. Это не всегда удобно т.к. переход на запись методами MoveBy, RecNo, Bookmark активизирует события об изменении записи, что может привести к большим задержкам и перерисовкам экрана.
Для быстрого получения значения из конкретно записи без активизации события об изменении в MemTableEh можно использовать несколько способов.
Использовать методы DisableControls, EnableControls для деактивизации событий об изменениях в DataSet’е. Недостаток этого способа в том что EnableControls вызывает событие об изменении датасета что приведет к перерисовке визуальных компонент подключенных к DataSet’у.
Использовать методы InstantReadEnter, InstantReadLeave для перехода в режим InstantRead.
InstantReadEnter входит в режим просмотра записей и переходит на запись в DataSet’е определенную параметром RowNum. После этого вы можете читать значения записи. Каждому вызову метода InstantReadEnter, должен соответствовать вызов InstantReadLeave – выход из режима чтения записей. В режиме InstantRead нельзя менять значения полей записи. Методы InstantReadEnter, InstantReadLeave не посылают события об изменении позиции записи внешним компонентам.
Использовать свойства для доступа к внутренним объектам хранения данных. Внутренние объекты позволяют иметь доступ к значениям записей как к массиву данных по индексу. Кроме того вы можете обратится ко всем записям внутреннего массива данных без учета локального фильтра. Для доступа к внутренним структурам данных используйте следующие свойства объектам TMemTableEh:
RecordsView: TRecordsViewEh – ссылка на отфильтрованный список записей.
RecordsView.Rec[Index: Integer]: TMemoryRecordEh – доступ к конкретной записи в массиве отфильтрованных значений.
RecordsView.Count: Integer – количество записей в отфильтрован списке. В режиме TreeView учитываются только раскрытые ветви.
RecordsView.MemTableData.RecordsList[Index: Integer]: TMemoryRecordEh – доступ к конкретной записи в массиве всех записей.
RecordsView.MemTableData.RecordsList.Count – количество записей в списке всех записей.
RecordsView.MemTableData.RecordsList[Index: Integer].DataValues[const FieldNames: string; DataValueVersion: TDataValueVersionEh]: Variant – доступ к значению поля(ей) в записи с номером Index.
Копирование данных и структуры из/в внешнего DataSet’а.
TMemTableEh предоставляет следующие методы для копирования данных из/в внешних DataSat’ов в себя:
Метод SaveToDataSet
Копирует свои данные в другой DataSet, указанный в параметре Dest. Если параметр RecordCount > 0, то копирование начинается с текущей записи исходного DataSet’а и копируется не более RecordCount записей. Иначе копируются все записи, начиная с первой. Копирование происходит добавлением новых записей в Dest DataSet.
Метод LoadFromDataSet
Загружает не более RecordCount записей из DataSet’а, указанного в параметре Source. Если RecordCount = -1 то загружаются все записи. Параметр Mode определяет режим загрузки. Значение lmCopy определяет, что перед загрузкой надо удалить все записи. Значение lmAppend определяет что новые записи будут добавлены к старым данным.
Параметр UseIfCachedUpdates указывает, что вновь добавленные записи получат статус usInserted.
Внутренние объекты компонента TMemTableEh.
В большинстве случаев для работы с данными вам TMemTableEh вам будет достаточно свойств и методов самого компонента. Однако в некоторых случаях необходимо иметь возможность обработки данных на более низком уровне. Компонент TMemTableEh хранить записи в специально внутреннем массиве данных и имеет семь основных объектов для обработки внутренних данных:
TMemTableDataEh – внутренняя таблица данных. Содержит в себе два объекта: TMTDataStructEh описывающий структуру полей таблицы и TRecordsListEh содержащий список записей типа TMemoryRecordEh.
TMTDataStructEh – класс описывающий структуру полей внутренней таблицы. Содержит список объектов наследуемых от TMTDataFieldEh.
TMTDataFieldEh – базовый класс для определения типа поля во внутренней таблице. Является парент-типом для классов TMTStringDataFieldEh, TMTNumericDataFieldEh, TMTDateTimeDataFieldEh, TMTBlobDataFieldEh, TMTBooleanDataFieldEh, TMTInterfaceDataFieldEh, TMTVariantDataFieldEh, TMTRefObjectFieldEh.
TRecordsListEh – содержит список записей типа TMemoryRecordEh.
TMemoryRecordEh – представляет одну запись в массиве записей.
TRecordsViewEh – содержит отфильтрованный список записей. Содержит только записи удовлетворяющие условию TMemTableEh.Filter.
TMemoryTreeListEh – содержит древовидный список с узлами типа TMemRecViewEh и ссылками на записи.
Доступ к внутренним объектам из TMemTableEh
RecordsView: TRecordsViewEh – ссылка на отфильтрованный список записей.
RecordsView.MemTableData: TMemTableDataEh – ссылка на внутреннюю таблицу данных.
RecordsView.MemTableData.AutoIncrement: TAutoIncrementEh – ссылка на объект настройки инкрементных значений.
RecordsView.MemTableData.DataStruct: TMTDataStructEh – ссылка на объект структуры полей внутреннего массива.
RecordsView.MemTableData.DataStruct[Index: Integer]: TMTDataFieldEh – доступ к описанию полей структуры внутреннего массива.
RecordsView.MemTableData.RecordsList: TRecordsListEh – ссылка на массив-список записей.
RecordsView.MemTableData.RecordsList[Index: Integer]: TMemoryRecordEh – доступ к конкретной записи в массиве записей.
RecordsView.MemTableData.RecordsList[Index: Integer].DataValues[const FieldNames: string; DataValueVersion: TDataValueVersionEh]: Variant – доступ к значению поля(ей) в записи с номером Index.
Поделитесь с Вашими друзьями: |