Страница 1 из 2
Обновление Browse на компьютерах по сети
Добавлено: 06 Ноябрь 2012, 23:13
muskin
Приветствую всех!
Clarion 6.3(ABC)
Впервые связался с сетевым вариантом программы. Все сделал по науке.
Есть рабочая группа из пяти компьютеров (3-XP и 2-W7, у всех свои серые IP-адреса).
Есть многопользовательская программа - на каждом компьютере стоит одинаковый EXE-шник и на одном расположены все БД.
Все работает быстро и отлично, но для меня осталась одна нерешенная проблема.
Есть, например, окно с двумя List-ами, связанными через Relation и тут же вопрос -> как при изменении или добавлении записи
на одном из компов в данном окне автоматически обновлялись бы записи в аналогичном окне на других компах?
Вариант через таймер и BRW--.ResetFromFile срабатывает, но это влечет за собой постоянное подергивание курсора,
постоянное срабатывание BRW--.TakeScroll(Event:ScrollTop) (хотя нужно, чтобы он срабатывал только один раз при переходе
ведомой записи на новую позицию) и другие последствия.
У кого есть опыт - поделитесь.
Re: Обновление Browse на компьютерах по сети
Добавлено: 07 Ноябрь 2012, 9:34
kreator
Мой опыт. Если несколько человек активно работают в одном окне (броузе), изменения они видят автоматически (ABC заново формирует очереди после операций добавления, изменения, удаления). Если какой-то человек ушел с этого экрана, то по возвращении туда окно автоматически должно обновиться (есть свойства - AutoRefresh, AutoDisplay, он же prop:AUTO). Нет, наверно, смысла принудительно обновлять броуз (или окно), если пользователю это не не надо. А вот если всё-таки нужно принудительно обновить экран (ну, например, сообщить кладовщику, что некто забронировал товар и его уже оплатил и через три минуты подойдёт за ним, давай быстренько метнись собирать заказ), тогда без таймера не обойтись, но там надо вызвать метод ResetQueue.
Re: Обновление Browse на компьютерах по сети
Добавлено: 07 Ноябрь 2012, 12:11
Алексей- Софт-Центр
Добрый день!
Я бы использовал Timer и
brw1.resetfrombuffer()
а не
brw1.resetfromfile()
Алексей
Re: Обновление Browse на компьютерах по сети
Добавлено: 19 Ноябрь 2012, 23:03
musкin
kreator писал(а):Мой опыт. Если несколько человек активно работают в одном окне (броузе), изменения они видят автоматически (ABC заново формирует очереди после операций добавления, изменения, удаления). Если какой-то человек ушел с этого экрана, то по возвращении туда окно автоматически должно обновиться (есть свойства - AutoRefresh, AutoDisplay, он же prop:AUTO). Нет, наверно, смысла принудительно обновлять броуз (или окно), если пользователю это не не надо. А вот если всё-таки нужно принудительно обновить экран (ну, например, сообщить кладовщику, что некто забронировал товар и его уже оплатил и через три минуты подойдёт за ним, давай быстренько метнись собирать заказ), тогда без таймера не обойтись, но там надо вызвать метод ResetQueue.
Нет, не видят. Согласен, что без таймера и алгоритма обновления не обойтись. Но тут возникла другая проблемка..., при использовании реальной базы данных {Base(1500 записей) -> Relation -> Second (около 10000 записей в масштабе одной таблицы)} начинают возникать тормоза, и приличные (примерно 12 сек. при загрузке обоих List-ов на каждом из компов). Дальше идут еще большие тормоза, когда на одном из компов открывается Form-а для редактирования конкретной записи -> остальные компы просто ждут окончания редактирования. В проекте и везде для открытия файлов использую Share, все формулы удалил. Метод загрузки таблиц -> File.
Рабочая группа из 5 компов (приличной начинки) -> у всех свои уникальные серые адреса и одно имя группы, необходимые Службы Microsoft для работы в сети включены.
Где я что-то не предусмотрел?
Re: Обновление Browse на компьютерах по сети
Добавлено: 20 Ноябрь 2012, 11:35
Алексей- Софт-Центр
Добрый день!
Тормоза от
1.размера записи
2. наличия ключей
3. Типа фильтрации файлов
4. количества запсей.
Я , в свое время, когда возникла такая проблема - долго пытался оптимизировать программу и базу на TPS,
пока не перешел на MySql.
Получил на несколько порядков быстрее работающую программу.
(может я чего-то не так делал в TPS среде, может, как Вы писали - чего-то не учел

)
ЗЫ. А оптимизацию начинал с ревизии сети, перевода ее со 100 мб на 1гб, и .т.д.
Кстати -при brw1.resetfrombuffer() - моргания не будет
Алексей
Re: Обновление Browse на компьютерах по сети
Добавлено: 20 Ноябрь 2012, 14:08
IKSoft
Я делал так:
- MSSQL
- не шаблоны (хотя можно и их)
- в каждой таблице есть LastChanged datetime поле
- есть фильтр записей в виде строки (from ... where ...)
- есть временной штамп, когда последний раз обновляли записи LastFefreshDateTime
- есть сохраненная процедура sp (можно и без нее)
- по событию (timer, gainfocus, вход в изменение записи)
вызывается эта sp с параметром строка фильтр и LastFefreshDateTime
- эта sp возвращает, надо ли перечитывать записи и список (ID) этих записей
типа (select ID from ... Where LastChanged > LastFefreshDateTime)
дальше как хотите - либо все записи пересчитывать, либо только измененные
Возможны и другие варианты
Re: Обновление Browse на компьютерах по сети
Добавлено: 20 Ноябрь 2012, 20:17
morkovin
В NetTalk (от CapeSoft) этот функционал заложен изначально:
NetRefresh - For adding the NetRefresh functionality to your application. NetRefresh allows your browses to automatically refresh when someone else (on another machine) updates dat
Re: Обновление Browse на компьютерах по сети
Добавлено: 20 Ноябрь 2012, 22:48
musкin
Спасибо Всем за рекомендации! Чувствую, что без MySQL не обойтись. Но я этого зверя вижу в первый раз, дайте ссылку как его присовокупить к моему приложению.
Про этот MySQL слышал много раз -> может кто-нибудь прочитает небольшую лекцию, как его установить и настроить для таких придурков, коим являюсь я?
Re: Обновление Browse на компьютерах по сети
Добавлено: 21 Ноябрь 2012, 11:09
Алексей- Софт-Центр
Добрый день!
Это для скачки дистрибутивов:
http://mysql.ru/
Это для администрирования MySql
http://www.devart.com/ru/dbforge/mysql/ ... nload.html
Остальное : драйвер ODBC - есть здесь
Если что - стучись- поможем.
Алексей
Re: Обновление Browse на компьютерах по сети
Добавлено: 21 Ноябрь 2012, 23:00
musкin
Алексей!
Спасибо за ссылки. Вопрос только один -> а App и словарь нужно будет переделывать?
Re: Обновление Browse на компьютерах по сети
Добавлено: 22 Ноябрь 2012, 12:37
Алексей- Софт-Центр
Добрый день!
Да.
1.В словаре ставим ODBC вместо TPS. Ну и еще проверяем на 1 нормальную форму таблицы (желательно). MySql - построже с ключами, чем TPS.
2. Из соваря генерим программки конвертации из tps в MySql
3. Ну и переписываем (немного

модернизируем) APP , для использование прелестей фильтрации MySql.
Алексей
Re: Обновление Browse на компьютерах по сети
Добавлено: 24 Ноябрь 2012, 1:09
musкin
Алексей- Софт-Центр писал(а):Добрый день!
Да.
1.В словаре ставим ODBC вместо TPS. Ну и еще проверяем на 1 нормальную форму таблицы (желательно). MySql - построже с ключами, чем TPS.
2. Из соваря генерим программки конвертации из tps в MySql
3. Ну и переписываем (немного

модернизируем) APP , для использование прелестей фильтрации MySql.
Алексей
Спасибо за ответ.
Вставляю ODBC вместо TPS -> и одни ругательства.
В моем словаре, кроме драйверов TPS, присутствуют драйвера FoxPro и Text-a. А с ними как быть?
Да и 10-ти мегабайтовое приложение (1 год затрат) как-то переделывать стремно и не хочется.
Локалка из 5-ти компов -> неужели без службы терминалов на XP (типа патча TS-Free) не обойтись?
Re: Обновление Browse на компьютерах по сети
Добавлено: 24 Ноябрь 2012, 14:33
Алексей- Софт-Центр
добрый день!
1. Одни ругательства где- в словаре? Если там, то надо заполнить правильно значения
2. С другими драйверами- они у вас используются, вероятнее всего, для подкачки каких- то данных из вне.
. Так что оставьте как есть.
Если не клиент-серверная обработка, то тогда пытайтесь оптимизировать свои броузы.
Возможно, придется переписывать большее количество кода, чем при переходе на sql(клиент-сервер)
Если возникнут сложности - пишите или здесь , или
info@soft-center.ru
Алексей
Re: Обновление Browse на компьютерах по сети
Добавлено: 27 Ноябрь 2012, 0:20
musкin
Алексей- Софт-Центр писал(а):добрый день!
1. Одни ругательства где- в словаре? Если там, то надо заполнить правильно значения
2. С другими драйверами- они у вас используются, вероятнее всего, для подкачки каких- то данных из вне.
. Так что оставьте как есть.
Если не клиент-серверная обработка, то тогда пытайтесь оптимизировать свои броузы.
Возможно, придется переписывать большее количество кода, чем при переходе на sql(клиент-сервер)
Если возникнут сложности - пишите или здесь , или
info@soft-center.ru
Алексей
Алексей, спасибо. Получается, что эти хваленные *.tps в сети не такие крутые, как в монопольном режиме?
А если не связыватьть с SQL, куда нужно смотреть вперед?
Re: Обновление Browse на компьютерах по сети
Добавлено: 27 Ноябрь 2012, 9:56
Shur
Не надо делать скоропалительных выводов.
IKSoft вам предлагает совершенно нормальную вещь -- временной штамп LastFefreshDateTime (только я бы назвал LastUpdateDateTime). Сделайте его в отдельной табличке, обновление которой вы, кстати, можете повесить на клиентский триггер (если у вас версия Клариона позволяет их создавать).
Далее таймером смотреть его изменение (считывается только одна запись), и если он изменился, то тогда делайте рефреш броуза.
А то что tps быстрее или медленнее sql, то многое зависит от того, что и как вы делаете, хотя бы: тащите ли вы все данные из таблицы на клиента, а потом их фильтруете или же сразу в sql-запросе задаёте фильтр и таким образом передаёте обработку на sql-сервер и т.д.