no such table unable to execute statement, хотя все данные верны
При создании приложения случилась проблема. Программа уверяет меня, что я дурак, и у меня не существует таблицы, хотя она существует.
#include "obnovlenie_1.h"
#include "ui_obnovlenie_1.h"
#include <QString>
#include <QMessageBox>
#include <QtSql>
#include <QFileInfo>
#include <QDebug>
#include <QSqlTableModel>
#define Path_To_DBskl "C:/Users/makis/Documents/build-Novaya_Apteka2-5_15_12_mingw64_static-Debug/sqlfolder/sklad.db"
obnovlenie_1::obnovlenie_1(QWidget *parent)
: QDialog(parent)
, ui(new Ui::obnovlenie_1)
{
ui->setupUi(this);
QSqlDatabase dbskl = QSqlDatabase::addDatabase("QSQLITE", "BASE");
dbskl.setDatabaseName(Path_To_DBskl);
QFileInfo checkFile (Path_To_DBskl);
dbskl.open();
if(dbskl.open()){
qDebug("open sklad");
} else {
qDebug("not open sklad");
}
}
obnovlenie_1::~obnovlenie_1()
{
delete ui;
}
void obnovlenie_1::on_pushButton_clicked()
{
dbskl.open();
if(dbskl.open()){
qDebug("sklad open");
}
else{
qDebug("not open");
}
QSqlQuery query(QSqlDatabase::database("sklad"));
QString update_sql = "Select * from Skladik;";
model = new QSqlTableModel(this, dbskl);
query.prepare(update_sql);
QMessageBox::information(this,"",query.lastError().text());
this->close();
Вкратце по коду, то он должен выполнять посредника при замене файлов в базе данных, т.е. есть в приложении кнопка изменить, при ее нажатие появляется окошко(вот как раз код выше, это код от окошка), в этом окошке будут данные которые надо поменять, но я это пока что убрал, потому что не работает, и оставил обычный select. У меня в программе получается два qDebug, первый работает хорошо, а второй говорит что не работает, хотя я прямо над вторым qDebug`ом указываю, что я эту базу данных открываю. После этого дебага выполняется запрос, в самой программе мне выдает ошибку no such table: Skladik unable to execute statement, ничего в таблице не изменяется и окно просто закрывается(ну это программно). Ну, и я решил обратиться сюда, какие будут предложения, и будут ли?
Ответы (1 шт):
я смог решить все свои проблемы самостоятельно) Теперь у меня заносятся данные. А конкретно проблема в том, что я сам запрос UPDATE делал, но не приводил его в исполнение, и он просто как бы улетал. В конце я дописал query.exec();
и все заработало.
void obnovlenie_1::on_pushButton_clicked()
{
dbskl.open();
if(dbskl.open()){
qDebug("sklad open");
}
else{
qDebug("not open");
}
QSqlQuery query(dbskl);
model = new QSqlTableModel(this, dbskl);
query.prepare("UPDATE Skladik SET Nazvanie=:Nazvanie, Kolichestvo=:Kolichestvo, Proizvoditel=:Proizvoditel Where Kod= :Kod;");
query.bindValue(":Kod", ui->kod_change->text());
query.bindValue(":Nazvanie", ui->name_cahnge->text());
query.bindValue(":Kolichestvo", ui->kolvo_change->text());
query.bindValue(":Proizvoditel", ui->manuf_change->text());
query.exec();
QMessageBox::information(this,"",query.lastError().text());
this->close();
}