Russian Qt Forum
Ноябрь 23, 2024, 07:53
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Базы данных
>
База данных (QSqlDatabase) по умолчанию?
Страниц:
1
[
2
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: База данных (QSqlDatabase) по умолчанию? (Прочитано 14652 раз)
PinkPanther
Самовар
Offline
Сообщений: 169
Re: База данных (QSqlDatabase) по умолчанию?
«
Ответ #15 :
Февраль 28, 2015, 21:07 »
Цитата: Termit от Февраль 28, 2015, 20:55
Подозреваю, что это из-за того как Windows работает с файлами.
Такой подход как я описал, видимо, возможен только или из одного приложения в несколько потоков, или из разных приложений но только под *nix системами.
Да. Таймаут - это отлично, но сначала необходимо базу открыть, а она, зараза, не открывается.
В старых версиях Windows (3.0, 3.1) была команда share.exe, которая позволяла использовать файл параллельно. Но это было 25 лет назад, с тех пор многое изменилось. С другой стороны, в Windows я могу открыть текстовый файл на редактирование несколькими редакторами одновременно. Но не факт, что они держат его открытым. Скорее всего, качают содержимое, и потом пытаются сохранять в заранее известное место.
Записан
Эвтаназия - наше хобби!
Johnik
Крякер
Offline
Сообщений: 339
Re: База данных (QSqlDatabase) по умолчанию?
«
Ответ #16 :
Март 01, 2015, 01:16 »
Сделал тестовый проект с двумя подпроектами:
writer - создает бд и пишет данные;
reader - читает из этой бд данные и выводит на экран.
Все работает, проверено на Widnows 7, Qt 5.3.1.
Запускать writer, спустя несколько секунд reader.
«
Последнее редактирование: Март 01, 2015, 01:21 от Johnik
»
Записан
Termit
Самовар
Offline
Сообщений: 144
Re: База данных (QSqlDatabase) по умолчанию?
«
Ответ #17 :
Март 01, 2015, 12:45 »
Получается, что работает таки.
В чем тогда проблема?
PinkPanther: покажите больше кода, может так будет понятна проблема.
Записан
Человеческая глупость дает представление о бесконечности
(с) Иоанна Хмелевская
PinkPanther
Самовар
Offline
Сообщений: 169
Re: База данных (QSqlDatabase) по умолчанию?
«
Ответ #18 :
Март 01, 2015, 17:11 »
Johnik
, если я правильно понял исходники, whiter запускается, открывает (создает) базу и тестовую таблицу, через 3 секунды пишет в таблицу и отключается. reader открывает базу и читает через 3 секунды работы. Так? Если я запущу reader с интервалом несколько секунд (3+), writer уже умрет, и база будет свободна. Если бы writer писал, потом доживал с открытой базой еще секунд 30, а ридер бы начинал читать через 3 секунды, было бы интересно протестить. Я попробую запустить код со своими задержками, но попозже. Спасибо!
Termit
, больше кода, наверное, не нужно. Ошибка вылетает на этапе исполнения того участка, который выложил. Первое запущенное приложение открывает базу без приключений, а следующие спотыкаются и пишут "не могу открыть базу". В других местах db упоминается только в слотах, при создании временных экземпляров QSqlQuery. Я погуглил, гугл говорит, что лок SQLite при попытке доступа из разных приложений - обычная практика. Идеология SQLite - уютненькая базочка для одного приложения. Работать с ней как с сервером БД, видимо, архибессмысленно (при чтении/записи 2,000 записей ждать приходится секунд 10, при этом база живет на SSD-диске).
Записан
Эвтаназия - наше хобби!
Termit
Самовар
Offline
Сообщений: 144
Re: База данных (QSqlDatabase) по умолчанию?
«
Ответ #19 :
Март 01, 2015, 20:26 »
У writer-а нет вызова db.close(). База остается открытой.
А больше кода тут уж смотрите сами
Что касается области применения sqlite, то да, явно у нее не серверное исполнение. Но никто не заявлял, что она не может работать с несколькими приложениями однозначно.
По делу: порылся в настройках базы, помимо прочего там есть такое понятие как locking_mode -
http://sqlite.org/pragma.html#pragma_locking_mode
. Может именно это мешает жить?
Записан
Человеческая глупость дает представление о бесконечности
(с) Иоанна Хмелевская
Johnik
Крякер
Offline
Сообщений: 339
Re: База данных (QSqlDatabase) по умолчанию?
«
Ответ #20 :
Март 01, 2015, 22:23 »
Цитата: PinkPanther от Март 01, 2015, 17:11
whiter запускается, открывает (создает) базу и тестовую таблицу, через 3 секунды пишет в таблицу и отключается.
writer, создает базу и запускает таймер, который через каждые 3 секунды добавляет новую запись в таблице, отключения я не предусматривал. закрыть программу можно только по клавише Ctrl+C
reader, так же каждые три секунды читает последнюю запись из той же таблицы, куда пишет writer, и тоже отключения не предусматривал.
Записан
PinkPanther
Самовар
Offline
Сообщений: 169
Re: База данных (QSqlDatabase) по умолчанию?
«
Ответ #21 :
Март 02, 2015, 03:34 »
Да, действительно... в обоих примерах база открывается в main() и не закрывается. То есть, при нулевой активности, к базе SQLite можно относительно свободно подключаться (что нормально). Значит, дело в активности первого запущенного приложения.
В ридере-райтере объект QSqlQuery создается в функции, живет в стэке и удаляется при завершении функции, то есть сразу же после чтения или записи. Вероятность, что ридер и райтер пересекутся, минимальна. Гугл говорит, что одна из причин лока - активные query, которые меняли базу, а также активные query, которые использовали курсоры (query.next()). Надо будет провести эксперимент и объявить query не в слоте, а в классе, привязав к базе в конструкторе. Если у ридера возникнут проблемы, значит, дело в этом.
Записан
Эвтаназия - наше хобби!
Страниц:
1
[
2
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...