Russian Qt Forum
Ноябрь 24, 2024, 11:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Ошибка открытия БД MySQL  (Прочитано 4539 раз)
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"));
Тогда в дебаг-сборке работает, а в релиз, нет...

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

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


« Последнее редактирование: Октябрь 25, 2010, 13:11 от Danila_Bagrofff » Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #1 : Октябрь 25, 2010, 13:22 »

А зачем вам нужно передавать указатель на этот объект?
Вы всегда можете его получить в любом месте через:
Код:
QSqlDatabase db = QSqlDatabase::database();
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
nitro2005
Гость
« Ответ #2 : Октябрь 25, 2010, 13:23 »

Код:
dbArchive = new QSqlDatabase("QMYSQL");
Записан
Danila_Bagrofff
Гость
« Ответ #3 : Октябрь 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 проходит успешно. В чем может быть проблема?...
« Последнее редактирование: Октябрь 25, 2010, 14:11 от Danila_Bagrofff » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Октябрь 25, 2010, 14:07 »

Неверно. Давай названия своим соединениям и можешь хоть с 10-ю БД работать.
QSqlDatabase QSqlDatabase::addDatabase ( const QString & type, const QString & connectionName = QLatin1String( defaultConnection ) )
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Danila_Bagrofff
Гость
« Ответ #5 : Октябрь 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
« Последнее редактирование: Октябрь 25, 2010, 14:52 от Danila_Bagrofff » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.245 секунд. Запросов: 22.