Обновление Browse на компьютерах по сети
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Обновление Browse на компьютерах по сети
Приветствую всех!
Clarion 6.3(ABC)
Впервые связался с сетевым вариантом программы. Все сделал по науке.
Есть рабочая группа из пяти компьютеров (3-XP и 2-W7, у всех свои серые IP-адреса).
Есть многопользовательская программа - на каждом компьютере стоит одинаковый EXE-шник и на одном расположены все БД.
Все работает быстро и отлично, но для меня осталась одна нерешенная проблема.
Есть, например, окно с двумя List-ами, связанными через Relation и тут же вопрос -> как при изменении или добавлении записи
на одном из компов в данном окне автоматически обновлялись бы записи в аналогичном окне на других компах?
Вариант через таймер и BRW--.ResetFromFile срабатывает, но это влечет за собой постоянное подергивание курсора,
постоянное срабатывание BRW--.TakeScroll(Event:ScrollTop) (хотя нужно, чтобы он срабатывал только один раз при переходе
ведомой записи на новую позицию) и другие последствия.
У кого есть опыт - поделитесь.
Clarion 6.3(ABC)
Впервые связался с сетевым вариантом программы. Все сделал по науке.
Есть рабочая группа из пяти компьютеров (3-XP и 2-W7, у всех свои серые IP-адреса).
Есть многопользовательская программа - на каждом компьютере стоит одинаковый EXE-шник и на одном расположены все БД.
Все работает быстро и отлично, но для меня осталась одна нерешенная проблема.
Есть, например, окно с двумя List-ами, связанными через Relation и тут же вопрос -> как при изменении или добавлении записи
на одном из компов в данном окне автоматически обновлялись бы записи в аналогичном окне на других компах?
Вариант через таймер и BRW--.ResetFromFile срабатывает, но это влечет за собой постоянное подергивание курсора,
постоянное срабатывание BRW--.TakeScroll(Event:ScrollTop) (хотя нужно, чтобы он срабатывал только один раз при переходе
ведомой записи на новую позицию) и другие последствия.
У кого есть опыт - поделитесь.
Всем пралитарское Спасибо и 'Желаю, чтобы ВСЕ !!!'
-
- ✯ Ветеран ✯
- Сообщения: 5037
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 23 раза
Re: Обновление Browse на компьютерах по сети
Мой опыт. Если несколько человек активно работают в одном окне (броузе), изменения они видят автоматически (ABC заново формирует очереди после операций добавления, изменения, удаления). Если какой-то человек ушел с этого экрана, то по возвращении туда окно автоматически должно обновиться (есть свойства - AutoRefresh, AutoDisplay, он же prop:AUTO). Нет, наверно, смысла принудительно обновлять броуз (или окно), если пользователю это не не надо. А вот если всё-таки нужно принудительно обновить экран (ну, например, сообщить кладовщику, что некто забронировал товар и его уже оплатил и через три минуты подойдёт за ним, давай быстренько метнись собирать заказ), тогда без таймера не обойтись, но там надо вызвать метод ResetQueue.
We are hard at work… for you.
-
- Ветеран
- Сообщения: 390
- Зарегистрирован: 26 Август 2009, 12:41
- Откуда: Moscow
- Контактная информация:
Re: Обновление Browse на компьютерах по сети
Добрый день!
Я бы использовал Timer и
brw1.resetfrombuffer()
а не
brw1.resetfromfile()
Алексей
Я бы использовал Timer и
brw1.resetfrombuffer()
а не
brw1.resetfromfile()
Алексей
Re: Обновление Browse на компьютерах по сети
Нет, не видят. Согласен, что без таймера и алгоритма обновления не обойтись. Но тут возникла другая проблемка..., при использовании реальной базы данных {Base(1500 записей) -> Relation -> Second (около 10000 записей в масштабе одной таблицы)} начинают возникать тормоза, и приличные (примерно 12 сек. при загрузке обоих List-ов на каждом из компов). Дальше идут еще большие тормоза, когда на одном из компов открывается Form-а для редактирования конкретной записи -> остальные компы просто ждут окончания редактирования. В проекте и везде для открытия файлов использую Share, все формулы удалил. Метод загрузки таблиц -> File.kreator писал(а):Мой опыт. Если несколько человек активно работают в одном окне (броузе), изменения они видят автоматически (ABC заново формирует очереди после операций добавления, изменения, удаления). Если какой-то человек ушел с этого экрана, то по возвращении туда окно автоматически должно обновиться (есть свойства - AutoRefresh, AutoDisplay, он же prop:AUTO). Нет, наверно, смысла принудительно обновлять броуз (или окно), если пользователю это не не надо. А вот если всё-таки нужно принудительно обновить экран (ну, например, сообщить кладовщику, что некто забронировал товар и его уже оплатил и через три минуты подойдёт за ним, давай быстренько метнись собирать заказ), тогда без таймера не обойтись, но там надо вызвать метод ResetQueue.
Рабочая группа из 5 компов (приличной начинки) -> у всех свои уникальные серые адреса и одно имя группы, необходимые Службы Microsoft для работы в сети включены.
Где я что-то не предусмотрел?
-
- Ветеран
- Сообщения: 390
- Зарегистрирован: 26 Август 2009, 12:41
- Откуда: Moscow
- Контактная информация:
Re: Обновление Browse на компьютерах по сети
Добрый день!
Тормоза от
1.размера записи
2. наличия ключей
3. Типа фильтрации файлов
4. количества запсей.
Я , в свое время, когда возникла такая проблема - долго пытался оптимизировать программу и базу на TPS,
пока не перешел на MySql.
Получил на несколько порядков быстрее работающую программу.
(может я чего-то не так делал в TPS среде, может, как Вы писали - чего-то не учел )
ЗЫ. А оптимизацию начинал с ревизии сети, перевода ее со 100 мб на 1гб, и .т.д.
Кстати -при brw1.resetfrombuffer() - моргания не будет
Алексей
Тормоза от
1.размера записи
2. наличия ключей
3. Типа фильтрации файлов
4. количества запсей.
Я , в свое время, когда возникла такая проблема - долго пытался оптимизировать программу и базу на TPS,
пока не перешел на MySql.
Получил на несколько порядков быстрее работающую программу.
(может я чего-то не так делал в TPS среде, может, как Вы писали - чего-то не учел )
ЗЫ. А оптимизацию начинал с ревизии сети, перевода ее со 100 мб на 1гб, и .т.д.
Кстати -при brw1.resetfrombuffer() - моргания не будет
Алексей
Re: Обновление Browse на компьютерах по сети
Я делал так:
- MSSQL
- не шаблоны (хотя можно и их)
- в каждой таблице есть LastChanged datetime поле
- есть фильтр записей в виде строки (from ... where ...)
- есть временной штамп, когда последний раз обновляли записи LastFefreshDateTime
- есть сохраненная процедура sp (можно и без нее)
- по событию (timer, gainfocus, вход в изменение записи)
вызывается эта sp с параметром строка фильтр и LastFefreshDateTime
- эта sp возвращает, надо ли перечитывать записи и список (ID) этих записей
типа (select ID from ... Where LastChanged > LastFefreshDateTime)
дальше как хотите - либо все записи пересчитывать, либо только измененные
Возможны и другие варианты
- MSSQL
- не шаблоны (хотя можно и их)
- в каждой таблице есть LastChanged datetime поле
- есть фильтр записей в виде строки (from ... where ...)
- есть временной штамп, когда последний раз обновляли записи LastFefreshDateTime
- есть сохраненная процедура sp (можно и без нее)
- по событию (timer, gainfocus, вход в изменение записи)
вызывается эта sp с параметром строка фильтр и LastFefreshDateTime
- эта sp возвращает, надо ли перечитывать записи и список (ID) этих записей
типа (select ID from ... Where LastChanged > LastFefreshDateTime)
дальше как хотите - либо все записи пересчитывать, либо только измененные
Возможны и другие варианты
- morkovin
- Ветеран
- Сообщения: 910
- Зарегистрирован: 20 Июль 2005, 14:53
- Откуда: Volgograd, Russia
- Благодарил (а): 2 раза
- Поблагодарили: 3 раза
- Контактная информация:
Re: Обновление Browse на компьютерах по сети
В 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
NetRefresh - For adding the NetRefresh functionality to your application. NetRefresh allows your browses to automatically refresh when someone else (on another machine) updates dat
WBR, morkovin
Re: Обновление Browse на компьютерах по сети
Спасибо Всем за рекомендации! Чувствую, что без MySQL не обойтись. Но я этого зверя вижу в первый раз, дайте ссылку как его присовокупить к моему приложению.
Про этот MySQL слышал много раз -> может кто-нибудь прочитает небольшую лекцию, как его установить и настроить для таких придурков, коим являюсь я?
Про этот MySQL слышал много раз -> может кто-нибудь прочитает небольшую лекцию, как его установить и настроить для таких придурков, коим являюсь я?
-
- Ветеран
- Сообщения: 390
- Зарегистрирован: 26 Август 2009, 12:41
- Откуда: Moscow
- Контактная информация:
Re: Обновление Browse на компьютерах по сети
Добрый день!
Это для скачки дистрибутивов:
http://mysql.ru/
Это для администрирования MySql
http://www.devart.com/ru/dbforge/mysql/ ... nload.html
Остальное : драйвер ODBC - есть здесь
Если что - стучись- поможем.
Алексей
Это для скачки дистрибутивов:
http://mysql.ru/
Это для администрирования MySql
http://www.devart.com/ru/dbforge/mysql/ ... nload.html
Остальное : драйвер ODBC - есть здесь
Если что - стучись- поможем.
Алексей
Re: Обновление Browse на компьютерах по сети
Алексей!
Спасибо за ссылки. Вопрос только один -> а App и словарь нужно будет переделывать?
Спасибо за ссылки. Вопрос только один -> а App и словарь нужно будет переделывать?
-
- Ветеран
- Сообщения: 390
- Зарегистрирован: 26 Август 2009, 12:41
- Откуда: Moscow
- Контактная информация:
Re: Обновление Browse на компьютерах по сети
Добрый день!
Да.
1.В словаре ставим ODBC вместо TPS. Ну и еще проверяем на 1 нормальную форму таблицы (желательно). MySql - построже с ключами, чем TPS.
2. Из соваря генерим программки конвертации из tps в MySql
3. Ну и переписываем (немного модернизируем) APP , для использование прелестей фильтрации MySql.
Алексей
Да.
1.В словаре ставим ODBC вместо TPS. Ну и еще проверяем на 1 нормальную форму таблицы (желательно). MySql - построже с ключами, чем TPS.
2. Из соваря генерим программки конвертации из tps в MySql
3. Ну и переписываем (немного модернизируем) APP , для использование прелестей фильтрации MySql.
Алексей
Re: Обновление Browse на компьютерах по сети
Спасибо за ответ.Алексей- Софт-Центр писал(а):Добрый день!
Да.
1.В словаре ставим ODBC вместо TPS. Ну и еще проверяем на 1 нормальную форму таблицы (желательно). MySql - построже с ключами, чем TPS.
2. Из соваря генерим программки конвертации из tps в MySql
3. Ну и переписываем (немного модернизируем) APP , для использование прелестей фильтрации MySql.
Алексей
Вставляю ODBC вместо TPS -> и одни ругательства.
В моем словаре, кроме драйверов TPS, присутствуют драйвера FoxPro и Text-a. А с ними как быть?
Да и 10-ти мегабайтовое приложение (1 год затрат) как-то переделывать стремно и не хочется.
Локалка из 5-ти компов -> неужели без службы терминалов на XP (типа патча TS-Free) не обойтись?
-
- Ветеран
- Сообщения: 390
- Зарегистрирован: 26 Август 2009, 12:41
- Откуда: Moscow
- Контактная информация:
Re: Обновление Browse на компьютерах по сети
добрый день!
1. Одни ругательства где- в словаре? Если там, то надо заполнить правильно значения
2. С другими драйверами- они у вас используются, вероятнее всего, для подкачки каких- то данных из вне.
. Так что оставьте как есть.
Если не клиент-серверная обработка, то тогда пытайтесь оптимизировать свои броузы.
Возможно, придется переписывать большее количество кода, чем при переходе на sql(клиент-сервер)
Если возникнут сложности - пишите или здесь , или info@soft-center.ru
Алексей
1. Одни ругательства где- в словаре? Если там, то надо заполнить правильно значения
2. С другими драйверами- они у вас используются, вероятнее всего, для подкачки каких- то данных из вне.
. Так что оставьте как есть.
Если не клиент-серверная обработка, то тогда пытайтесь оптимизировать свои броузы.
Возможно, придется переписывать большее количество кода, чем при переходе на sql(клиент-сервер)
Если возникнут сложности - пишите или здесь , или info@soft-center.ru
Алексей
Re: Обновление Browse на компьютерах по сети
Алексей, спасибо. Получается, что эти хваленные *.tps в сети не такие крутые, как в монопольном режиме?Алексей- Софт-Центр писал(а):добрый день!
1. Одни ругательства где- в словаре? Если там, то надо заполнить правильно значения
2. С другими драйверами- они у вас используются, вероятнее всего, для подкачки каких- то данных из вне.
. Так что оставьте как есть.
Если не клиент-серверная обработка, то тогда пытайтесь оптимизировать свои броузы.
Возможно, придется переписывать большее количество кода, чем при переходе на sql(клиент-сервер)
Если возникнут сложности - пишите или здесь , или info@soft-center.ru
Алексей
А если не связыватьть с SQL, куда нужно смотреть вперед?
Re: Обновление Browse на компьютерах по сети
Не надо делать скоропалительных выводов.
IKSoft вам предлагает совершенно нормальную вещь -- временной штамп LastFefreshDateTime (только я бы назвал LastUpdateDateTime). Сделайте его в отдельной табличке, обновление которой вы, кстати, можете повесить на клиентский триггер (если у вас версия Клариона позволяет их создавать).
Далее таймером смотреть его изменение (считывается только одна запись), и если он изменился, то тогда делайте рефреш броуза.
А то что tps быстрее или медленнее sql, то многое зависит от того, что и как вы делаете, хотя бы: тащите ли вы все данные из таблицы на клиента, а потом их фильтруете или же сразу в sql-запросе задаёте фильтр и таким образом передаёте обработку на sql-сервер и т.д.
IKSoft вам предлагает совершенно нормальную вещь -- временной штамп LastFefreshDateTime (только я бы назвал LastUpdateDateTime). Сделайте его в отдельной табличке, обновление которой вы, кстати, можете повесить на клиентский триггер (если у вас версия Клариона позволяет их создавать).
Далее таймером смотреть его изменение (считывается только одна запись), и если он изменился, то тогда делайте рефреш броуза.
А то что tps быстрее или медленнее sql, то многое зависит от того, что и как вы делаете, хотя бы: тащите ли вы все данные из таблицы на клиента, а потом их фильтруете или же сразу в sql-запросе задаёте фильтр и таким образом передаёте обработку на sql-сервер и т.д.