Russian Qt Forum

Qt => Базы данных => Тема начата: Danila_Bagrofff от Октябрь 25, 2010, 13:07



Название: Ошибка открытия БД MySQL
Отправлено: Danila_Bagrofff от Октябрь 25, 2010, 13:07
ОС: Windows 7
Компилер: MinGW
Lib: Qt-4.7.0 (Сборка Qt-SDK-2010.5) + QtСreator соответсвенно.

Проблема следующая.
Либу собрал. Все норм. Драйвер вроде находит, если работать статически, все лежит, где надо.

Начинаю работать с БД. Пробую так.
В h.файле:
Код:
QSqlDatabase *dbArchive ;

В cpp:
Код:
dbArchive = new QSqlDatabase();
    dbArchive->addDatabase("QMYSQL");
    dbArchive->setHostName("archive");
    dbArchive->setDatabaseName("archive");
    dbArchive->setUserName("йцуукен");
    dbArchive->setPassword("12345");
    if(dbArchive->open())
    { //OK   }
    else   {   //FALSE  }

Когда работаю вот так через указатель, lastError говорит
Цитировать
Driver not Load
.

Если работаю так:
Код:
QSqlDatabase dbArchive = QSqlDatabase::addDatabase("QMYSQL");
Все в порядке, никаких проблем. Но мне надо передавать указатель на БД, с которой работаю, дальше в программу.

Пришлось сделать так, чтоб скушался драйвер:
Код:
dbArchive = new QSqlDatabase(QSqlDatabase::addDatabase("QMYSQL"));
Тогда в дебаг-сборке работает, а в релиз, нет...

В чем проблема, и как правильно надо работать тогда?..

Как заставить работать с БД через указатель?




Название: Re: Ошибка открытия БД MySQL
Отправлено: kibsoft от Октябрь 25, 2010, 13:22
А зачем вам нужно передавать указатель на этот объект?
Вы всегда можете его получить в любом месте через:
Код:
QSqlDatabase db = QSqlDatabase::database();


Название: Re: Ошибка открытия БД MySQL
Отправлено: nitro2005 от Октябрь 25, 2010, 13:23
Код:
dbArchive = new QSqlDatabase("QMYSQL");


Название: Re: Ошибка открытия БД MySQL
Отправлено: Danila_Bagrofff от Октябрь 25, 2010, 13:45
Код:
dbArchive = new QSqlDatabase("QMYSQL");

Это protected метод. Напрямую его не вытащить.

Цитировать
QSqlDatabase::QSqlDatabase ( const QString & type )   [protected]

To kibsoft.
Цитировать
А зачем вам нужно передавать указатель на этот объект?
Вы всегда можете его получить в любом месте через:
Код:

QSqlDatabase db = QSqlDatabase::database();

То есть одновременно можно работать только с одной БД??? То есть только одна открытая бд может быть?
Мне вот надо из одной БД программно перенести данные в другую. Это значит, надо регулярно закрывать одно соединение и открывать другое? Я правильно понимаю?... Как то это неправильно =(

И, кстати, в release сборке:
Код:
QSqlDatabase dbArchive2 = QSqlDatabase::addDatabase("QMYSQL");
    dbArchive2.setHostName("archive");
    dbArchive2.setDatabaseName("archive");
    dbArchive2.setUserName("Kalinin");
    dbArchive2.setPassword("123");
    dbArchive2.open();

На операции open происходит выброс:
Цитировать
Запускается D:\Program\MigrateArchive-build-desktop\release\MigrateArchive.exe...
D:\Program\MigrateArchive-build-desktop\release\MigrateArchive.exe завершился с кодом -1073741819

При этов debug-сборке таких ошибок нет и open проходит успешно. В чем может быть проблема?...


Название: Re: Ошибка открытия БД MySQL
Отправлено: Пантер от Октябрь 25, 2010, 14:07
Неверно. Давай названия своим соединениям и можешь хоть с 10-ю БД работать.
QSqlDatabase QSqlDatabase::addDatabase ( const QString & type, const QString & connectionName = QLatin1String( defaultConnection ) )


Название: Re: Ошибка открытия БД MySQL
Отправлено: Danila_Bagrofff от Октябрь 25, 2010, 14:12
О, точно =((( он по умолчанию все в default соединения добавляет...

Но что-то проблема с release- и с debug-сборками непонятна =(

release сборка так и не работает... В чем может быть проблема?...

Говорит:
Цитировать
Запускается D:\Program\MigrateArchive-build-desktop\release\MigrateArchive.exe...
Не удалось получить отладочный вывод!D:\Program\MigrateArchive-build-desktop\release\MigrateArchive.exe завершился с кодом -1073741819