Страница 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-сервер и т.д.