Страница 1 из 1
Concurrent updates в browse
Добавлено: 28 Июль 2019, 14:24
gopstop2007
Стандартный browse, БД Mysql находится на удаленном сервере, соединение через ODBC, работают несколько пользователей.
Проблема, при изменении разными пользователями состояния одного поля в таблице ( status_out - статус состояния заказа от 0 до 5).
Код для изменения состояния в БД
Код: Выделить всё
MyFile{PROP:SQL} = 'UPDATE MyFile SET status_out = 1 WHERE my_id='& my_id &';'
BRW1.ResetFromBuffer
И все.
Периодически происходит зависание, интернет и сеть не причем.
Кто сталкивался с подобной ситуацией, просьба откликнуться.
Спасибо за внимание.
Concurrent updates в browse
Добавлено: 28 Июль 2019, 16:19
Дед Пахом
Где проверка на ошибку после вызова PROP:SQL?
Concurrent updates в browse
Добавлено: 28 Июль 2019, 18:59
gopstop2007
Дед Пахом писал(а): 28 Июль 2019, 16:19
Где проверка на ошибку после вызова PROP:SQL?
Да есть, убрал для поста

, в таком виде
Код: Выделить всё
IF ERRORCODE() THEN Message('Ошибка при изменении статуса: '& ERRORFILE() & ': '& ERROR()) END
Придется пользователям Profiles ставить и отлавливать (
Concurrent updates в browse
Добавлено: 28 Июль 2019, 21:19
Yufil
Для SQL надо проверять, наряду с ERRCODE(), значение функций FILEERRORCODE() и FILEERROR() - они могут более конкретно указать причину аварии. Ну и трассировку для драйвера, само собой, включить, какие операции исполняет сервер и сколько времени они поедают.
Concurrent updates в browse
Добавлено: 29 Июль 2019, 10:25
gopstop2007
Yufil писал(а): 28 Июль 2019, 21:19
Для SQL надо проверять, наряду с ERRCODE(), значение функций FILEERRORCODE() и FILEERROR() - они могут более конкретно указать причину аварии. Ну и трассировку для драйвера, само собой, включить, какие операции исполняет сервер и сколько времени они поедают.
Yufil, спасибо, добавлю
Concurrent updates в browse
Добавлено: 29 Июль 2019, 13:23
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