Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Qt. Работа с БД.
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
potkin
Поиск по сайту и в Гугле, дал мне такое:
При компиляции Qt4 по умолчанию устанавливается только драйвер QSQLITE.
QSQLITE -- SQLite версии не ниже 3;

Для подключения к базе данных надо указать название SQL-драйвера, например:
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "MyDB1");

Ошибка:
..\bd\mainwindow.cpp:21: error: 'QSqlDatabase' was not declared in this scope 
..\bd\mainwindow.cpp:21: error: expected ';' before 'db'


Может что-то надо подключить:
#include .....

???
vadim303
не поверишь, #include <QSqlDatabase> :D
Нщ чаще проще #include <QtSql>
Litkevich Yuriy
И ещё, модуль QtSql по умолчанию не подключен к проекту. Его нужно добавить в pro-файл:
QT += sql
potkin
Всем спасибо !!!

Ещё вопросик:
Создал БД СкуЛайта "C:\Qt\2010.04\bin\bd\proba.db3", в "SQLite Expert Personal" версии "2.0.43.1861", версия dll СкуЛайта "3.6.16".
Написал код в Qt Creator 2.00:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
   db.setDatabaseName("C:\Qt\2010.04\bin\bd\proba.db3");
   if (!db.open()) {
       QMessageBox::critical(0, qApp->tr("Cannot open database"),
           qApp->tr("Unable to establish a database connection.\n"
                    "This example needs SQLite support. Please read "
                    "the Qt SQL driver documentation for information how "
                    "to build it.\n\n"
                    "Click Cancel to exit."), QMessageBox::Cancel);
   }
   QSqlQuery query(db);
   query.exec("SELECT id, firstname, lastname FROM table");
   QString title;
   while (query.next())
   {
      title += query.value(0).toString()+" - "+query.value(1).toString()+" - "+query.value(2).toString()+"\n";
   }
   ui->tEResul->setText(title);


При "db.open()" получаю ошибку "QMessageBox..."
Когда работаю с ":memory:" то всё работает нормально.
Когда пишу "C#", но надо использовать "sqlite3.dll" с помощью Провайдера. Может и в Qt также надо какой-то провайдер где-то скачать и как-то его использовать ???
Litkevich Yuriy
Цитата(potkin @ 27.7.2010, 16:48) *
При "db.open()" получаю ошибку "QMessageBox..."
попробуй открыть эту БД с помощью демки %QTDIR%/demos/sqlbrowser

Цитата(potkin @ 27.7.2010, 16:48) *
Может и в Qt также надо какой-то провайдер где-то скачать и как-то его использовать ???
нет, не надо, только указываешь драйвер и всё.


П.С.
странный подход: валить мусор в каталог с установленной программой (в данном случае БД в каталог с бинарями Qt SDK)
potkin
Litkevich Yuriy
Спасибо, попробую.

Пока я тока тренируюсь.
Опосля уже и будем "правильно" работать :)

Открывает БД, тоесть всё нормально работает в "%QTDIR%/demos/sqlbrowser".
А у меня не работает, ладно буду дальше мучать Qt Creator ...

Блин !!!
После открытия в "%QTDIR%/demos/sqlbrowser", всё заработало и у меня :blink:
Litkevich Yuriy
некоторые инструменты создают довольно странную БД. Которая странно себя ведёт.
Я обычно использую SQLite Database Browser, он не очень удобный, зато созданная в нём БД работает всюду.
potkin
Перехожу к FireBird, с Вашего позволения, так как не хочу плодить левых тем.
Так как собранный драйвер в Qt только SQLite, то для FireBird его надо собрать.
В "....\qt\src\sql\drivers\ibase\" есть исходники драйвера для InterBase.
Вопросики:
1) Подходят ли они для FireBird ?
2) Собрать драйвер означает: запустить Qt Creator, открыть проект "ibase" и откомпилировать, на выходе получаем "*.dll" ?
molchanoviv
Цитата(potkin @ 28.7.2010, 20:14) *
Подходят ли они для FireBird ?

Да
Цитата(potkin @ 28.7.2010, 20:14) *
2) Собрать драйвер означает: запустить Qt Creator, открыть проект "ibase" и откомпилировать, на выходе получаем "*.dll" ?

Нет. В wiki прогорга есть статья как он собирается
Litkevich Yuriy
Цитата(molchanoviv @ 28.7.2010, 23:50) *
В wiki прогорга есть статья как он собирается
мне в их статье не понравилось, то что они правят pro-файл. И ещё снизу приписка "собираем Qt..." вообще ни к чему. Эта статья больше нужна для статической сборки.
Я плагин собирал так:
переименовываем fbclient_ms.lib в fbclient.lib

cd %QTDIR%\src\plugins\sqldrivers\ibase
qmake -o Makefile "INCLUDEPATH+=F:\Firebird\Firebird_2_1\include" "LIBS+=F:\Firebird\Firebird_2_1\lib\fbclient.lib" ibase.pro
только пути свои запишите, пути должны быть без пробелов! (либо их придётся закавычить, а кавычки заэкранировать)


пример для путей с пробелами:
cd %QTDIR%d\src\plugins\sqldrivers\mysql\
qmake -o Makefile "INCLUDEPATH+=\"F:\MySQL\MySQL Server 5.1\include\"" "LIBS+=\"F:\MySQL\MySQL Server 5.1\lib\debug\libmysql.lib\"" mysql.pro
make
potkin
Это типа с консоли MSYS "собирать" :
MinGW + MSYS :blink: , ужос, я так неделю СкуЛайт собирал, когда в МС Студии писал.
Litkevich Yuriy
Цитата(potkin @ 29.7.2010, 0:49) *
Это типа с консоли MSYS "собирать" :
из командной строки виндовоза, в окружении Qt, MinGW32 и Firebird.
potkin
 в окружении Qt, MinGW32 и Firebird.

А что значит "в окружении" ???
Прописаны в "PATH" ???
AntonH851
Цитата(potkin @ 29.7.2010, 0:06) *
А что значит "в окружении" ???
Прописаны в "PATH" ???


можно использовать для подготовки окружения такой bat Файл(взят где-то из папки с qt):
Цитата
@echo off
rem
rem This file is generated
rem
echo Setting up a MinGW/Qt only environment...
echo -- QTDIR set to C:\Qt\2010.02\qt
echo -- PATH set to C:\Qt\2010.02\qt\bin
echo -- Adding C:\Qt\2010.02\bin to PATH
echo -- Adding %SystemRoot%\System32 to PATH
echo -- Adding C:\Firebird_2_1\bin to PATH
echo -- QMAKESPEC set to win32-g++
set QTDIR=C:\Qt\2010.02\qt
set PATH=C:\Qt\2010.02\qt\bin
set PATH=%PATH%;C:\Qt\2010.02\bin;C:\Qt\2010.02\mingw\bin
set PATH=%PATH%;%SystemRoot%\System32
set PATH=%PATH%;C:\Firebird_2_1\bin
set QMAKESPEC=win32-g++

cd c:\qt\2010.02\qt\src\plugins\sqldrivers\ibase

cmd.exe


Пути естественно надо свои указать
Litkevich Yuriy
Цитата(potkin @ 29.7.2010, 3:06) *
А что значит "в окружении" ???
Прописаны в "PATH" ???
да.
Смотри пимер, который привёл AntonH851
potkin
переименовываем fbclient_ms.lib в fbclient.lib

cd %QTDIR%\src\plugins\sqldrivers\ibase
qmake -o Makefile "INCLUDEPATH+=F:\Firebird\Firebird_2_1\include" "LIBS+=F:\Firebird\Firebird_2_1\lib\fbclient.lib" ibase.pro

Перепрописал пути.
Ошибок не выдало.
В "C:\Qt\2010.02.1\qt\src\plugins\sqldrivers\ibase" появились файлы/директории:
1) tmp - директория
2) Makefile - файл
3) Makefile.Debug - файл
4) Makefile.Release - файл
5) qsqlibase_resource.rc - файл
6) qsqlibased_resource.rc - файл

а ibase*.dll нигде Нет.

Забыл:
1) tmp - директория - Пустая
Litkevich Yuriy
Цитата(potkin @ 29.7.2010, 22:03) *
а ibase*.dll нигде Нет.
в %QTDIR%/plugins/sqldrivers
должны появится:
qsqlibase4.dll
qsqlibased4.dll

тестируй в
%QTDIR%/demos/sqlbrowser
potkin
в %QTDIR%/plugins/sqldrivers
должны появится:
qsqlibase4.dll
qsqlibased4.dll

Нет этих ДЛЛ-ок :unsure:
Подскажите: что делать :( ???
molchanoviv
Цитата(potkin @ 29.7.2010, 19:03) *
1) tmp - директория
2) Makefile - файл
3) Makefile.Debug - файл
4) Makefile.Release - файл
5) qsqlibase_resource.rc - файл
6) qsqlibased_resource.rc - файл

А ты make-то выполнил?
potkin
А ты make-то выполнил?

нет, выполнил "qmake", так как на команду "make" пишет "make не является внутренней или внешней ......."
DEADHUNT
Цитата(potkin @ 29.7.2010, 22:02) *
нет, выполнил "qmake", так как на команду "make" пишет "make не является внутренней или внешней ......."

значит надо make поставить(под виндой входит в набор утилит mingw), и после вызова qmake, вызывать make.
potkin
начит надо make поставить(под виндой входит в набор утилит mingw), и после вызова qmake, вызывать make.

Нашёл "make.exe" в "C:\msys\1.0\bin".
Вот что получилось:
make.jpg

2-е ошибки.
Litkevich Yuriy
Цитата(potkin @ 30.7.2010, 1:02) *
нет, выполнил "qmake", так как на команду "make" пишет "make не является внутренней или внешней ......."
у MinGW32, она называется mingw32-make.exe
чтобы всякий раз руками так длинно не писать, в каталоге с бинарями MinGW сделай bat-файл с именем make.bat и содержимым:
mingw32-make.exe %*


Цитата(potkin @ 30.7.2010, 1:35) *
Нашёл "make.exe" в "C:\msys\1.0\bin".
Вот что получилось:
make.jpg
ты msys'ом собираешь или MinGW32?
molchanoviv
Действительно стоит определиться мингв у тебя или MS Visual Studio.
potkin
Цитата
ты msys'ом собираешь или MinGW32?

Так МСИС - это только оболочка, а MinGW компилятор. В МСИС прописан путь к МинЖиВИ. Хотя именнов МСИС находится make.exe, а в МинЖиВИ ео нет.

Сборка
пишет:
Как собрать QIBASE плагин под Windows

Ниже полагается, что InterBase или Firebird установлены в C:\interbase:

Если вы используете InterBase:
     cd %QTDIR%\src\plugins\sqldrivers\ibase
     qmake -o Makefile "INCLUDEPATH+=C:\interbase\include" ibase.pro
     nmake

Если вы используете Firebird, то библиотека Firebird должна устанавливаться явно:
     cd %QTDIR%\src\plugins\sqldrivers\ibase
     qmake -o Makefile "INCLUDEPATH+=C:\interbase\include" "LIBS+=-lfbclient" ibase.pro
     nmake

Если вы используете компилятор не от Microsoft, замените nmake на make.

Помните, что C:\interbase\bin должен быть в PATH.


Ладно, юзаю "MinGW"
Запустил в конце "mingw32-make.exe", получил 2-е ошибки:
make.jpg

Цитата
переименовываем fbclient_ms.lib в fbclient.lib

А зачем переименовывать ???

Я обратно имена поменял и создало:
qsqlibased4.dll
qsqlibase4.dll

Всё работает !!!

Всем спасибо за помощь !!!

П.С. С меня пиво, куда выслать :p
Litkevich Yuriy
Цитата(potkin @ 30.7.2010, 2:11) *
А зачем переименовывать ???
потому-что fbclient_ms.lib не соответствует шаблону:
.*fbclient.*
указанному в pro-файле
Цитата(potkin @ 30.7.2010, 2:11) *
Запустил в конце "mingw32-make.exe", получил 2-е ошибки:
make.jpg
он не может выполнить компиляцию, т.к. не видит компилятора g++, о чём тебе и говорит.

П.С. ошибка там одна, а не две
potkin
Цитата
потому-что fbclient_ms.lib не соответствует шаблону:
.*fbclient.*
указанному в pro-файле

Действительно.
Вообще запутался: у меня не компилирует, если сделать как Вы написали, а если оставить имена файлов такими какими были, то команда "mingw32-make.exe" работает :unsure:
larry
Цитата(potkin @ 15.7.2010, 16:10) *
Поиск по сайту и в Гугле, дал мне такое:
При компиляции Qt4 по умолчанию устанавливается только драйвер QSQLITE.
QSQLITE -- SQLite версии не ниже 3;

Для подключения к базе данных надо указать название SQL-драйвера, например:
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "MyDB1");

Ошибка:
..\bd\mainwindow.cpp:21: error: 'QSqlDatabase' was not declared in this scope 
..\bd\mainwindow.cpp:21: error: expected ';' before 'db'


Может что-то надо подключить:
#include .....

???


время прошло,но может поможет кому-нибудь другому....
#include <QtSql>
Гость
Цитата(vadim303 @ 15.7.2010, 16:25) *
не поверишь, #include <QSqlDatabase>
Нщ чаще проще #include <QtSql>

У меня тоже самое, чего то еще надо инсталлировать, нету этих описателей
Обискал и директории mingw(QtCreator) и самого набора языка GNU
Litkevich Yuriy
Если используется модуль QtSql, то его сначала нужно подключить к проекту, для этого в pro-файле нужно добавить строчку
QT += sql
подробности в описании модуля

П.С.
по умолчанию подключены только 2 модуля: QtCore и QtGui
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.