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

Ошибка с установленным плагином sqlite

17.10.2021, 16:31. Показов 2281. Ответов 7

Author24 — интернет-сервис помощи студентам
Здравствуйте, в проекте нужно работать с двумя базами (SQLITE) одновременно, но когда добавляю имена соединений для моих БД, то дебагер начинает ругаться на то, что драйвера не загружены:
Код
QSqlQuery::exec: database not open
Unable to create a user table QSqlError("", "Driver not loaded", "Driver not loaded")
QSqlQuery::exec: database not open
Unable to create a product table QSqlError("", "Driver not loaded", "Driver not loaded")
Списки драйверов и названий connection`ов соответствено:
Код
QList("QSQLITE", "QODBC", "QPSQL")
QList("PRODUCTS", "USERS")
auth.pro
Код
QT       += core gui
QT       += sql
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    add_prod.cpp \
    authentification.cpp \
    main.cpp \
    mainwindow.cpp \
    reg_room.cpp \
    winadmin.cpp \
    winseller.cpp \
    winstorekpr.cpp

HEADERS += \
    add_prod.h \
    authentification.h \
    mainwindow.h \
    reg_room.h \
    winadmin.h \
    winseller.h \
    winstorekpr.h

FORMS += \
    add_prod.ui \
    authentification.ui \
    mainwindow.ui \
    reg_room.ui \
    winadmin.ui \
    winseller.ui \
    winstorekpr.ui

RC_FILE = file.rc


# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
mainwindow.h
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
55
56
57
58
59
60
61
62
63
64
65
66
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include <QString>
#include <QtSql/QtSql>
#include <QSqlQuery>
#include <QtSql/QSql>
#include "authentification.h"
#include "reg_room.h"
#include "winadmin.h"
#include "add_prod.h"
#include "winseller.h"
#include "winstorekpr.h"
 
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    void display();
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    bool connectDB();
    bool connectDB_PROD();
 
private:
    Ui::MainWindow *ui_Main;
    authentification *ui_auth;//экземпляры окна авторизации
    reg_room *ui_reg;//и регистрации
    winadmin *ui_admin;//экземпляр окна администратора//экземпляр окна добавления товаров
    add_prod *ui_prod;
    winseller *ui_sell;
    winstorekpr *ui_strkp;
 
    QString m_username;//строка для обработки логина
    QString m_userpass;//и пароля
 
    QString m_name;
    QString m_articul;
    QString m_product_count;
    QString m_price;
 
    QString m_prof;//строка для выявления должности
 
    QString db_input;// строка для отправки запроса к базе данных
    QString db_prod_input;//строка для отправки запроса к базе данных товаров
 
    QSqlDatabase mw_db;//Экземпляр подключения к базе данных
    QSqlDatabase mw_dbProd;//Экземпляр подключения к базе данных товаров
 
    int user_counter;//Счетчик пользователей
    bool m_loginSuccesfull;//успешный вход
 
private slots:
    void authorizeUser();//Пользовательские слоты(функции)
    void registerWindowShow();
    void registerUser();
    void openProd();
    void addProduction();
};
#endif // MAINWINDOW_H
mainwindow.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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include <QDebug>//отображение сообщений программы в окне QtCreator, вместо консоли
#include <QtWidgets/QApplication>
#include <QtWidgets/QLabel>
#include <QSqlDriver>
 
#include "mainwindow.h"
#include "ui_mainwindow.h"//главное окно
#include "authentification.h"//Окно входа
#include "reg_room.h"//Окно регистрации
#include "winadmin.h"//окно админа
#include "winseller.h"//окно продавца
#include "winstorekpr.h"//окно кладовщика
#include "add_prod.h"//окно добавления товаров
 
MainWindow::MainWindow(QWidget *parent):
      QMainWindow(parent),
      ui_Main(new Ui::MainWindow)
{
 
    user_counter = 0;
    m_loginSuccesfull = false;
 
    //Создание экземпляров окна
    ui_auth = new authentification;
    ui_reg = new reg_room;
    ui_admin = new winadmin;
    ui_sell = new winseller;
    ui_strkp = new winstorekpr;
    ui_prod = new add_prod;
 
 
    connect (ui_auth, &authentification::login_button_clicked, this, &MainWindow::authorizeUser);
 
    connect (ui_auth, &authentification::destroyed, this, &MainWindow::show);
 
    connect (ui_auth, &authentification::register_button_clicked, this, &MainWindow::registerWindowShow);
 
    connect (ui_reg, &reg_room::register_button_clicked2, this, &MainWindow::registerUser);
 
    connect (ui_reg, &reg_room::destroyed, ui_auth, &authentification::show);
 
    connect(ui_admin, &winadmin::w_product_opened, this, &MainWindow::openProd);
 
    connect(ui_prod, &add_prod::add_product_clicked, this, &MainWindow::addProduction);
 
 
    if(!connectDB())
    {
        qDebug() << "Failed to connect DB";
    }
    if(!connectDB_PROD())
    {
        qDebug() << "Failed to connect DB";
    }
 
    QSqlQuery query;
 
{
    db_input = "CREATE TABLE userlist ( "//Создание БД Пользователей
               "number INTEGER PRIMARY KEY,"
               "name VARCHAR(20), "
               "pass VARCHAR(12), "
               "xpos INTEGER, "
               "ypos INTEGER, "
               "prof VARCHAR(20))";
    if (!query.exec(db_input))
 
    {
        qDebug() << "Unable to create a user table" << query.lastError();
    }
}
//611729
 
 
    {
    db_prod_input = "CREATE TABLE products_list ("// Создание БД товаров
                    "product VARCHAR(30), "
                    "articul VARCHAR(30), "
                    "count INTEGER PRIMARY KEY,  "
                    "price FLOAT )";
 
 
    if (!query.exec(db_prod_input))
 
    {
        qDebug() << "Unable to create a product table" << query.lastError();
    }
    }
    qDebug()  <<  QSqlDatabase::drivers();
    qDebug() <<QSqlDatabase::connectionNames();
    ui_Main->setupUi(this);
}
.
.
.
.
.
.
MainWindow::~MainWindow()//деструктор главного окна: в случае авторизации обновляет содержимое БД, прерывает с ней связь и уничтожает все окна приложения
{
    if (m_loginSuccesfull)
    {
        QString str_t = "UPDATE userlist "
                        "SET xpos = %2, ypos = %3 "
                        "WHERE name = '%1';";
        db_input = str_t .arg(m_username)
                         .arg(this->x())
                         .arg(this->y());
        QSqlQuery query;
        if (!query.exec(db_input))
        {
            qDebug() << "Unable to insert data" << query.lastError() << " : " << query.lastQuery();
        }
    }
    mw_db.removeDatabase("authorisation");
    qDebug() << "MainWindow Destroyed";
    mw_dbProd.removeDatabase("products");
    qDebug() << "Product Destroyed";
 
    delete ui_Main;
    exit(0);
 
 
}
 
bool MainWindow::connectDB()
{
    QSqlDatabase mw_db = QSqlDatabase::addDatabase("QSQLITE", "USERS");
    mw_db.setDatabaseName("./authorisation");
    if(!mw_db.open())
    {
        qDebug() << "Cannot open database: " << mw_db.lastError();
        return false;
    }
    return true;
}
 
bool MainWindow::connectDB_PROD()
{
    QSqlDatabase mw_dbProd = QSqlDatabase::addDatabase("QSQLITE", "PRODUCTS");
    mw_dbProd.setDatabaseName("./prod.db");
    if(!mw_dbProd.open())
    {
        qDebug() << "Cannot open database: " << mw_dbProd.lastError();
        return false;
    }
    return true;
}
Добавлено через 9 минут
Также смущает эта строчка:
Код
section .gnu_debuglink not found in C:\Qt\6.1.3\mingw81_64\plugins\sqldrivers\qsqlite.debug
В папке C:\Qt\6.1.3\mingw81_64\plugins\sqldrivers содержатся:
qsqlite.debug
qsqlite.dll
qsqlodbc.debug
qsqlodbc.dll
qsqlpsql.debug
qsqlpsql.dll
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.10.2021, 16:31
Ответы с готовыми решениями:

Ошибка с плагином JS composer
При установке плагина Visual Composer в админке выдает ошибку Fatal error: Call to undefined...

Ошибка с плагином Chronosly
Доброго времени суток! Вчера установила плагин Chronosly Event, для создания списка мероприятий, к...

Ошибка с плагином Envira Gallery
Добрый день, стоит envira gallery. В целом все вроде бы работает, но при выборе количества...

Ошибка с плагином Yoast SEO
Столкнулся с такой проблемой, после активации плагина - сайт ниже шапки не хочет грузиться,...

sqlite ошибка
Помогите пожалуйста! Ошибка unexpected token в sqlite 2.5 там где constraint ругается. alter...

7
1081 / 685 / 184
Регистрация: 30.03.2021
Сообщений: 2,138
17.10.2021, 19:03 2
Bacchus, если у Вас с одной бд все работало а с двумя ошибки-тогда я хз. Однако я сталкивался с ошибкой "driver not loaded" для драйвера QPSQL, у меня PostgreSQL 13. Проблему решил так:
1. Находим папку debug (или release если делаем финалку под деплой) в папке с проектом.
2. Именно в папку debug (или release) копируем папку plugins из Qt, у меня она D:\QT\5.12.11\mingw73_64\plugins
(переносим именно plugins а не отдельные файлы)
3. Туда же копируем .dll из папки bin Вашей бд, у меня C:\Program Files\PostgreSQL\13\bin
(там надо было штук 5 файлов, но у меня названия не совпадали с гайдом, сбросил все и методом тыка оставил нужные)

Добавлено через 19 минут
зы
может по порту конфликт? попробуйте разные порты настроить для дб и в приложении, хотя это я так, пальцем в небо... хотя о чем это я -драйвер же не грузится... но все равно
еще у меня был затык с назначением таблицы
заработало так:
C++ (Qt)
1
2
3
 model=new QSqlRelationalTableModel(this, *db);
 model->QSqlQueryModel::setQuery(QString("SELECT * FROM %1").arg(tableName));
 setModel(model);
а так не работало:
C++ (Qt)
1
2
tableView->setTable("имя таблицы");
model->select();
хотя таблица была создана и управляема через средства postresql и консоль винды.
Это я на всякий случай, если все работало с одной дб, то данный пост к делу не относится...
1
1552 / 727 / 316
Регистрация: 02.05.2020
Сообщений: 1,618
18.10.2021, 10:02 3
Цитата Сообщение от Bacchus Посмотреть сообщение
Код
QSqlQuery::exec: database not open
Unable to create a user table QSqlError("", "Driver not loaded", "Driver not loaded")
QSqlQuery::exec: database not open
Unable to create a product table QSqlError("", "Driver not loaded", "Driver not loaded")
А это весь вывод? Вроде как до этого должны быть как минимум 2 строки с содержанием Cannot open database:

Добавлено через 4 минуты
задайте переменную окружения
Код
set QT_DEBUG_PLUGINS=1
и поизучайте дебаг вокруг сообщений Cannot open database:
0
6 / 5 / 1
Регистрация: 20.12.2020
Сообщений: 92
18.10.2021, 11:40  [ТС] 4
Поэксперементировал, проблема даже не в том, что я добавляю вторую БД, а то что даю имя подключению (второй аргумент в addDatabase). Без имени подключения понятное дело с двумя бд поработать не получится

Добавлено через 1 минуту
Удалил вторую таблицу, в первой оставил название USERS — та же ошибка. Убрал название — всё норм работает.
0
1552 / 727 / 316
Регистрация: 02.05.2020
Сообщений: 1,618
18.10.2021, 12:53 5
Цитата Сообщение от Bacchus Посмотреть сообщение
Поэксперементировал, проблема даже не в том, что я добавляю вторую БД, а то что даю имя подключению (второй аргумент в addDatabase). Без имени подключения понятное дело с двумя бд поработать не получится
При создании QSqlQuery query указывайте, с какой имено базой он должен работать. Т.е. достаточно:
C++ (Qt)
1
QSqlQuery query(QSqlDatabase::QSqlDatabase("имя подключения"))
*имя подключеня "PRODUCTS" или "USERS"
0
6 / 5 / 1
Регистрация: 20.12.2020
Сообщений: 92
18.10.2021, 14:48  [ТС] 6
Спасибо, попробую указать

Добавлено через 1 час 25 минут
Указал
C++ (Qt)
1
        QSqlQuery query(QSqlDatabase::database("USERS"));
и
C++ (Qt)
1
    QSqlQuery query_prod(QSqlDatabase::database("PRODUCT"));
Теперь ошибка выходит уже при вводе данных для входа:
Код
QSqlQuery::exec: database not open
Unable to execute query - exiting QSqlError("", "Driver not loaded", "Driver not loaded")  :  ""
QSqlQuery::value: not positioned on a valid record
QSqlQuery::value: not positioned on a valid record
QSqlQuery::value: not positioned on a valid record
QSqlQuery::value: not positioned on a valid record
Password dismatch ""   ""
0
1552 / 727 / 316
Регистрация: 02.05.2020
Сообщений: 1,618
18.10.2021, 16:31 7
Лучший ответ Сообщение было отмечено Bacchus как решение

Решение

Цитата Сообщение от Bacchus Посмотреть сообщение
QSqlQuery::exec: database not open
приведите код, откуда это прилелает

Добавлено через 3 минуты
Полагаю вы дергаете QSqlQuery который точно не из этих двух:
Цитата Сообщение от Bacchus Посмотреть сообщение
QSqlQuery query(QSqlDatabase::database("USERS"));
Цитата Сообщение от Bacchus Посмотреть сообщение
QSqlQuery query_prod(QSqlDatabase::database("PRODUCT"));
Добавлено через 4 минуты
проидите поиском по всему коду, убедитесь, что создаёте все экземляры класса QSqlQuery с параметром QSqlDatabase
1
6 / 5 / 1
Регистрация: 20.12.2020
Сообщений: 92
20.10.2021, 23:49  [ТС] 8
Спасибо, прошерстил код. В функции входа не указал для Query connection. Теперь ошибок нет)
0
20.10.2021, 23:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.10.2021, 23:49
Помогаю со студенческими работами здесь

Ошибка SQLITE
Вот код. &lt;?php $db = new SQLite3('mysqlitedb.db'); $results = $db-&gt;query('SELECT bar FROM...

ошибка с базой SQLite
У меня странная ошибка при работе с базами данных. Собственно не пойму почему никак не хочет...

sqlite 3 / непонятная ошибка
import telebot import config import requests import sqlite3 from telebot import types db =...

Ошибка с SQLite базой
Доброго времени суток. дело в следующем: Подготовили Sqlite базу, написали приложение и запустили...

Странная ошибка SQLITE
При попытке вставки через объект QLineEdit в базу данных строку из символов(не цифр!!!) Кидает...


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

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