я не против, но как это сделать в ODBC (mysql) с помощью clarion ? Буду рад подсказке
Connect online (синхронизация данных)
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- ✯ Ветеран ✯
- Сообщения: 1704
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
Connect online
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
-
- ✯ Ветеран ✯
- Сообщения: 1704
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
Connect online
Да у меня так и сделано в отдельном треде и зависает все приложение
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4664
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 8 раз
- Поблагодарили: 37 раз
Connect online
Вполне серьезно. Это зависит от архитектуры и функционала основного приложения.gopstop2007 писал(а): ↑16 Июль 2017, 10:12Серьезно, третье? А какие проблемы могут возникнуть, если основное за этим проследит ?
Как я понимаю, все обычные клиент-серверные приложения предполагают стабильный коннект к серверу. В локальной сети поэтому обычно проблем не возникает. Работа через интернет отличается в этом плане.
У меня задачки несколько иные, но я тоже наступал на подобные грабли. В частности, в конце концов сделал всю работу из удаленной точки продаж с сервером через интернет с помощью отдельного небольшого приложения. Основное вызывает его в виде процесса, передавая параметры командной строки. Если в течении заданного периода времени работа второго приложения не завершилась, то либо прерываем процесс (снимая второе запущенное приложение), либо активируем для пользователя кнопку Прервать. Тут еще есть один важный нюанс. Мы не знаем, на каком этапе произошел сбой соединения. Он может произойти, когда задание на сервере было получено и выполнено, но ответ об успехе от сервера получить не смогли. Например, записываем документ. В этом случае приходится сохранять идентификаторы последнего задания на клиенте и на сервере, а перед очередной операцией с сервером запрашивать и сопоставлять их.
По поводу третьего приложения делал подобное решение, но оно сейчас не в продакшене. Там со стороны веб и мобильных приложений идут запросы к базе данных (tps) на локальном сервере. На сервере крутится небольшое кларионовское приложение, которое эти запросы получает, нумерует, возвращает номер клиенту и выполняет. Клиентские приложения через небольшой интервал времени шлют повторный запрос с номером задания и получают результат. Иногда приложение на сервере отваливается. Причину понять с ходу не удалось. Поэтому приделал сверху небольшое управляющее приложение, которое запускает первое и периодически пингует.
C6/C11, ШВС, tps/btrieve.
-
- ✯ Ветеран ✯
- Сообщения: 5006
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 21 раз
Connect online
Какая-такая параллельная запись? Я думал, что этот файл только для синхронизации. Тогда мне не понятен бизнес процесс. Вот у нас, бывает, связь с филиалами рвётся. Мы большие файлы качаем по ftp c докачкой и т.д. Мне представляется так. На одном компе создали файл с данными, послали на сервер. Программа проверила идентичность файла, кинула на сервер пустой файл "OK". На сервере резидентная программа увидела этот пустой файл и начала синхронизацию. Все велосипеды уже изобретены вроде ?gopstop2007 писал(а): ↑16 Июль 2017, 7:07 Нет не удаляет, как как в этот момент может идти параллельная запись в него данных из основной программы
We are hard at work… for you.
-
- ✯ Ветеран ✯
- Сообщения: 1704
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
Connect online
С одним файлом prod.tps может работать несколько пользователей, процесс изменения остатков и записи на сервер быстрее асинхронный .
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
-
- ✯ Ветеран ✯
- Сообщения: 1704
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
Connect online
Спабо за интересную информацию. Интересно как вы контролируйте зависло ли приложение, в процессе работы (отправки, получения данных) или в режиме "ожидания"?finsoftrz писал(а): ↑16 Июль 2017, 13:29 Вполне серьезно. Это зависит от архитектуры и функционала основного приложения.
... Основное вызывает его в виде процесса, передавая параметры командной строки. Если в течении заданного периода времени работа второго приложения не завершилась, то либо прерываем процесс (снимая второе запущенное приложение), либо активируем для пользователя кнопку Прервать. Тут еще есть один важный нюанс. Мы не знаем, на каком этапе произошел сбой соединения. Он может произойти, когда задание на сервере было получено и выполнено, но ответ об успехе от сервера получить не смогли.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4664
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 8 раз
- Поблагодарили: 37 раз
Connect online
Если запуск второго приложения, которое должно завершиться после выполнения задания, то через процесс. По таймеру проверяем факт завершения процесса.
Если контролируется приложение, которое должно работать постоянно, то запускаем тоже через процесс и пингуем по ip-протоколу. Ответ пришел, значит работает. Не пришел, то зависло или отвалилось. Тогда убиваем процесс и перезапускаем.
Если контролируется приложение, которое должно работать постоянно, то запускаем тоже через процесс и пингуем по ip-протоколу. Ответ пришел, значит работает. Не пришел, то зависло или отвалилось. Тогда убиваем процесс и перезапускаем.
C6/C11, ШВС, tps/btrieve.
-
- ✯ Ветеран ✯
- Сообщения: 5006
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 21 раз
Connect online
В топике было, что файл prod.tps локальный .gopstop2007 писал(а): ↑17 Июль 2017, 9:04 С одним файлом prod.tps может работать несколько пользователей, процесс изменения остатков и записи на сервер быстрее асинхронный .
Чересчур замысловато. Чем больше звеньев, тем больше проблем. gopstop2007, если связь совсем хреновая, может вэб-морда поможет? Кстати, у нас много народу считают эту вэб-морду панацеей от медленных каналов связи.finsoftrz писал(а): ↑17 Июль 2017, 17:51 Если запуск второго приложения, которое должно завершиться после выполнения задания, то через процесс. По таймеру проверяем факт завершения процесса.
Если контролируется приложение, которое должно работать постоянно, то запускаем тоже через процесс и пингуем по ip-протоколу. Ответ пришел, значит работает. Не пришел, то зависло или отвалилось. Тогда убиваем процесс и перезапускаем.
We are hard at work… for you.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4664
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 8 раз
- Поблагодарили: 37 раз
Connect online
А что там замысловатого? Запустить прогу не через run, а через функцию win api. Повесить стандартный прогресс по таймеру и проверять, завершила ли прога работу. А обмен сообщениями между приложениями сейчас в с10 стандартный функционал, полключаемый шаблонами...
C6/C11, ШВС, tps/btrieve.
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4664
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 8 раз
- Поблагодарили: 37 раз
Connect online
Вот классик для запуска программы через процесс, может, кому пригодится. Пример вызова:
Код: Выделить всё
if fsProc.StartProcess('fsprmag_con.exe req=11 user="' & clip(AcUSE:Shtamp) & '" pswd=' & choose(AcUSE:Parol='','','"' & clip(AcUSE:Parol) & '"') & ' err="' & clip(FsAccess:ActiveUserDir) & '"','Запись документов на сервер...',1600,0)=0
....
end
- Вложения
-
- fsProcess.clw
- (6.17 КБ) 429 скачиваний
-
- fsProcess.inc
- (2.08 КБ) 422 скачивания
C6/C11, ШВС, tps/btrieve.
-
- ✯ Ветеран ✯
- Сообщения: 1704
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
Connect online
Магазин (локально) в котором несколько пользователей(продавец,кладовщик и т.п) и связь с офисом (сервером).
Согласен, только начал осваивать И много в ней вещей которые "старые" пользователи не примут, так как привыкли работать с другим интерфейсомКстати, у нас много народу считают эту вэб-морду панацеей от медленных каналов связи.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
-
- ✯ Ветеран ✯
- Сообщения: 1704
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
Connect online
Огромное спасибо за рабочий пример. Понятно, что есть много примеров по данному вопросу, но когда эти примеры начинаешь использовать(пробовать), вылазит много мелочей, которые сводят работу на нет.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
-
- ✯ Ветеран ✯
- Сообщения: 5006
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 21 раз
Connect online
Тогда бы я попробовал сделать так. В локальном магазине периодически запускается некая прога, которая выгружает на удалённый сервер изменения в локальном prod.tps. На сервере при появлении этой выгрузки стартует синхронизация. Повторюсь - чем проще, тем лучше. Проблемы репликации всем известны. Даже в больших SQL с репликацией не всё однозначно.gopstop2007 писал(а): ↑18 Июль 2017, 9:43 Магазин (локально) в котором несколько пользователей(продавец,кладовщик и т.п) и связь с офисом (сервером).
We are hard at work… for you.
-
- ✯ Ветеран ✯
- Сообщения: 1704
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 9 раз
- Поблагодарили: 4 раза
Connect online (синхронизация данных)
Я проверяю сейчас такой механизм работы
1. Изменения prod.tps постоянно пишутся в лог prod_log.tps (формат - первое поле инкриминент записи лога id, все поля prod.tps)
2. При отправке на сервер (по таймеру), проверяется последний записанный id (prod_log.tps) с id который записан в файле (last_id.tps)
3. При несовпадении записываем все изменения на сервер из файла prod_log.tps, после отправки всех данных записываем последний успешно записанный id из prod_log.tps в last_id.tps.
4 .. и так по кругу
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
- finsoftrz
- ✯ Ветеран ✯
- Сообщения: 4664
- Зарегистрирован: 06 Ноябрь 2014, 12:48
- Благодарил (а): 8 раз
- Поблагодарили: 37 раз
Connect online (синхронизация данных)
У меня сейчас похоже сетка из 14 продуктовых супермаркетов работает. В магазинах 1-2 рабочих места на бэке (Продмаг) и локальная сетка (кассовые узлы, весы). Основная база на сервере через интернет (КупецЪ). Справочники подгружаются с сервера по мере необходимости. Далее работают локально в каждом магазине. По мере готовности документов отправляют их на сервер (утверждают). Либо по одному, либо сразу все неотправленные. Раз в неделю автоматическая принудительная отправка. Если документ надо изменить после отправки, то отправку предварительно отменяют. На сервере документ при этом выключается. При повторной отправке на сервере документ создается заново. Каждую ночь выполняется автоматическая сверка документов и остатков товаров с сервером и по электронной почте отправляется отчет из каждого магазина.gopstop2007 писал(а): ↑18 Июль 2017, 9:43Магазин (локально) в котором несколько пользователей(продавец,кладовщик и т.п) и связь с офисом (сервером).
Не просто по сравнению с онлайн доступом к общей базе, зато очень стабильно, устойчиво и быстро. Проблемы со связью, сервером не приводят к останову работы всей сети. База на tps, контакт с сервером через ip-драйвер и серверные функции.
Есть еще одна небольшая непродуктовая сетка. Насколько знаю, 5 магазинов. Там в магазинах просто точки продаж. Справочники также подгружают с сервера. А чеки при пробитии отправляются на сервер. Если сервер не доступен, то автоматически переходят в оффлайн режим. При переходе обратно в онлайн все неотправленные чеки отправляются на сервер. Это гораздо проще, чем на продуктовке, так как все приходы от поставщиков оформляются в центральном офисе.
C6/C11, ШВС, tps/btrieve.