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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: QT4 + MySQL  (Прочитано 19457 раз)
Godfather
Гость
« : Июль 12, 2007, 18:43 »

Всем привет!
Скажите плизз, что я делаю не так :?:

имеется Qt 4.3.0 commerical, MySQL 5.1, Visual Studio 2005 SP1
дистрибутив пропатчил, для VS проинсталлировал хотфикс

сначала запустил:
configure -qt-sql-mysql -plugin-sql-mysql -debug-and-release -platform win32-msvc2005 -static (и ещё много чего -no-)

компилирую дрова и плагины:

C:\Qt\4.3.0\src\sql\>nmake
всё хорошо
C:\Qt\4.3.0\bin\QtSql4.dll

C:\Qt\4.3.0\plugins\sqldrivers\>nmake
всё хорошо
в C:\Qt\4.3.0\plugins\sqldrivers\qsqlmysql4.dll , qsqlmysql4.lib

пробую:
Код:
QSqlDatabase dbCon = QSqlDatabase::addDatabase("QMYSQL");
dbCon.setHostName("localhost");
dbCon.setPort(3306);
dbCon.setUserName("root");
dbCon.setPassword("myroot");
if(!dbCon.open())
{
QString lastError = dbCon.lastError().text(); // не удалось открыть соединение
return false;
}
ошибка: Driver not loaded Driver not loaded

пробую добавить
Код:
#include <QtPlugin>
Q_IMPORT_PLUGIN(QSQLMYSQL)
ошибка:
Цитировать
Error   1   error LNK2019: unresolved external symbol "class QObject * __cdecl qt_plugin_instance_QSQLMYSQL(void)" (?qt_plugin_instance_QSQLMYSQL@@YAPAVQObject@@XZ) referenced in function "public: __thiscall StaticQSQLMYSQLPluginInstance::StaticQSQLMYSQLPluginInstance(void)" (??0StaticQSQLMYSQLPluginInstance@@QAE@XZ)   DA_MySQL.obj
что делать  :?:  :!:  :?:
умоляю помогите!
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Июль 12, 2007, 18:46 »

Цитировать
ошибка: Driver not loaded Driver not loaded


Этот вопрос на форуме подмимался тысячи раз. Юзаем поиск
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #2 : Июль 12, 2007, 19:11 »

Статическая Qt не работает с плагинами. Пересобери с ключом -shared
Записан
Godfather
Гость
« Ответ #3 : Июль 12, 2007, 19:43 »

Hellraiser, спасибо!
это вероятно решит проблему плагина

а почему дрова не робят?(
или я не понимаю связи между ними
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #4 : Июль 12, 2007, 20:27 »

Цитата: "Godfather"
а почему дрова не робят?(
или я не понимаю связи между ними

Плагин не грузится, соответственно, не грузится драйвер (Qt даже и не подозревает о наличии такого  :wink: ). Если уж так хочется собрать статическую Qt, то и все расширения (SQL, Imageformats и прочее) надо тоже собирать статически (ключи -qt-sql-mysql а не -plugin-sql-mysql)
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #5 : Июль 12, 2007, 22:22 »

Да, только придется пересобирать под каждую версию сервера SQL индивидуально.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Godfather
Гость
« Ответ #6 : Июль 12, 2007, 23:07 »

а где почитать про различия плагина и драйвера?
я нигде на тролтеке не нашел толкового описания
и вообще запутался, честно говоря

плагин - это динамически подгужаемый драйвер?
а сам по себе драйвер отдельно - статический?

-qt-sql-mysql -- это драйвер
-plugin-sql-mysql -- это плагин

я конфигурировал qt с обоими ключами одноврменно
ибо я нигде не видел упоминания, что параметр плагин надо собирать с -shared, а параметр для драйверов - со -static

эти 2 параметра вообще можно указывать одновременно?

мне вообще пофиг как на самом деле
главное - что бы работало
и на клиентской машине тоже
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #7 : Июль 13, 2007, 00:16 »

Цитата: "Godfather"
а где почитать про различия плагина и драйвера?
я нигде на тролтеке не нашел толкового описания
и вообще запутался, честно говоря


Цитировать

    -qt-sql-<driver>          Enable a SQL <driver> in the Qt Library.
    -plugin-sql-<driver>    Enable SQL <driver> as a plugin to be linked to at run  time.
                      Available values for <driver>:
                              mysql
                              psql
                              oci
                              odbc
                              tds
                              db2
                              sqlite
                              sqlite2
                              ibase


Помоему все понятно с приведенного описания
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Godfather
Гость
« Ответ #8 : Июль 13, 2007, 11:07 »

т.е. драйвер встраивается в QtSql(d)4.dll
либо хранится в qsqlmysql.dll и подключается динамически?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #9 : Июль 13, 2007, 11:34 »

Совершенно верно
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Godfather
Гость
« Ответ #10 : Июль 13, 2007, 15:05 »

спасибо за разъяснение! буду дальше копать Улыбающийся

добавлено спустя 1 час 4 минуты:

 подскажите, пожалуйста, как теперь подключаить плагин? скомпилился успешно
Код:
#include <QtPlugin> 
Q_IMPORT_PLUGIN(QSQLMYSQL)
выдает по прежнему
Цитировать
Error   1   error LNK2019: unresolved external symbol "class QObject * __cdecl qt_plugin_instance_QSQLMYSQL(void)" (?qt_plugin_instance_QSQLMYSQL@@YAPAVQObject@@XZ) referenced in function "public: __thiscall StaticQSQLMYSQLPluginInstance::StaticQSQLMYSQLPluginInstance(void)" (??0StaticQSQLMYSQLPluginInstance@@QAE@XZ)   DA_MySQL.obj


добавлено спустя 1 час 16 минут:

 а после сборки со статическими драйверами (с nmake) такие выдаются ошибки:
Цитировать
Error   1   error LNK2001: unresolved external symbol "private: static struct QString::Data QString::shared_null" (?shared_null@QString@@0UData@1@A)   DA_MySQL.obj   
Error   2   error LNK2001: unresolved external symbol "private: static struct QString::Data QString::shared_null" (?shared_null@QString@@0UData@1@A)   frmMain.obj   
Error   3   error LNK2019: unresolved external symbol "private: static struct QString::Data QString::shared_null" (?shared_null@QString@@0UData@1@A) referenced in function __ehhandler$?createDaDbStruct@IDataAdapter@@QAE?AUDaDbStruct@@VQString@@PAV3@@Z   IDataAdapter.obj   
Error   4   error LNK2001: unresolved external symbol "private: static struct QString::Data QString::shared_null" (?shared_null@QString@@0UData@1@A)   ResponseConstructor.obj   
Error   5   error LNK2001: unresolved external symbol "public: static char * QSqlDatabase::defaultConnection" (?defaultConnection@QSqlDatabase@@2PADA)   DA_MySQL.obj   
Error   6   error LNK2001: unresolved external symbol "private: static class QTextCodec * QString::codecForCStrings" (?codecForCStrings@QString@@0PAVQTextCodec@@A)   DA_MySQL.obj   
Error   7   error LNK2001: unresolved external symbol "public: static struct QVectorData QVectorData::shared_null" (?shared_null@QVectorData@@2U1@A)   DA_MySQL.obj   
Error   8   error LNK2019: unresolved external symbol "public: static struct QVectorData QVectorData::shared_null" (?shared_null@QVectorData@@2U1@A) referenced in function "public: __thiscall QString::QString(class QString const &)" (??0QString@@QAE@ABV0@@Z)   frmMain.obj   
Error   9   error LNK2001: unresolved external symbol "public: static struct QVectorData QVectorData::shared_null" (?shared_null@QVectorData@@2U1@A)   IDataAdapter.obj   
Error   10   error LNK2001: unresolved external symbol "public: static struct QMetaObject const QMainWindow::staticMetaObject" (?staticMetaObject@QMainWindow@@2UQMetaObject@@B)   moc_frmMain1.obj   
Error   11   error LNK2001: unresolved external symbol "public: static enum QSysInfo::WinVersion const QSysInfo::WindowsVersion" (?WindowsVersion@QSysInfo@@2W4WinVersion@1@B)   qtmaind.lib   
Error   12   error LNK2001: unresolved external symbol "private: static struct QByteArray::Data QByteArray::shared_null" (?shared_null@QByteArray@@0UData@1@A)   qtmaind.lib   
втф ?? :?:  :?:
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #11 : Июль 13, 2007, 15:23 »

Цитата: "Godfather"

 подскажите, пожалуйста, как теперь подключаить плагин? скомпилился успешно


Как ты собрал? Статически?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Godfather
Гость
« Ответ #12 : Июль 13, 2007, 15:31 »

как я понял плагины надо собирать shared
а дрова static
правильно?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #13 : Июль 13, 2007, 15:45 »

Брррр

Есть два понятия plugin и in the Qt Library. Если первый вариант - то у тебя каждый драйвер к БД будет размещаться в отдельной библиотеке (DLL), если второй вариант - все драйвера БД встрояться в бибилотеку Qt. Драйвер - это прослойка, между Qt и библиотекой для БД. Короче коворя plugin и in the Qt Library это способы размещения драйвера к БД - external или internal соответсвенно. Ничего более.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #14 : Июль 13, 2007, 15:47 »

переконфигурируй QT
configure -shared -debug-and-release -rtti -stl -plugin-sql-mysql
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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