Страница 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