На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Обязательно указание:
1) типа базы данных (Paradox/Oracle/Interbase и т.п.)
2) способа доступа к базе данных (ODBC/ADO/DAO/BDE и т.п.)
Например: Paradox/BDE, MS Access/ADO

Наиболее часто задаваемые вопросы:
Базы даных для начинающих. Первые шаги. Понятие о BDE.
Переход на клиент-сервер и начала ADO
Приёмы работы с BLOB (OLE/Memo) полями
Запросы и параметры или как избавиться от многих проблем. Проблемы с датами в запросах.
Нужели мне нужно устанавливать BDE? (или почему не работает программа на другом компьютере)
Модераторы: Bas, Rouse_
  
> Ускорить пробег по DataSet , проблема в концепции EnableControls
    Здравствуйте!

    Заполненный датасет связан с несколькими контролами на форме, в частности с TcxDBTreeList. Часто нужно пробежать по датасету не для его изменения, а для поиска данных или считывания с него данных или еще для чего. В общем пробег в режиме "readonly".

    Если бегать без DisableControls/EnableControls, то это долго - меняется текущая запись, бегает курсор в TcxDBTreeList.

    Если включить DisableControls, то пробег быстрый, но при EnableControls все замирает на несколько секунд, т.к. контролы получают от датасета сообщение DataChanged. Например, TcxDBTreeList при этом перечитывает датасет полностью...


    Я уже пытался писать своего потомка над датасетом, перекрывая методы, но начались непонятные глюки в обновлении. Может кто знает решение проблемы?
      Если используются компоненты ADO, то лучше бегать через встроенный Recordset (в принципе, я так всегда и делаю :) )
      http://www.sql.ru/forum/1110641/perebor-ma...442160#16442160
        может на уровне Pointer обратиться к экземпляру класса?
        Сообщение отредактировано: den_on_dream -
          user89, спасибо за ссылку. Но используется TdxMemData, у него такой фичи нет
            Если кому интересно, пока сделал так. Ускорение заметно:

            блокировка:

            TDataSetAccess(DataSet).SetTempState(dsBrowse); { чтобы потом не вызывать EnableControls }

            разблокировка:

            TDataSetAccess(DataSet).RestoreState(dsBrowse);

            внутри конечно нужно букмарк сохранять/восстанавливать.
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0195 ]   [ 16 queries used ]   [ Generated: 25.04.24, 12:29 GMT ]