Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct
Qt (static) MYSQL не хочет работать
-
Собирал Qt так:
@configure.exe -debug-and-release -opensource -confirm-license -c++11 -static -opengl desktop -no-angle -no-vcproj -nomake examples -qt-sql-sqlite -qt-sql-mysql -I D:/Development/mysql-dev/include -L D:/Development/mysql-dev/lib/libmysql.dll -qt-sql-odbc
@Где D:/Development/mysql-dev - директория установленной "MySQL":http://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-5.6.16.0.msi.
При компилировании такого кода:
@#include "widget.h"
#include <QApplication>
#include <QSplashScreen>
#include <QtSql/QSqlDatabase>static bool CreateConnection();
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSplashScreen *pSplash = new QSplashScreen;
pSplash->setPixmap(QPixmap("D:/Development/Privatbank.png"));
pSplash->show();Qt::Alignment topRight = Qt::AlignRight | Qt::AlignTop;
// pSplash->showMessage(QObject::tr("Setting up the main windows..."),
// topRight, Qt::white);Widget w; pSplash->showMessage(QObject::tr("Connecting to BD..."), topRight, Qt::white); if (!CreateConnection()) { pSplash->showMessage(QObject::tr("Cannot connect to BD!"), topRight, Qt::white); exit(1); } pSplash->finish(&w); w.show(); delete pSplash; return a.exec();
}
static bool CreateConnection()
{
QSqlDatabase DB = QSqlDatabase::addDatabase("QMYSQL");
DB.setHostName("mysql.hostinger.com.ua");
DB.setDatabaseName("имя бд");
DB.setUserName("здесь был логин");
DB.setPassword("пароль от бд");
if (!DB.open()) {
// DB.lastError().text();
return false;
}
return true;
}
@Мне выбивало 86 ошибок (только при статической линковке, в дин. всё было норм).
И ещё 1 вопрос: нужно ли в .pro файле указывать QT += sql при статической линковке или это только для динамической? (ошибки и так и так в стат.)
-
[quote author="Matumba" date="1393080571"]Собирал Qt так:
configure.exe -debug-and-release -opensource -confirm-license -c++11 -static -opengl desktop -no-angle -no-vcproj -nomake examples -qt-sql-sqlite -qt-sql-mysql -I D:/Development/mysql-dev/include -L D:/Development/mysql-dev/lib/libmysql.dll -qt-sql-odbc
[/quote]-L указывает путь (у тебя будет -L D:/Development/mysql-dev/lib) к библиотекам .lib для MS Studio или .a для mingw, контретная либа указывается через -l (строчная английская "эл"). Чтобы из mysql-ной dll получить библиотеку с расширением .a, надо ещё помучиться, потому что в дефолтную сборку mysql включены только .lib для studio, а сборку на mingw разработчики mysql (и альтернативной MariaDB) не поддерживают.
Как получить библиотеки .a для mingw, описано, например, здесь на примере 4-го Qt:
http://blog.sulin.pro/2009/11/linux-qt-static-mysql-sqlite.html
Кажется, там reimp нужна какой-то определённой версии, и готовая qt-программа всё равно будет требовать libmysql.dll. Короче, не полностью статическая сборка.
Для MS Studio всё это не нужно, потому что либы уже есть.Путь к инклудам и либам можно указать в переменных окружения INCLUDE и LIB (через точку с запятой, если нужно несколько библиотек в разных директориях), тогда не надо в configure писать -I и -L. Например, у меня так:
INCLUDE =
C:\Program Files\MySQL\MySQL Server 5.5\include;U:\develop\libs\include
LIB =
C:\Program Files\MySQL\MySQL Server 5.5\lib;U:\develop\libs\libQT += sql нужно указывать всегда, если обращаешься через Qt к базам данных.
Функция QSqlDatabase::drivers() выдаст все драйверы, доступные для программы. Если в списке нет mysql, значит, он по какой-то причине не доступен (например, если драйвер вообще не был собран).