Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.191.22] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте!
Заполненный датасет связан с несколькими контролами на форме, в частности с TcxDBTreeList. Часто нужно пробежать по датасету не для его изменения, а для поиска данных или считывания с него данных или еще для чего. В общем пробег в режиме "readonly". Если бегать без DisableControls/EnableControls, то это долго - меняется текущая запись, бегает курсор в TcxDBTreeList. Если включить DisableControls, то пробег быстрый, но при EnableControls все замирает на несколько секунд, т.к. контролы получают от датасета сообщение DataChanged. Например, TcxDBTreeList при этом перечитывает датасет полностью... Я уже пытался писать своего потомка над датасетом, перекрывая методы, но начались непонятные глюки в обновлении. Может кто знает решение проблемы? |
Сообщ.
#2
,
|
|
|
Если используются компоненты ADO, то лучше бегать через встроенный Recordset (в принципе, я так всегда и делаю )
http://www.sql.ru/forum/1110641/perebor-ma...442160#16442160 |
Сообщ.
#3
,
|
|
|
может на уровне Pointer обратиться к экземпляру класса?
|
Сообщ.
#4
,
|
|
|
user89, спасибо за ссылку. Но используется TdxMemData, у него такой фичи нет
|
Сообщ.
#5
,
|
|
|
Если кому интересно, пока сделал так. Ускорение заметно:
блокировка: TDataSetAccess(DataSet).SetTempState(dsBrowse); { чтобы потом не вызывать EnableControls } разблокировка: TDataSetAccess(DataSet).RestoreState(dsBrowse); внутри конечно нужно букмарк сохранять/восстанавливать. |