Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ненормальный скролинг в DBGrid


cutter-pro ©   (2002-08-30 12:55:00) 

Delphi 6.0
При отображении в DBGrid таблицы Paradox скролинг работает нормально, т.е. регулятор перемещается синхронно с перемещением по записям.
Что касается таблицы dBASE, то здесь скролинг ведет себя совсем по другому - при переходе на вторую запись, регулятор сразу перемещается на середину полосы прокрутки и, далее, остается в этом положении до тех пор, пока не будет достигнута последняя запись.
Может кто-нибудь знает как с этим бороться?
P.S. Да и в случае с Paradox - в принципе тоже не все так идеально. При перемещении регулятора скролинга изображение перерисовывается не сразу, а после отпускания кнопки мыши.
НЕХОРОШО!:(


cutter-pro   (2002-09-02 10:22:00) [1]

Мужики - ОГРОМНОЕ СПАСИБО! :)


Prooksius   (2002-08-31 20:25:00) [2]

2 cutter-pro: Ну я имел ввиду, поставил на форму стандартный TScrollBar (или RX) и обрабатывал скроллинг с помощью него. А тот Vertical Scroll Bar, что был в TDBGridEx - убрал (благо, такая опция есть).


Desdechado   (2002-08-31 16:20:00) [3]

1. для доставания каждой записи из БД выполняется команда Fetch (это на уровне внутренностей БДЕ) - отсюда и термин.
2. это лишь частный случай, поскольку БДЕ обучен работать с любым сервером БД, для которого у него есть драйвер. Конкретика реализации для него не важна. А для большинства СУБД количество записей заранее в выборке неизвестна. И даже для DBF число записей, указанное тобой, слишком неустойчивая вещь в сети. Оно постоянно меняется, в него входят и удаленные записи (представь ситуацию - 10 млн удаленных и одна нормальная: как себя вести?). При открытии таблицы с одного рабочего места там одно число будет, а потом сосед добавил записи - оно другое. Ты записи видишь, а количество уже не совпадает.


cutter-pro   (2002-08-30 17:35:00) [4]

> Desdechado
Что значит зафытченные записи?
Почему количество записей неизвестно? По-крайней мере, при связывании DataSource напрямую с Table без фильтров и т.д. количество записей dBASE (*.dbf) находится в файле по абсолютному смещению 0004h.
Что Вы думаете по этому поводу?


Desdechado   (2002-08-30 17:02:00) [5]

вообще-то такое поведение нормально. это связано с тем, что гриду не известно количество записей в подлежащем датасете. Поэтому только начало, середина и конец.
Скажете, что записи уже зафэтчены и их можно посчитать - но это дополнительные тормоза, особенно когда набор данных большой. Кроме того, при установке фильтра или OnFilterRecord вообще неизвестно, сколько записей будет удовлетворять фильтру без полного их перебора, а перебирать их без команды программиста или юзера (особенно если важна текущая позиция в датасете) программа не имеет права.


cutter-pro   (2002-08-30 16:45:00) [6]

> Prooksius - Спасибо за совет - но я не понял - что значит залепил, ввиде чего, если конечно это не конфиденциальная информация?


Prooksius   (2002-08-30 16:31:00) [7]

Правильно, поэтому я снес вертикальную полосу прокрутки в DBGridEh и залепил свою, обрабатывая самостоятельно скроллинг.


cutter-pro   (2002-08-30 16:22:00) [8]

> Alexandr - только что установил DBGridEh - ситуация не изменилась. :(


koks   (2002-08-30 14:52:00) [9]

Проблема стара как Delphi....
Универсального решения нет.
Можно DBGridEh, можно исп. ADO. После множества экспериментов я на нее забил...


cutter-pro   (2002-08-30 14:51:00) [10]

> Alexandr - Благодарю за помощь
> MsGuns - Багодарю за помощь, но мне не совсем понятно каким образом - в списке событий DBGrid wm_HScroll и wm_VScroll отсутствуют, да и для самого окна как такового - аналогично.


MsGuns   (2002-08-30 13:16:00) [11]

Обрабатывай событие скроллинга


Alexandr   (2002-08-30 13:00:00) [12]

DBGridEh


Наверх

Титульная страница Поиск, карта сайта Написать письмо