Название: Отключиться от embedded MySQL Отправлено: antoshib от Декабрь 06, 2016, 14:50 Экспериментирую тут с Embedded MySQL под Qt, в итоге "оно" через пень колоду заработало.
На данном этапе приложение ломается при завершении и при попытке закрыть соединение. Лепил по вот этому примеру http://dev.mysql.com/doc/refman/5.7/en/libmysqld-example.html (http://dev.mysql.com/doc/refman/5.7/en/libmysqld-example.html), с адаптацией под использование Qt классов для работы с БД, т.е.: Код: MYSQL *mysql; Если не использовать кутишные классы и делать, как в примере по ссылке, то приложение не ломается, закрытие соединения отрабатывает как надо. Название: Re: Отключиться от embedded MySQL Отправлено: Hellraiser от Декабрь 06, 2016, 15:39 ну а документацию (http://doc.qt.io/qt-5/qsqldatabase.html#removeDatabase) хотя-бы почитать?
Название: Re: Отключиться от embedded MySQL Отправлено: antoshib от Декабрь 06, 2016, 15:55 ну а документацию (http://doc.qt.io/qt-5/qsqldatabase.html#removeDatabase) хотя-бы почитать? хотя бы почитал, выход у меня реализован при закрытии виджета, т.е. в отдельной секции. Название: Re: Отключиться от embedded MySQL Отправлено: Hellraiser от Декабрь 06, 2016, 16:09 А все здесь должны об этом догадываться по приведенным обрывкам кода?
Название: Re: Отключиться от embedded MySQL Отправлено: antoshib от Декабрь 06, 2016, 16:51 Ок, это выяснили, давайте по существу, пожалуйста, какие еще нужно сведения?
Qt 4.5.2 собраны из исходников static под виндой на MS VC++ Express 2010, MySQL 5.5.30 тоже из исходников собрано. Название: Re: Отключиться от embedded MySQL Отправлено: Hellraiser от Декабрь 07, 2016, 08:07 Не нужны ни какие сведения - нужен рабочий код или тестовый код, воспроизводящий проблему.
QMYSQLDriver - это просто ошибка или действительно свой самопальный драйвер? Что за класс MYSQL? Для начала код надо проверить на соединение с не-embedded сервером. P.S. Телепаты все в отпуске... Название: Re: Отключиться от embedded MySQL Отправлено: antoshib от Декабрь 07, 2016, 11:38 QMYSQLDriver подключается из qsql_mysql_p.h из исходников плагина драйвера mysql (%QTDIR%\src\sql\drivers\mysql\qsql_mysql_p.h) в соответствии с рекомендациями в доках по QSqlDatabase::addDatabase, только там для PostgreSQL, но есть и инструкция для мускуля. И вот тут один из примеров реализации http://stackoverflow.com/questions/8364157/use-mysql-embedded-with-qt (http://stackoverflow.com/questions/8364157/use-mysql-embedded-with-qt).
Вот то, что у меня: Код: #include "mainwindow.h" Файл проекта: Код: QT += core gui sql Название: Re: Отключиться от embedded MySQL Отправлено: Hellraiser от Декабрь 07, 2016, 13:35 Там по ссылке есть ответ с куском из исходника Qt.
Рекомендация: сделать как указано в исходнике, т.е. закомментировать дефайн, пересобрать плагин с указанием в командной строке при сборке директивы линковки статической библиотеки (типа LIBS+="-L C:/mysql/libmysqld/Debug -l libmysqld"), выбросить всю мускульную шнягу из проекта и подключаться как Код Пусть QSqlDatabase сам обращается куда надо. Название: Re: Отключиться от embedded MySQL Отправлено: antoshib от Декабрь 07, 2016, 14:32 А как при подключении libmysqld узнает о существовании папки с данными или хотя бы my.ini? При сборке модуля это нигде не указывается. Дефайн комментировал, либы подключал.
Попробую, вдруг пойдет по дефолтным настройкам. upd: не, так не прокатывает - не может открыть бд Название: Re: Отключиться от embedded MySQL Отправлено: antoshib от Декабрь 07, 2016, 16:01 Вынес все таки в отдельный блок addDatabase и стало работать без эксепшена, только ругается при отключении.
QSqlDatabasePrivate::removeDatabase: connection 'connection1' is still in use, all queries will cease to work. Код: //... Название: Re: Отключиться от embedded MySQL Отправлено: Hellraiser от Декабрь 07, 2016, 16:54 Не надо отключение базы держать вместе с запросом. Лучше переопределить closeEvent у формы и в нем добавить
Код Но если используются вьюхи с доступом к этой базе, то все-равно будет ругаться. Название: Re: Отключиться от embedded MySQL Отправлено: antoshib от Декабрь 07, 2016, 17:17 Понял, спасибо!
|