Работа с БД SQLite в тестере - страница 2

 
Vladimir Mikhailov #:

В SQLite нет возможности одновременного изменения данных несколькими процессами. Только один процесс в единицу времени может производить изменения данных, остальные процессы должны ждать. Чтение данных могут делать несколько процессов одновременно, но только не тогда, когда происходит изменение данных.
Для организации правильного доступа к БД процессы должны проверять в каком состоянии находится БД. Сделать это можно например через возврат ошибок: ERR_DATABASE_BUSY 5605 Файл базы данных заблокирован, или других. Нужно посмотреть какие ошибки БД возвращаются и в каких состояниях.  

Благодарю. Обернул все обращения к БД в while(не выполнен запрос). Так работает.
 
SQLite: нативная работа с базами данных на SQL в MQL5
SQLite: нативная работа с базами данных на SQL в MQL5
  • www.mql5.com
Разработка торговых стратегий связана с обработкой больших объемов данных. Теперь прямо в MQL5 вы можете работать с базами данных с помощью SQL-запросов на основе SQLite. Важным преимуществом данного движка является то, что вся база данных содержится в единственном файле, который находится на компьютере пользователя.
 
Rashid Umarov #:

Посмотрите готовый пример - Сохранение результатов оптимизации в базу данных

Я смотрел данный пример. В нем и в других примерах с кадрами выполняется сбор статистики тестера и разовая запись в БД.

В моем случае- из тестера в каждом проходе идет обращение к БД (включая запросы на удаление/создание таблиц и добавление записей) и возврат из БД значения для целевой функции. Поскольку агентов несколько и они обращаются к базе параллельно, возникают накладки, если этим процессом не управлять.

Я в итоге решил задачу оберткой всех запросов к базе в while(не выполнен запрос / невалидный хэндл). В таком варианте параллельность работы с базой допустима. Даже не требуются самодельные задержки в тестере. Все работает.

Причина обращения: