|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
Добрый день. Постараюсь объяснить что хочу сделать )) есть ленточная форма с полями и условным форматированием. каждые 5 секунд на ней нужно обновлять данные. делаю это через таймер с Me.Recalc чтобы минимизировать мерцание. но при этом способе обновляються значения полей, но не появляются и не удаляться поля при таковом изменении в связанном запросе. естественно чтобы полностью обновить поля нужно сделать Me.Requery. но постоянно это делать не могу - ибо мерцает знатно. никакие способы избавится от мерцания не помогают. вопрос. как можно узнать изменилось ли поля в запросе (добавились, удалились) по сравнению с текущими загруженными полями в форме. в голову пришло только сравнивать количество - но не совсем подходит, т.к. если одновременно удалиться и добавиться поле - то условие не сработает. Спасибо. Надеюсь понято объяснил. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2021, 14:44 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
Nezar, Если иметь в каждой таблице четыре аудирующих поля ДатаСоздания КтоСоздал ДатаИзменения КтоИзменил, то решается легко. Но любая операция с таблицей должна железно обновлять поля Изменение а первая вставка - создание. Я решал за счет талиц в скл сервере триггерами. Триггеры формировались автоматически для всех прикладных таблиц. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2021, 16:48 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
Nezar естественно чтобы полностью обновить поля нужно сделать Me.Requery. но постоянно это делать не могу - ибо мерцает знатно. никакие способы избавится от мерцания не помогают. может так не будет раздражать: вместо Me.Requery сделать Me.ПодчФорма.FORM.Requery Если всё равно будет раздражать, то тогда попробуй так: Me.ПодчФорма.Visible = False Me.ПодчФорма.FORM.Requery Me.ПодчФорма.Visible = True ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2021, 20:31 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
Информация к размышлению: А зачем обновлять форму каждые 5 секунд,если данные в ТАБЛИЦЕ не изменялись 20 минут??? А что юзер имеет право добавить/удалить поле таблицы??? Что-то не так в Датском королевстве(Шекспир.Гамлет)Логике работы БД ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2021, 21:59 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
vmag, подчиненной формы нет, все на основной форме. а делать в подчиненной, а потом включать - выключать ее видимость... попробую. но боюсь будет еще хуже в плане мигания. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2021, 22:18 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
sdku, перед обновлением формы запускается скрипт на обновление данных в таблице. т.е. каждые 5 секунд будут новые данные в полях, но не новые записи. потом запрос некоторые записи исключает по критерию. юзер может только смотреть. если просто описать что происходит есть список пользователей и каждые 5 секунд проверяется статус пользователя - в сети или нет и другая инфа. потом в запросе отсекаются те, что не в сети в форме обновляется инфа по пользователям. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2021, 22:20 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
Nezar, Может, попробовать Refresh формы делать? Обычно без мигания-мерцания проходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2021, 00:19 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
__Michelle, пробовал - не помогает. та и данные не обновляет нормально также пробовал в разных комбинациях: LockWindowUpdate Application.hWndAccessApp Me.Painting = False Application.Echo False из наблюдений - если построково в коде проходиться то помогало только Me.Painting = False, даже если зажать Ф8 и пролетать весь код - форма не мигает. но если просто код запускать без остановок ( не знаю как это правильно назвать) - то не помогает. пробовал задержки ставить -тоже самое. поэтому остановился на варианте с обновлением записей. подергивает - но иногда. сейчас сделал путем сравнения количества строк - и если разное то делаю Requery. но вариант не идеален ( ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2021, 01:19 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
Nezar сейчас сделал путем сравнения количества строк - и если разное то делаю Requery. но вариант не идеален ( ну тогда проверку делай не на форме а на запросе и если не бьет, то только тогда обновляй форму... - не представляю себе ленточную форму без количества или сумм... - в примечании формы делаешь итоги по количеству или суммам - делаешь запрос тупо с одним полем Count() или Sum([Поле])... Идеально Sum(Количество*Цена) - по таймеру вытаскиваешь итоги из запроса и если они не бьют с итогами в примечании формы - только в этом случае обновляешь форму... Если все таки итоги не по чем делать (в полях один текст), выбери самое короткое поле и вычисляй самым примитивным алгоритмом контрольную сумму этого столбца, и если она не бьет с предыдущей, то обновляй форму... Вообще-то, что-то тут не так... за 5 секунд даже не поймешь изменилось что то на форме или нет... Ну моргнула, только прочитал первую строку - опять моргнуло... Хоть бы намекнул зачем нужна эта цветомузыка, может и предложения будут другими... Может нужно было идти налево, а ты пошел направо и теперь вытаскивай тебя из болота... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2021, 02:05 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
vmag Хоть бы намекнул зачем нужна эта цветомузыка, может и предложения будут другими... Может нужно было идти налево, а ты пошел направо и теперь вытаскивай тебя из болота... Сорри, ток щас заметил... Nezar если просто описать что происходит есть список пользователей и каждые 5 секунд проверяется статус пользователя - в сети или нет и другая инфа. потом в запросе отсекаются те, что не в сети в форме обновляется инфа по пользователям. - при старте формы вычисляешь и хранишь контрольную сумму по столбцу Логин в переменной... - каждые 5 сек делаешь тоже самое только на схожем запросе с источником данных формы... - если сумма не поменялась, идешь на следующие 5 сек - если сумма поменялась, запоминаешь новую сумму и обновляешь форму Можешь вообще наделать дырок (полями) в свободной форме и сам туда пиши действующих юзеров из запроса вообще ничего моргать не будет (ну типа на форме самопальная таблица из отдельных полей, можно даже скроллинг свой сделать) а кстати и обычный список то тоже никто не отменял, он не шибко моргает и можно выделить несколько строк если что хоть и одним цветом... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2021, 02:48 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
vmag, наделать дырок думал - но т.к. количество разное - много головняка. да и с размерами формы играться прийдеться. сейчас все работает с Countom - но как я уже писал - вариант не идеален в рамках 5ти секунд может один человек зайти и один выйти - тогда количество не поменяется и форма не поймет что обновиться нужно. а вот с суммой - вариант. можно просуммировать коды пользователей и сравнивать эту сумму и количество пользователей. спасибо за подсказку! ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2021, 12:56 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
Nezar а вот с суммой - вариант. можно просуммировать коды пользователей и сравнивать эту сумму и количество пользователей. это хоть и существенно уменьшит вероятность, но полной гарантии не даст, например, вышли из сеанса юзеры с кодами 45 и 55, а зашли с кодами 28 и 72, количество не изменилось, сумма тоже -+ 100 я имел ввиду контрольную ВЗВЕШЕННУЮ сумму текстовой последовательности, например: Действующие логины: (Иванов + Петров + Сидоров+...) дадут ВЗВЕШЕННУЮ сумму к примеру АF50E Если в этом ряду изменить хотя бы один символ, то соответственно измениться и сумма текстового ряда... Хотя для вашего случая подойдет и обычная сумма всех id юзеров, в сочетании с количеством, вероятность моего примера с +- 100 не очень большая... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2021, 13:17 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
vmag, я тоже сначала подумал что может быть такое что зайдет два человека и сумма тоже совпадет. но в моей ситуации пользователей всего до 20 штук. и вероятность конечно есть, но уж очень маленькая. но все же стало интересно, а как получить эту взвешенную сумму из имен? есть какаято функция? или просто коды символов сложить? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2021, 15:24 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
Nezar, Посмотри тут , по идее собираешь в определенной последовательности (например по алфавиту) все имена в одну строку и по ссылке последняя процедура... но... пардон - если всего 20 юзеров, то зачем козе баян, собирай имена в одну строку и тупо сравнивай строки... текущая и та что получится через 5 сек... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2021, 15:45 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
vmag я имел ввиду контрольную ВЗВЕШЕННУЮ сумму текстовой последовательности, например: Действующие логины: (Иванов + Петров + Сидоров+...) дадут ВЗВЕШЕННУЮ сумму к примеру АF50E Можете пояснить тупому, что является слагаемыми в этой сумме? Сумма кодов ASCII? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2021, 15:57 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
ИВП Сумма кодов ASCII ну естественно это коды символов алгоритмов есть бесконечное множество, не плохими считаются те у которых совпадения случаются не более 1 на 65 000 последовательностей ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2021, 16:08 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
ИВП, Исключительно по Вашей просьбе и если не сильно морщить лоб, то для вышеописанного случая вполне прокатит что-то типа такого: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2021, 18:05 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
vmag, Спасибо, примерно так я и представлял. Значит, не совсем тупой))) Не совсем понятно зачем делать среднее, почему не просто сумму брать? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2021, 16:27 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
ИВП Не совсем понятно зачем делать среднее, почему не просто сумму брать? Да в этом случае достаточно сравнивать две строки без всяких сумм и даже не логины, а проще ID юзеров, они по любому короче... например было: 1,2,3,4,5 Стало: 1,3,4,5,6 Уже и так видно что "1,2,3,4,5" <> "1,3,4,5,6" (вышел юзер 2 и зашел юзер 6) и нужно обновлять форму... По существу вопроса: 1. Взвешенные контрольные суммы для больших строк (файлов), предполагают устранение переполнения самих себя, дабы избежать больших величин самих этих сумм и вылета по переполнению.... 2. Если просто суммировать, то строки 123 и 321 дадут одну и ту же сумму , а если при суммировании с каждым символом делать разнообразный шахер/махер (делитель i там всегда другой) и суммировать именно этот шахер/махер, то суммы уже совпадут с меньшей вероятностью... 3. Приблизительную вероятность совпадения сумм на разных последовательностях можно приблизительно прикинуть по сумме одного символа... В данном примитивном примере сумма одного символа состоит из 3 десятичных цифр, например 204, это говорит о том вероятность повторения суммы = 10*10*10 = 1000, для некоторых задач это очень плохо на само деле. А вот если сумма одного символа имеет вид AF21, то это говорит о том, что результат суммы состоит из 16-ричных цифр и вероятность повторения суммы для разных последовательностей будет 16 в 4-й степени равная 65 536 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2021, 16:58 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
vmag 2. ...если при суммировании с каждым символом делать разнообразный шахер/махер ( делитель i там всегда другой ) и суммировать именно этот шахер/махер, то суммы уже совпадут с меньшей вероятностью... Спасибо за подробное разъяснение. Выделил самое убедительное на мой взгляд, IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2021, 21:04 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
ИВП Выделил самое убедительное на мой взгляд так и есть, "удельный вес" символа в общей сумме зависит от местоположения символа в строке. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2021, 21:44 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
Nezar если просто описать что происходит есть список пользователей и каждые 5 секунд проверяется статус пользователя - в сети или нет и другая инфа. потом в запросе отсекаются те, что не в сети в форме обновляется инфа по пользователям. Если Вам надо именно это-создаете в таблице "пользователи"(или какой-то временной)логическое поле Всети/неВсети которое обновляется при входе/выходе(ведь при этом происходит какое-либо событие,которое можно обработать) пользователя + обновление(обращение к источнику где еще и отбираете по логическому полю 0 или -1)) формы на этой таблице. Фсе... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2021, 12:26 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
sdku "Стою на асфальте я в лыжи обутый..." В данном случае речь скорее всего о стороннем наблюдателе за пользователями, который к их входу/выходу не имеет никакого отношения, только созерцает кто сейчас онлайн... Речь идет только об обновлении картинки с активными пользователями каждые 5 сек и о том чтоб этот интервал увеличить за счет избавления от лишних телодвижений... Все события по входу и выходу происходят на стороне пользователей, а не на стороне наблюдателя... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2021, 12:41 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
vmag, autoExec? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2021, 18:30 |
|
Узнать изменились ли значения в запросе по сравнению с полями в форме
|
|||
---|---|---|---|
#18+
vmag, Совершенно верно. В сети- не в сети - не основная инфа - при изменении ее нужно полностью обновлять форму, но это происходит не часто. Каждые 5 секунд обновляються другие поля с некими данными пользователей которые уже в сети. и эти поля привязаны к условному фоматированию. на самом деле события и изменения происходят даже чаще чем раз в секунду. просто для себя выбрал что 5ть сек. не критично. больше задержку конечно можно делать, но не желательно, да и не даст ничего в плане уменьшения моргания. даже раз в 30 сек - лично меня отвлекает. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2021, 22:18 |
|
|
start [/forum/topic.php?fid=45&msg=40115724&tid=1609538]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
158ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
others: | 251ms |
total: | 524ms |
0 / 0 |