Russian Qt Forum

Qt => Базы данных => Тема начата: almareta от Август 09, 2010, 10:04



Название: Qt + PostgreSQL
Отправлено: almareta от Август 09, 2010, 10:04
Здравствуйте!Я с вопросом, никак не могу разобраться.Нашла урок по Qt http://symmetrica.net/qt4/lesson1.htm (http://symmetrica.net/qt4/lesson1.htm) в котором работают с базой данных.
Сделала всё как описано - не выходит, попробовала скачать исходники и скомпилировать(предварительно описав в консоли вышеуказанные команды) - тоже не выходит.Пишет,как указано в коде,"БД не найдена".
С PostgreSQL работала через pgAdmin 3 (v 1.10.0), так более наглядно(с SQL запросами достаточно не плохо знакома, умею создавать таблицы, заполнять данными и "вытаскивать" нужную информацию ).
Пожалуйста помогите разобраться!

Вот код

main.cpp
Код:
#include <QtDebug>
#include <QtGui>
#include <QSqlDatabase>
#include <QSqlQueryModel>
#include <QSqlError>
#include <QTableView>
 
 
int main(int argc, char *argv[])
{
        QApplication app(argc, argv);
       
        QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
        db.setHostName("localhost");
    db.setDatabaseName("testdb");
    db.setUserName("andrei");
    db.setPassword("letmein");
    if (!db.open())
        {
                qDebug() << QObject::trUtf8("Бд не найдена") << db.lastError().text();
                return -1;
        }
       
        QSqlQueryModel * model = new QSqlQueryModel(0);
        model->setQuery("SELECT * FROM music");
        model->setHeaderData(0, Qt::Horizontal, QObject::trUtf8("Автор"));
        model->setHeaderData(1, Qt::Horizontal, QObject::trUtf8("Альбом"));
        model->setHeaderData(2, Qt::Horizontal, QObject::trUtf8("Произведение"));
        model->setHeaderData(3, Qt::Horizontal, QObject::trUtf8("Год выхода"));
       
        QTableView * view = new QTableView(0);
        view->setModel(model);
        view->setWindowTitle(QObject::trUtf8("Музыкальный каталог"));
        view->show();
       
        return app.exec();
}

tableviewer.pro
Код:
TEMPLATE = app
QT += sql
 
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
SOURCES += main.cpp

Версия PostgreSQL 8.4.2
OC Linux


Название: Re: Qt + PostgreSQL
Отправлено: crossly от Август 09, 2010, 10:49
а b.lastError().text() что говорит??


Название: Re: Qt + PostgreSQL
Отправлено: almareta от Август 09, 2010, 10:54
"Бд не найдена"

Проблема заключается ещё в следующем. В уроке написано

...запустите сервер PostrgeSQL а вашем компьютере. Далее командуйте
createdb testdb
теперь войдите в консольный клиент PostrgeSQL:
psql testdb
и скомандуйте
\i createtable.sql


Ввожу консоль psql вышеприведённые команды.
После строчки \i createtable.sql пишет
"Нет такого файла или каталога"


Название: Re: Qt + PostgreSQL
Отправлено: crossly от Август 09, 2010, 11:13
ну дык там же написано http://symmetrica.net/qt4/qt4-1src.tar.gz (http://symmetrica.net/qt4/qt4-1src.tar.gz) там есть этот файлик


Название: Re: Qt + PostgreSQL
Отправлено: almareta от Август 09, 2010, 11:15
Собственно я и компилирую то, что в примере )


Название: Re: Qt + PostgreSQL
Отправлено: almareta от Август 09, 2010, 11:59
Возможно я что-то неправильно делаю...


Название: Re: Qt + PostgreSQL
Отправлено: mega от Август 09, 2010, 13:00
А драйвер для постгре собирали? По умолчанию его нет. По пути qt\plugins\sqldrivers (может и другой путь) на вашем компьютере должны лежать файлы для различных БД. Посмотрите там. Если нет, то читайте мануалы по сборке.
Вот ссылка на офиц. руководство http://doc.qt.nokia.com/4.5/sql-driver.html#how-to-build-the-qpsql-plugin-on-unix-and-mac-os-x.


Название: Re: Qt + PostgreSQL
Отправлено: crossly от Август 09, 2010, 13:00
там есть нужный тебе *.sql файл


Название: Re: Qt + PostgreSQL
Отправлено: almareta от Август 09, 2010, 13:18
Спасибо за столь оперативные ответы! :)
Сейчас буду пытаться.


Название: Re: Qt + PostgreSQL
Отправлено: almareta от Август 09, 2010, 13:32
Ввожу в консоль то, что пишут в документации:
Код:
cd $QTDIR/src/plugins/sqldrivers/psql
qmake "INCLUDEPATH+=/usr/include/pgsql" "LIBS+=-L/usr/lib -lpq" psql.pro
make

Нет такого файла или каталога.
Вопрос как мне узнать директорию куда Qt установлен.Устанавливался он вообще через Synaptic.


Название: Re: Qt + PostgreSQL
Отправлено: crossly от Август 09, 2010, 14:31
qmake -v


Название: Re: Qt + PostgreSQL
Отправлено: almareta от Август 09, 2010, 14:39
показал путь /usr/lib/

Только там нет папки plugins или хоть что-то касающееся SQL


Название: Re: Qt + PostgreSQL
Отправлено: BRE от Август 09, 2010, 15:05
показал путь /usr/lib/

Только там нет папки plugins или хоть что-то касающееся SQL
Посмотри в /usr/lib/qt4


Название: Re: Qt + PostgreSQL
Отправлено: кып от Август 09, 2010, 15:12
Вопрос как мне узнать директорию куда Qt установлен.Устанавливался он вообще через Synaptic.
Установи драйвер для postgresql через Synaptic и будет щастье.
Поищи пакет что-то вроде libqt4-pgsql


Название: Re: Qt + PostgreSQL
Отправлено: almareta от Август 09, 2010, 15:25
показал путь /usr/lib/

Только там нет папки plugins или хоть что-то касающееся SQL
Посмотри в /usr/lib/qt4

Папку с плагинами нашла, дров под Postgre там не было.Нашла через Synaptic плагин, загрузила, установила.В папке появился ещё один файл libqsqlpsql.so. Скомпилировала прогу.Появилась следующая ошибка.

Starting /home/gorans/QT profects/qt4-1src/tableviewer...
"Бд не найдена" "FATAL:  database "testdb" does not exist
QPSQL: Unable to connect"
/home/gorans/QT profects/qt4-1src/tableviewer exited with code 255

Где и что я ещё забыла создать/сделать?)


Название: Re: Qt + PostgreSQL
Отправлено: almareta от Август 09, 2010, 15:40
и каким образом моя программа взаимодействует с файлом createtable.sql?


Название: Re: Qt + PostgreSQL
Отправлено: mega от Август 09, 2010, 15:43
Помнится у меня была такая трабла, что проект собирался только в release-версии. Попробуй. :)

А с помощью createtable.sql просто создаешь таблицу и наполняешь ее данными. Один раз, до запуска программы.
В программе просто производится выборка.


Название: Re: Qt + PostgreSQL
Отправлено: almareta от Август 09, 2010, 15:53
Самое занимательное - запустилось.Но вышла только форма без каких либо данных ))


Название: Re: Qt + PostgreSQL
Отправлено: mega от Август 09, 2010, 15:55
Ну значит таблицы нету. Через pgAdmin открой createtable.sql, ну и соответственно запусти на исполнение.


Название: Re: Qt + PostgreSQL
Отправлено: crossly от Август 09, 2010, 17:11
Цитировать
createdb testdb
теперь войдите в консольный клиент PostrgeSQL:
psql testdb
и скомандуйте
\i createtable.sql


Ввожу консоль psql вышеприведённые команды.
После строчки \i createtable.sql пишет
"Нет такого файла или каталога"

в createtable.sql создаются таблицы.... у тебя они не созданы...


Название: Re: Qt + PostgreSQL
Отправлено: almareta от Август 10, 2010, 07:40
ЕЕЕ!Спасибо всем большое, заработало!!!Наконец то разобралась с этой проблемой!!!:)