Concurrent updates в browse

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Concurrent updates в browse

Сообщение gopstop2007 »

Стандартный browse, БД Mysql находится на удаленном сервере, соединение через ODBC, работают несколько пользователей.
Проблема, при изменении разными пользователями состояния одного поля в таблице ( status_out - статус состояния заказа от 0 до 5).
Код для изменения состояния в БД

Код: Выделить всё

MyFile{PROP:SQL} = 'UPDATE MyFile SET status_out = 1 WHERE  my_id='& my_id &';'
BRW1.ResetFromBuffer
И все.
Периодически происходит зависание, интернет и сеть не причем.
Кто сталкивался с подобной ситуацией, просьба откликнуться.
Спасибо за внимание.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Concurrent updates в browse

Сообщение Дед Пахом »

Где проверка на ошибку после вызова PROP:SQL?
С уважением, ДП
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Concurrent updates в browse

Сообщение gopstop2007 »

Дед Пахом писал(а): 28 Июль 2019, 16:19 Где проверка на ошибку после вызова PROP:SQL?
Да есть, убрал для поста :), в таком виде

Код: Выделить всё

IF ERRORCODE() THEN  Message('Ошибка при изменении статуса: '& ERRORFILE() & ': '& ERROR()) END
Придется пользователям Profiles ставить и отлавливать (
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Concurrent updates в browse

Сообщение Yufil »

Для SQL надо проверять, наряду с ERRCODE(), значение функций FILEERRORCODE() и FILEERROR() - они могут более конкретно указать причину аварии. Ну и трассировку для драйвера, само собой, включить, какие операции исполняет сервер и сколько времени они поедают.
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Concurrent updates в browse

Сообщение gopstop2007 »

Yufil писал(а): 28 Июль 2019, 21:19 Для SQL надо проверять, наряду с ERRCODE(), значение функций FILEERRORCODE() и FILEERROR() - они могут более конкретно указать причину аварии. Ну и трассировку для драйвера, само собой, включить, какие операции исполняет сервер и сколько времени они поедают.
Yufil, спасибо, добавлю
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Concurrent updates в browse

Сообщение gopstop2007 »

Нашел в чем проблема, в Mysql используемая таблица в Innodb.
достаточно добавить перед записью (или в конце после кода обновления MyFile{PROP:SQL} = 'COMMIT;' )

Код: Выделить всё

MyFile{PROP:SQL} = 'set autocommit=1;'  
MyFile{PROP:SQL} = 'UPDATE MyFile SET status_out = 1 WHERE  my_id='& my_id &';'
IF ERRORCODE()   
  Message('Ошибка при изменении статуса: '& ERRORFILE() & ': '& ERROR()) 
END
BRW1.ResetFromBuffer
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Ответить