Для доступа к значениям полей конкретной записи в стандартном 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.