|
|
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
База у меня DAO, в форме помимо полей есть еще две подчиненные формы и одна картинка, которая загружается с сервера. Бесит поведение пользователей: просто скроллят колесиком по записям, даже когда знают нужный номер (т.е. можно вбить напрямую). У меня аж сердце кровью обливается, когда смотрю на это дело, ведь каждую запись он начинает обрабатывать (а их там штук 50 за секунду мелькает). Отсюда возможные глюки и т.д. Как бы это дело сделать таким образом, чтобы сама форма обрабатывалась только через, скажем, 200-500 мс после успокоения пользователя. Главное, чтобы она никакой активности/загрузки до этого момента не только не афишировала, но и реально не делала. Это возможно? P.S. Запретить скроллить не могу из соображений собственной безопасности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2004, 16:33:25 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
Точо посоветовать ничего не могу, но если поможет, то при скроллировании не просходит обновление данных, а происходить лишь их отображение. Следовательно если на какое-то время отлючать отображение... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2004, 16:37:27 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
А если поменять тактику. Запретить скроллирование всего набора записей. А переход осуществлять через выбор в combobox'e. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2004, 16:53:53 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
vam911 В моем случае отображение и обновление - синонимы. Я имел в виду обновление содержимого полей, таблиц и картинки. Вышла игра слов, но ты понял, что я хочу сказать :) Если я отключу отображение, разве будет видно до какой записи юзер доскроллился? А ведь ему это и надо. (по правде сказать, когда записи рядом это даже удобнее). А, может быть, можно не все поля временно отключать, а только часть? guest1187 Спасибо, но я не могу запретить скроллить. Это у нас уже на уровне инстинктов :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2004, 18:11:21 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
Если я правильно понял ситуацию, то могу предложить такое решение: - Подчиненные формы не связывать с полями в главной. - В обработчике события "включение" утанавливаем таймер. - В обработчике события "На запись" пишем код, который обнуляет таймер. После достижения таймером заданного времени меняем свойство RecordSource у подчиненных форм и выполняем для них Requery. Таким образом, запрос к серверу произойдет через заданное время после успокоения. Если нужно подробнее, пиши - отвечу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2004, 18:25:41 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2004, 19:17:31 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
Если я правильно понял ситуацию, то могу предложить такое усовершенствование: - Подчиненные формы связать с дополнительным свободным полем(полями) в главной (можно скрытыми). - Включаем таймер. - В обработчике события "OnTimer" заполняем дополнительные свободные поля нужными значениями из текущей записи (ежели таковая есть или NULL, ежели нету). Таким образом, запрос к серверу будет происходить не чаще интервала таймера. ----------- Доп. усовершенствование: В событии OnCurrent устанавливаем глобальную переменную модуля в TRUE. В обработчике события "OnTimer" сначала проверяем если TRUE - сбрасываем и ничего не делаем. если FALSE - заполняем дополнительные свободные поля нужными значениями из текущей записи (ежели таковая есть или NULL, ежели нету). Таким образом обновление субформ пройдет только через интервал таймера после успокоения пользователя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2004, 08:25:11 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
вообще то обычно загружаются данные всех записей и при прокрутке подгрузка не совершается перерисовкой можно управлять задавая эхо или паинтинг например: me.painting = false выключает перерисовку формы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2004, 09:58:11 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
>вообще то обычно загружаются данные всех записей и при прокрутке подгрузка не совершается Совершается на субформах, если они связаны с основной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2004, 10:24:55 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
понял суть. я использую немножко другой тип интерфейса: 1 ленточная форма для выбора записи с которой работать в основной - выбираем нужную запись нажимаем кнопку открывается : 2 главная форма в которую выбирается только одна запись выбранная из предыдущей при открытии. 3 подчиненная форма вложенная в главную в этом случае крути не крути колесо - в главной форме одна запись нужно другую - закрывай форму ищи в ленточной нужную и вперед думаю что многие так делают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2004, 10:52:06 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
2 АлексейК Именно так. Такой принцип используется в модуле для меню (ну практически). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2004, 10:55:21 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
АлексейКпонял суть. я использую немножко другой тип интерфейса: 1 ленточная форма для выбора записи с которой работать в основной - выбираем нужную запись нажимаем кнопку открывается : 2 главная форма в которую выбирается только одна запись выбранная из предыдущей при открытии. 3 подчиненная форма вложенная в главную в этом случае крути не крути колесо - в главной форме одна запись нужно другую - закрывай форму ищи в ленточной нужную и вперед думаю что многие так делают. Точно так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2004, 11:39:04 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
Ну вот опять разработчики дают _дельные_ мысли но с другой стороны юзабилити. Не как _удобнее_ а как надежнее/проще :) Обрисую как у меня это выглядит: Форма "Работник", вверху список номеров работников и ФИО, в центре фотография и данные, внизу первая вложенная форма с историей наработки, справа расширенное примечание (лог примечаний как отдельная таблица). Соответственно, когда я ввожу номер, хочется сразу видеть и его наработку и примечания (там бывают важные вещи, типа "Не пускать на ХХХ объект, униформа выдана и т.д."). P.S. Картинку вставить не знаю как, поэтому просто прикладываю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2004, 13:14:30 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
АлексейКпонял суть. я использую немножко другой тип интерфейса: 1 ленточная форма для выбора записи с которой работать в основной - выбираем нужную запись нажимаем кнопку открывается : 2 главная форма в которую выбирается только одна запись выбранная из предыдущей при открытии. 3 подчиненная форма вложенная в главную в этом случае крути не крути колесо - в главной форме одна запись нужно другую - закрывай форму ищи в ленточной нужную и вперед думаю что многие так делают. Тут как всегда дилемма, между удобством для пользователя - не жать лишние кнопки и удобством для разработчика - не париться. Конкретное решение... хм? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2004, 15:52:38 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
aleks2 АлексейКпонял суть. я использую немножко другой тип интерфейса: 1 ленточная форма для выбора записи с которой работать в основной - выбираем нужную запись нажимаем кнопку открывается : 2 главная форма в которую выбирается только одна запись выбранная из предыдущей при открытии. 3 подчиненная форма вложенная в главную в этом случае крути не крути колесо - в главной форме одна запись нужно другую - закрывай форму ищи в ленточной нужную и вперед думаю что многие так делают. Тут как всегда дилемма, между удобством для пользователя - не жать лишние кнопки и удобством для разработчика - не париться. Конкретное решение... хм? Так это и есть конкретное решение. 1 форма - список для поиска (только самое важное, никто не ищет человека в списке работников по дате рождения его любимой собачки), 2 форма - детали, где есть все, вплоть до размера обуви (при необходимости, например, если инф-я по военнослужащим) - но только по одному человеку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2004, 16:33:03 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
Посмотри всё-таки связанные формы. Хотя бы с помощью мастера форм. Там есть возможность передвигаться по главной форме как с открытой связанной, так и без неё. Сравни ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2004, 16:40:56 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
Andres 1[ Так это и есть конкретное решение. 1 форма - список для поиска (только самое важное, никто не ищет человека в списке работников по дате рождения его любимой собачки), 2 форма - детали, где есть все, вплоть до размера обуви (при необходимости, например, если инф-я по военнослужащим) - но только по одному человеку. Дык тебе и объясняют: пользователям лениво жать лишний раз на кнопку и я их понимаю. Ты попробуй сам так поработать - взвоешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2004, 08:33:58 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
Конечно, это уже вопрос стиля программиста. Либо ему малосущественно кто такие пользователи и что они хотят от твоего шедевра. Либо он сидит с ними в соседней комнате, делает базу, согласовывает ее с боссом, который, что печально, сам является пользователем базы и, что _самое_ печальное, имеет представление как Access работает и _что_ он может. Кроме того, все хотят предложить "как лучше", при этом через три дня после того как "фича" появляется, ей реально пользуются один раз в месяц! Тут меня наш менеджер спросил давеча: "А, что" говорит "шеф все время к тебе какие-то претензии имеет, постоянно какие-то вопросы для улаживания и все такое?" На что я оветил, что если ты можешь повлиять на продукт высказав свои пожелания и, затем, увидев их в работе, высказать новое, то это будет продолжаться до бесконечности несмотря на необходимость и полезность таких улучшательств. А вот если, как, скажем, в калькуляторе чего-то нет, то этого просто _нет_ и нужно _пользоваться_ тем, что есть, а не заниматься диалектикой. Думаю, счастливы те программеры, которые кодят исключительно движки или простейшие формы/отчеты, потому что эта пустячная возня с "хочу/удобно" урывает слишком много времени. ------------------------------------- Блин, столько "диалектики" у меня и ни одного дельного предложения... Хотя, пожалуйста: Есть идея безхитростно задерживать выполнение запроса для формы и подчиненных. Выглядеть будет примерно так: при загрузке получаем список работников, листаем форму как угодно. Есть таймер, скажем, на 200 мс, который обнуляется с переходом на запись, т.е. если таймер достиг своего значения выполняем запрос и загружаем данные по работнику. Таким образом, достигается эффект нормальной работы с формой, если клацать по кнопкам записей, и эффект экономии ресурсов при скроллинге. P.S. Народ, а что лучше делать, изменять программно recordset или работать с фильтром? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2004, 18:01:03 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
Ну если вариант "только так и никак иначе", то: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Поле с фотографией закомментировано потому, что я не пробовал, лень :), но должно работать. Подчиненные формы работают ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2004, 21:27:47 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
Гм, тривиальное усовершенствование: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. не мелькает, пока пользователь не угомонился. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2004, 09:07:45 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
Большушее спасибо Andres 1 , aleks2 и kk@comson.ru ! Задержка выполнения инструкции для подчиненных форм работает великолепно. Осталось только отшлифовать, собственно, сами инструкции и немного подумать над тем, что мы от такого решения теряем (если вообще что-то осложняется, с первого взгляда ничего не всплывает). Метод от Andres 1 внедряется легче, чем решение от kk@comson.ru (он предложил систему таймера с обновлением RecordSource по достижении секундомером нужной задержки). А по сути, получается, одно и тоже. Даже странно, что сама MS не догадалась такую фичу сделать как стандартную опцию. Имхо, довольно удобно. Например, у меня производительность скроллинга клиентской формы возрасла раза в четыре :) That's all folks... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2004, 16:15:19 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
В ответ на собственный вопрос в "P.S." сообщения от 4 сен 04, 18:01 (просто в форуме ответ так и не нашел, а тут почти случайно в Help'е наткнулся). Напомню вопрос: dknyP.S. Народ, а что лучше делать, изменять программно recordset или работать с фильтром? Код: plaintext 1. 2. 3. 4. 5. ...и чуть дальше: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Хоть это и ощущается экспериментально, но все равно официальное подтверждение приятнее :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2004, 13:34:01 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
Теперь у меня опять вопрос: здесь указаны два метода: SourceObject и RecordSource. Есть ли разница в их применении? Особенно в моем случае, т.е. для подчиненных форм. Дело в том, что я пропробовал и так и эдак, оба способа работают, но не совсем понятно какой лучше использовать. Я пока склонен думать, что SourceObject это тоже что и RecordSource, но для любых объектов, т.е. и для полей и для OLE. А вообще, конечный вариант сделующий (для текущей записи): Код: plaintext 1. 2. 3. 4. 5. 6. 7. для таймера: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Т.е. для текущей формы всегда ставим RecordSource как "" (а так вообще можно, или лучше как-то специально указать нулевой рекордсет?) до тех пор, пока не сработает таймер и не покажутся формы. Главная проблема этого способа, это реагирование подчиненных форм на изменение рекордсета по отображению через таймер (у меня там прописано пару простеньких функций). Причем, реагировать на события нужно именно после конечного отображения. Я так понимаю, что когда рекордсет меняется программно, то событие не обрабатывается. Есть ли способ выполнить код подчиненной формы из главной? P.S. Thanks to ALL! Special thanks to Andres 1 , aleks2 и kk@comson.ru!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2004, 14:18:36 |
|
||
|
Как притормозить загрузку данных формы при скроллинге?
|
|||
|---|---|---|---|
|
#18+
SourceObject и RecordSource это две большие разницы: SourceObject=NOTHING => вообще нет субформы RecordSource ="" => есть субформа с пустым рекордсетом. >>Причем, реагировать на события нужно именно после конечного отображения. Я так понимаю, что когда рекордсет меняется программно, то событие не обрабатывается. На программные изменения не вызывается НИКАКИХ (почти никаких - это оговорка на всякий случай) событий. >>Есть ли способ выполнить код подчиненной формы из главной? Surely в модуле подчиненной формы Form_Subform: public sub GoGoGo() ... в модуле основной формы Form_Mainform: ... Form_Subform.GoGoGo или Me.SubformEmbeddedObject.Form.GoGoGo ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2004, 05:58:15 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32678552&tid=1671487]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
94ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 407ms |

| 0 / 0 |
