Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/78: Рейтинг темы: голосов - 78, средняя оценка - 4.92
Юный падаван
17 / 17 / 0
Регистрация: 19.03.2009
Сообщений: 253
1

Qt + PostgreSQL

05.08.2010, 09:08. Показов 14179. Ответов 18
Метки нет (Все метки)

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

Вот код
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#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
C++
1
2
3
4
5
6
7
TEMPLATE = app
QT += sql
 
TARGET = 
DEPENDPATH += .
INCLUDEPATH += .
SOURCES += main.cpp
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.08.2010, 09:08
Ответы с готовыми решениями:

PostgreSQL
доброго времени суток, решил сдружить Qt и PostgreSQL (4.8.0 и 8.4 соответственно) OS: Win7....

Qt PostgreSQL
Вкратце о приложении:при запуске приложения в основной форме (main.cpp) осуществляется связь с...

Драйвер postgresql в qt
Подскажите пожалуйста как собрать драйвер postgresql в qt на ubuntu? Добавлено через 26 минут...

Qt 4 подключение к PostgreSQL
Просветите новичка. Мне необходимо написать на Qt программу для работы с базой данных PostgreSQL....

18
2096 / 1261 / 171
Регистрация: 01.02.2009
Сообщений: 2,842
05.08.2010, 09:29 2
Это, конечно, C#, но вот какую строку для подключения к PostgreSQL формировал я.
C#
1
string connection = "Server=" + set.ServerHostName + "; Port=" + set.Port.ToString() + "; Database=" + set.NameDataBase + "; UserID=" + tbLogin.Text + "; Password=" + tbPassword.Text + ";";
0
Юный падаван
17 / 17 / 0
Регистрация: 19.03.2009
Сообщений: 253
05.08.2010, 09:35  [ТС] 3
Цитата Сообщение от kirill29 Посмотреть сообщение
Это, конечно, C#, но вот какую строку для подключения к PostgreSQL формировал я.
C#
1
string connection = "Server=" + set.ServerHostName + "; Port=" + set.Port.ToString() + "; Database=" + set.NameDataBase + "; UserID=" + tbLogin.Text + "; Password=" + tbPassword.Text + ";";
Я так понимаю в моем случае это для подключения служит:
C++
1
2
3
4
5
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
db.setHostName("localhost");
db.setDatabaseName("testdb");
db.setUserName("andrei");
db.setPassword("letmein");
0
2096 / 1261 / 171
Регистрация: 01.02.2009
Сообщений: 2,842
05.08.2010, 09:37 4
Я думаю, что необходимо указать еще и порт , по которому подключаться к базе.
0
Юный падаван
17 / 17 / 0
Регистрация: 19.03.2009
Сообщений: 253
05.08.2010, 09:40  [ТС] 5
Добавила строку
C++
1
db.setPort(5432);
Все тоже самое
0
2096 / 1261 / 171
Регистрация: 01.02.2009
Сообщений: 2,842
05.08.2010, 10:01 6
Какую версию PostgreSQL используете?
0
Юный падаван
17 / 17 / 0
Регистрация: 19.03.2009
Сообщений: 253
05.08.2010, 10:06  [ТС] 7
Цитата Сообщение от kirill29 Посмотреть сообщение
Какую версию PostgreSQL используете?
Версия PostgreSQL 8.4.2
0
2096 / 1261 / 171
Регистрация: 01.02.2009
Сообщений: 2,842
05.08.2010, 10:18 8
В PostgreSQL есть команды на запуск и остановку сервиса. Посмотри в Пуск -> Все программы -> PostgreSQL. Возможно, что не запустился сервис.
В принципе должно работать раз в уроке таким образом подключались.

PS: В свое время у меня с 8.4 дела как-то не пошли, поэтому установил версию 8.3.7. Проблем не возникало.
0
Юный падаван
17 / 17 / 0
Регистрация: 19.03.2009
Сообщений: 253
05.08.2010, 10:27  [ТС] 9
Цитата Сообщение от kirill29 Посмотреть сообщение
В PostgreSQL есть команды на запуск и остановку сервиса. Посмотри в Пуск -> Все программы -> PostgreSQL. Возможно, что не запустился сервис.
В принципе должно работать раз в уроке таким образом подключались.

PS: В свое время у меня с 8.4 дела как-то не пошли, поэтому установил версию 8.3.7. Проблем не возникало.
Только у меня linux, что-то я не вижу Пуск -> Все программы -> PostgreSQL
0
kirill29
05.08.2010, 10:33
  #10

Не по теме:

Цитата Сообщение от Almareta Посмотреть сообщение
Только у меня linux, что-то я не вижу Пуск -> Все программы -> PostgreSQL
Ведь хотел сразу про ОС уточнить...

0
Юный падаван
17 / 17 / 0
Регистрация: 19.03.2009
Сообщений: 253
06.08.2010, 14:09  [ТС] 11
Другие идеи есть?

Добавлено через 20 часов 38 минут
Может есть какой стандартный способ подключения БД?
В билдере например подключение через ADOConnection и есть подробное описание всего подключения,куда тыкнуть.Порылась в гугле, ни одного толкового примера на эту тему...

Добавлено через 5 часов 40 минут
Совсем никаких идей?
0
Юный падаван
17 / 17 / 0
Регистрация: 19.03.2009
Сообщений: 253
09.08.2010, 09:02  [ТС] 12
Проблема заключается ещё в следующем. В уроке написано

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


Ввожу консоль вышеприведённые команды.
После строчки \i createtable.sql пишет
"Нет такого файла или каталога"
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
09.08.2010, 10:54 13
Цитата Сообщение от Almareta Посмотреть сообщение
После строчки \i createtable.sql пишет
"Нет такого файла или каталога"
На всякий случай: \i createtable.sql - это команда не оболочки (bash, tcsh, etc...), а консольного клиента psql
1
Юный падаван
17 / 17 / 0
Регистрация: 19.03.2009
Сообщений: 253
09.08.2010, 10:57  [ТС] 14
Цитата Сообщение от easybudda Посмотреть сообщение
На всякий случай: \i createtable.sql - это команда не оболочки (bash, tcsh, etc...), а консольного клиента psql
На всякий случай, я в курсе.
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
09.08.2010, 15:05 15
Almareta, скажи, какое отличие PostrgeSQL от MySQL ? что-то я никогда не задавался этим вопросом.. работает, ну и славно
1
Юный падаван
17 / 17 / 0
Регистрация: 19.03.2009
Сообщений: 253
09.08.2010, 15:16  [ТС] 16
разница в том, что задача по условию должна быть выполнена в Postgre, а не в MySQL )
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
09.08.2010, 15:17 17
аааа.. а я то думал в этом есть какой-то смысл
спасибо.
1
Юный падаван
17 / 17 / 0
Регистрация: 19.03.2009
Сообщений: 253
10.08.2010, 08:52  [ТС] 18
Проблема решилась.Хочу описать то, что я сделала, мало ли у кого будут такие же проблемы.

Драйвер для PSQL установила через Synaptic.Дрова находятся в папке /usr/lib/qt4/plugins/sqldrivers.
Далее в pgAdmin создала базу testdb, в Query загрузила запрос, что был в уроке,выполнила запрос.
Далее скомпилировала программу, всё заработало.Код приведён ниже.

main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#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("gorans");
        db.setPassword("");
    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
C++
1
2
3
4
5
6
7
8
TEMPLATE = app
QT += sql
 
 
TARGET = 
DEPENDPATH += .
INCLUDEPATH += .
SOURCES += main.cpp
createtable.sql
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE music (
    artist CHARACTER VARYING(255) NOT NULL,
    album CHARACTER VARYING(255),
    title CHARACTER VARYING(255) NOT NULL,
    release_year CHARACTER(4)
);
 
INSERT INTO music VALUES ('Nightwish', 'Highest Hopes', 'Nemo', '2005');
INSERT INTO music VALUES ('Nightwish', 'Oceanborn', 'Walking In th Air', '1998');
INSERT INTO music VALUES ('Ludwig van Beethoven', 'Symphonie No 9, opus 125', 'Part 1 - Allegro ma non Tropo', '1824');
INSERT INTO music VALUES ('Ludwig van Beethoven', 'Symphonie No 9, opus 125', 'Part 2 - Molto Vivace', '1824');
INSERT INTO music VALUES ('Ludwig van Beethoven', 'Symphonie No 9, opus 125', 'Part 3 - Adagio Molto e Cantabile', '1824');
INSERT INTO music VALUES ('Ludwig van Beethoven', 'Symphonie No 9, opus 125', 'Part 4 - Presto- Allegro assai', '1824');
Спасибо всем кто пытался помочь!!!Тема закрыта.
1
10 / 8 / 5
Регистрация: 06.12.2018
Сообщений: 79
18.11.2019, 17:31 19
Не лишним будет добавить, что, как вариант, при проблеме с драйверами, можно добавить пути в переменные среды к C:\...\PostgreSQL\9.4\lib и C:\...\PostgreSQL\9.4\bin. Я так решил проблему.
0
18.11.2019, 17:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.11.2019, 17:31
Помогаю со студенческими работами здесь

Подключение PostgreSQL к QT
Не пойму в чем дело #include &quot;mainwindow.h&quot; #include &quot;ui_mainwindow.h&quot; #include...

Подключение PostgreSQL к QT
Подскажите как с нуля посгрю к кьют подключить, или ссылочек на инфу, на просторах сети не чего...

QSqlRelationalTableModel + PostgreSQL
Добрый день! Возникла проблема с QSqlRelationalTableModel. Есть две таблицы. table1 - содержит...

Qt 4 подключение к PostgreSQL
Мне нужно сделать приложение чтоб подключиться к postgresql и вывести таблицы Установил все нужные...

Qt Postgresql сохранение изменений в бд
Здравствуйте, помогите разобраться, открывается таблицы базы данных, возможно изменить значений...

Как подключить PostgreSQL
Добрый день. Как подключить PostgreSQL? Выдает ошибки при подключении. Видимо не хватает каких то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru