Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/56: Рейтинг темы: голосов - 56, средняя оценка - 4.82
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
1

Ошибка QSqlQuery::exec: database not open

27.12.2014, 17:13. Показов 10085. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.
У меня есть несколько справочников, при вызове которых на их форме в окно Tableview загружаются данные из таблицы.

Есть так же главное окно, предназначенное тоже под определенную таблицу.
Но когда ввожу в него точно такой же код как и для выгрузки данных для справочников пишет
C++ (Qt)
1
QSqlQuery::exec: database not open
и данные не отображаются...
В чем проблема и как исправить подскажите пожалуйста.

для справочника в torgoviepredstaviteli.сpp все работает
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
Torgoviepredstaviteli::Torgoviepredstaviteli(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Torgoviepredstaviteli)
{
    ui->setupUi(this);
    QSqlQueryModel *torgovie = new QSqlQueryModel;
    QSqlQuery query;
    query.exec("SELECT * FROM torgovie_predstaviteli");
    torgovie->setQuery(query);
    ui->tableView->setModel(torgovie);
}
Тот же код для главного окна в mainwindow.сpp уже не работает
C++ (Qt)
1
2
3
4
5
6
ui->setupUi(this);
    QSqlQueryModel *torgovie = new QSqlQueryModel;
    QSqlQuery query;
    query.exec("SELECT * FROM torgovie_predstaviteli");
    torgovie->setQuery(query);
    ui->tableView->setModel(torgovie);
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.12.2014, 17:13
Ответы с готовыми решениями:

QSqlQuery::prepare: database not open
Доброго времени суток. Помогите кто может! if (m_db.isOpen()) { QSqlQuery...

QSqlQuery::prepare: database not open
делаю удаление с бази даних. выдаёт ошибку delete id 2661 sql error QSqlError("", "Driver not...

Segmentation fault на QSqlQuery::exec
Есть такой код QList<int> DBFacade::getBuildingIDs() { // Подгрузка ID всех строений. ...

Возникает ошибка "database not open" при обращении из разных потоков
Здравствуйте, пишу приложение, база хорошо работает всё окей, в некоторых промежутках, приложение...

6
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
27.12.2014, 19:05 2
Ну так найди где ты открываешь базу данных. Видимо в одном классе программа видит объект базы данных, которая открыта, а в другом нет. В query можно самому передать объект базы, попробуй явно указать.
1
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
27.12.2014, 19:09  [ТС] 3
открываю в main.cpp
C++ (Qt)
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "mainwindow.h"
#include <QApplication>
#include "QSqlTableModel"
#include "QSqlQuery"
#include "QSqlRecord"
#include <QtGui>
#include <QtSql>
#include "QMessageBox"
#include <mainwindow.h>
#include "ui_mainwindow.h"
#include <QTabWidget>
#include <QItemSelection>
#include <QtSql/QSqlRecord>
#include <QtSql/QSqlRelationalTableModel>
#include <QtSql/QSqlQuery>
#include <QtCore>
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
bool createConnection()
{
 
    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    db.setHostName("localhost");
    db.setDatabaseName("one s");
    db.setUserName("postgres");
    db.setPassword("1");
 
    if (!db.open())
    {
        QMessageBox::warning(0, QObject::tr("Ошибка"),
                             QObject::tr("Ошибка подключения к базе!!!"));
        return true;
    }
    else
    {
        QMessageBox::warning(0, QObject::tr("Все хорошо"),
                             QObject::tr("Подключился к базе!!!"));
        QSqlQuery Ex;
        Ex.exec("Pragma foreign_keys=on");
        return true;
 
    }
}
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    createConnection();
    w.show();
 
    return a.exec();
}
Как явно указать на объект базы можно?
0
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
27.12.2014, 19:13 4
QSqlQuery::QSqlQuery ( QSqlDatabase db )

Добавлено через 2 минуты
Я понял в чем проблема. Ты запрос делаешь в конструкторе mainwindow.сpp
А соединение с базой делаешь после исполнения конструктора.
1
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
27.12.2014, 19:16  [ТС] 5
И как сделать его до исполнения конструктора?
0
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
27.12.2014, 19:17 6
Лучший ответ Сообщение было отмечено lexflax как решение

Решение

C++ (Qt)
1
2
3
4
5
6
7
8
9
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
   createConnection();
    MainWindow w;
    w.show();
 
    return a.exec();
}
1
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
27.12.2014, 19:20  [ТС] 7
Благодарю, теперь понял в чем проблема была) визуальней всегда проще улавливаю.
Еще раз благодарю.
0
27.12.2014, 19:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.12.2014, 19:20
Помогаю со студенческими работами здесь

Database not open
Привет. 1. Ошибка с открытием базы данных, хотя я выполнил проверку на открытие бд, но текст...

Разница между QDialog::exec() и QDialog::Open()
Здравствуйте, уважаемые форумчане! Есть статический метод, который установлен как callback-функция...

Ошибка QSqlQuery::value: not positioned on a valid record
Здравствуйте. Выводит ошибку QSqlQuery::value: not positioned on a valid record, не могу понять...

Ошибка QSqlQuery::value: not positioned on a valid record
Здравствуйте. Мне нужно посчитать коэффициент Бергера(сумма очков соперников, которых игрок...


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

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