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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Драйвер базы данных в Qt 4  (Прочитано 15282 раз)
bai
Новичок

Offline Offline

Сообщений: 12


Просмотр профиля
« : Май 13, 2007, 23:13 »

В тексте программы пытаюсь подключиться к базе данных:

QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
db.setDatabaseName("db1");
db.setUserName("user");
db.setPassword("password");
db.open();

После сборки при запуске программы на консоль выдается следующее:

QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers:
QSqlQuery::exec: database not open

Что делаю неправильно? Система FreeBSD 6.2, Qt 4.2.3 установлено из портов.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


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


Просмотр профиля
« Ответ #1 : Май 13, 2007, 23:38 »

драйвер пересобрать и положить  в .\sqldrivers
Записан

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 не волк, в лес не уйдёт
Karl-Philipp
Гость
« Ответ #2 : Май 13, 2007, 23:52 »

а как это пересобрать драйвер? У меня та же проблема, только с MySql.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


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


Просмотр профиля
« Ответ #3 : Май 14, 2007, 00:48 »

1. Ставишь MySql. Обычно становится он в c:\mysql.
2. Идешь в инсталляцию Qt\src\plugins\sqldrivers\mysql\
(например, это может быть C:\QT\4.2.2\src\plugins\sqldrivers\mysql).
3. Делаешь qmake, потом nmake.
4. В C:\QT\4.2.2\plugins\sqldrivers\ должен появиться файлик C:\QT\4.2.2\plugins\sqldrivers\qsqlmysql.dll, его то и копируешь в подкаталог .\sqldrivers твоего приложения.

Какие могут быть грабли... Возможно, надо будет указать путь к mysql.h в путях компилятора (обычно к C:\mysql\include\) и к либе в путях линкера (C:\mysql\lib\opt\libmySQL.lib).
Также придется кинуть C:\mysql\lib\opt\libmySQL.dll  в каталог с твоей ехе-хой.
Записан

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 не волк, в лес не уйдёт
an9bit
Гость
« Ответ #4 : Май 14, 2007, 01:35 »

У меня таже проблема с FreeBSD 6.2, QT 4.2.3 и QMYSQL
%./mysql
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers:

Пробовал добавлять QTPLUGIN += qsqlmysql в файл проекта, получается ещё хуже, но хоть что-то видно. Может вы сможите помочь определить чего не хватает для сборки.

mysql.pro
Код:
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
CONFIG += qt debug plugin
QT += sql
QTPLUGIN += qsqlmysql
# Input
HEADERS += qsql.h
SOURCES += main.cxx


main.cxx
Код:
#include <QApplication>
#include "qsql.h"
int main(int argc, char *argv[]){
        QApplication app(argc, argv);
        sqltmp db;
        return app.exec();
}


qsql.h
Код:
#ifndef aa_
#define aa_
#include <QSqlDatabase>
#include <QWidget>
class sqltmp : public QWidget {
        Q_OBJECT
        public:
                sqltmp(QWidget *parent=0):QWidget(parent){
                        QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
                }
};
#endif


При сборки происходит следующее
Код:
an9bit@bithome% qmake-qt4 -spec freebsd-g++
an9bit@bithome%make
++ -c -pipe -g -Wall -W  -DQT_PLUGIN -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/share/qt4/mkspecs/freebsd-g++ -I. -I/usr/local/include/QtCore -I/usr/local/include/QtCore -I/usr/local/include/QtGui -I/usr/local/include/QtGui -I/usr/local/include/QtSql -I/usr/local/include/QtSql -I/usr/local/include -I. -I. -I. -I/usr/local/include -o main.o main.cxx
/usr/local/bin/moc-qt4 -DQT_PLUGIN -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/share/qt4/mkspecs/freebsd-g++ -I. -I/usr/local/include/QtCore -I/usr/local/include/QtCore -I/usr/local/include/QtGui -I/usr/local/include/QtGui -I/usr/local/include/QtSql -I/usr/local/include/QtSql -I/usr/local/include -I. -I. -I. -I/usr/local/include qsql.h -o moc_qsql.cpp
c++ -c -pipe -g -Wall -W  -DQT_PLUGIN -DQT_SQL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/share/qt4/mkspecs/freebsd-g++ -I. -I/usr/local/include/QtCore -I/usr/local/include/QtCore -I/usr/local/include/QtGui -I/usr/local/include/QtGui -I/usr/local/include/QtSql -I/usr/local/include/QtSql -I/usr/local/include -I. -I. -I. -I/usr/local/include -o moc_qsql.o moc_qsql.cpp
c++ -pthread -o mysql main.o  moc_qsql.o    -L/usr/local/lib -lQtSql -L/usr/local/lib -pthread -pthread -lQtGui -L/usr/X11R6/lib -laudio -lXt -lpng -lSM -lICE -pthread -pthread -lXi -lXrender -lXrandr -lXfixes -lXcursor -lXinerama -lfreetype -lfontconfig -lXext -lX11 -lQtCore -lz -lm -pthread -lgthread-2.0 -lglib-2.0 -liconv -L/usr/local/lib/plugins/sqldrivers/ -lqsqlmysql
/usr/local/lib/plugins/sqldrivers//libqsqlmysql.so: undefined reference to `QMYSQLDriver::staticMetaObject'
/usr/local/lib/plugins/sqldrivers//libqsqlmysql.so: undefined reference to `vtable for QMYSQLDriver'
*** Error code 1

Подскажите в какую сторону копать пожалуйста. Уже сума схожу, не знаю что делать. 2 дня мучаюсь с этой проблемой.

Нашел ещё такую вот информацию, но разобраться не смог http://lists.trolltech.com/qt-interest/2007-03/thread01218-0.html
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


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


Просмотр профиля
« Ответ #5 : Май 14, 2007, 10:46 »

надо собрать сам плугин.
проект в Qt\src\plugins\sqldrivers\mysql.
зайди туда. сделай qmake и make.
Записан

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 не волк, в лес не уйдёт
an9bit
Гость
« Ответ #6 : Май 14, 2007, 11:20 »

Racheengel, Qt - это дириктория установки или какая?
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


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


Просмотр профиля
« Ответ #7 : Май 14, 2007, 11:31 »

да, именно так
например, c:\qt\4.2.3
я помню, тоже долго долбался с mySql, пока не догадался драйвер перекомпилить.
Дело в том, что если меняешь версию мускля, то надо соответствующий драйвер иметь. Только для этой версии собранный заново.
Записан

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 не волк, в лес не уйдёт
zlatko
Гость
« Ответ #8 : Май 14, 2007, 11:31 »

Цитата: "an9bit"
Racheengel, Qt - это дириктория установки или какая?

Угу, она же cис переменная $(QTDIR)
Записан
an9bit
Гость
« Ответ #9 : Май 14, 2007, 11:40 »

Ура! Я это сделал! Спасибо большое Racheengel и zlatko.
Если у кого-то будут такие проблемы с freebsd то вот ршение:

Если библиотека qt4 установлена из портов
#cd /tmp && tar xf /usr/ports/distfiles/KDE/qt-x11-opensource-src-4.2.3.tar.gz
#cd qt-x11-opensource-src-4.2.3/src/plugins/sqldrivers/mysql
#qmake-qt4 -spec freebsd-g++
добавляем в Makefile в INCPATH путь к библиотекам mysql (-I/usr/local/include/mysql)
#make
плагин сразу ствится /plugins/sqldriver
копируем вирикторий sqldriver в папку своего проекта и все должно заработать.
Ещё раз огромное спасибо Racheengel.
Также выражаю свою благодаронсть товарисчу redbeard.
Записан
bai
Новичок

Offline Offline

Сообщений: 12


Просмотр профиля
« Ответ #10 : Май 14, 2007, 11:52 »

Так получается что в каждый проект нужно копировать драйвера?
Зачем тогда они устанавливаются в /usr/local/lib/plugins/sqldriver?
Записан
Karl-Philipp
Гость
« Ответ #11 : Май 14, 2007, 15:41 »

Цитата: "Racheengel"
1. Ставишь MySql. Обычно становится он в c:\mysql.
2. Идешь в инсталляцию Qt\src\plugins\sqldrivers\mysql\
(например, это может быть C:\QT\4.2.2\src\plugins\sqldrivers\mysql).
3. Делаешь qmake, потом nmake.
4. В C:\QT\4.2.2\plugins\sqldrivers\ должен появиться файлик C:\QT\4.2.2\plugins\sqldrivers\qsqlmysql.dll, его то и копируешь в подкаталог .\sqldrivers твоего приложения.

Также придется кинуть C:\mysql\lib\opt\libmySQL.dll  в каталог с твоей ехе-хой.


1. Поставил MySql (С:\MySql)

2. В консоли выполнил:

cd %QTDIR%\src\plugins\sqldrivers\mysql
        qmake -o Makefile "INCLUDEPATH+=C:\MySQL\include" "LIBS+=C:\MySQL\lib\opt\libmysql.lib" mysql.pro
        nmake

3. Из %QTDIR%\plugins\sqldrivers взял файлик qsqlmysql.dll и скопировал его в каталог sqldrivers, который создал в каталоге проекта. На всякий случай сделал такой же (sqldrivers) каталог в каталоге с ехе-шником.

4. А также кинул файлик C:\mysql\lib\opt\libmySQL.dll в каталог с ехе-хой.

В конце компиляции программы - окошко "Database Error" с сообщением driver not loaded driver not loaded
Подскажите, пожалуйста, как быть?


версия Qt 4.1.4.

файл проекта

CONFIG += qt
QT += sql
SOURSES += main.cpp

код:

Код:
#include <QtSql>
#include <QApplication>
#include <QMessagebox>

bool createConnection();

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
if (!createConnection())
return 1;

return app.exec();
}


 
bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("base");
db.setUserName("username");
db.setPassword("password");
if (!db.open()) {
QMessageBox::critical(0, QObject::tr("Database Error"),
db.lastError().text());
return false;
}
return true;
}
Записан
an9bit
Гость
« Ответ #12 : Май 14, 2007, 16:18 »

to bai
Теперь я уже не знаю зачем они ставятся. Ибо этот файл qsqlmysql.so скопировал в /usr/local/lib/plugins/sqldrivers и в дирикторию проэкта добовлять его не надо. Видать плагины как-то косячно собираются.
Записан
bai
Новичок

Offline Offline

Сообщений: 12


Просмотр профиля
« Ответ #13 : Май 14, 2007, 20:54 »

Спасибо всем ответившим. Помогла пересборка драйвера.
Хотя считаю странным тот факт, что происходит кривая сборка драйвера при установке из портов.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


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


Просмотр профиля
« Ответ #14 : Май 14, 2007, 21:40 »

Karl-Philipp:

Цитировать

В конце компиляции программы - окошко "Database Error" с сообщением driver not loaded driver not loaded


Это окошко при компиляции появиться не может - только при выполнении приложения.

Также непонятно вот это:

Цитировать

взял файлик qsqlmysql.dll и скопировал его в каталог sqldrivers, который создал в каталоге проекта. На всякий случай сделал такой же (sqldrivers) каталог в каталоге с ехе-шником.


Что есть каталог проекта? Надо создавать sqldrivers в каталоге с exe-файлом программы.
Вообще по идее все сделано верно, должно работать.

bai:
Да нет, просто драйвер необходимо пересобирать под конкретную версию MySql. При инсталляции это не проверяется.
Записан

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 не волк, в лес не уйдёт
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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