Нужно сделать программу, которая будет искать по фамилии имени и отчеству все данные о человеке, которые записаны в бд. Ошибка заключается в том, что просто не выводятся никакие данные, хотя к базе данных подключается успешно. QDebug выдает "Unable to find table BD2", в то время как если просто загрузить данные таблицы без какой либо фильтрации, то ошибки никакой нет. Помогите пожалуйста, уже не знаю что делать, весь интернет перерыл.
if (!name.isEmpty()) filters << QString("NAME LIKE '%%1%'").arg(name).replace("%1", name); if (!fame.isEmpty()) filters << QString("FAMILIYA LIKE '%%1%'").arg(fame).replace("%1", fame); if (!ot.isEmpty()) filters << QString("OTCHESTVO LIKE '%%1%'").arg(fame).replace("%1", ot);
model->setFilter(filters.join(" AND ")); model->select();
У тебя последовательность действий неправильная: сначала открываешь сессию, потом настраиваешь модель. Кроме этого, mysql и sqlite - это 2 разных СУБД. У тебя sqlite.
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QDebug>
#include <QSqlError>
#include <QSqlRecord>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
, model(new QSqlTableModel(this))
{
ui->setupUi(this);
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("C:/Users/Snokai/Documents/bd2.db");
ui->tableView->setModel(model);
model->setTable("BD2");
if(! db.open ()){
QMessageBox::critical(this, "Ошибка", "Не удалось подключиться к базе данных");
return;
}
else {
QMessageBox::information(this, "Успешно", "База данных подключена");
}
}
MainWindow::~MainWindow()
{
db.close();
delete ui;
}
void MainWindow::on_searchButton_clicked(){
performSearch();
}
void MainWindow::performSearch()
{
QString name = ui -> lineName->text().trimmed();
QString fame = ui -> lineFame->text().trimmed();
QString ot = ui -> lineOt->text().trimmed();
QStringList filters;
if (!name.isEmpty())
filters << QString("NAME LIKE '%%1%'").arg(name).replace("%1", name);
if (!fame.isEmpty())
filters << QString("FAMILIYA LIKE '%%1%'").arg(fame).replace("%1", fame);
if (!ot.isEmpty())
filters << QString("OTCHESTVO LIKE '%%1%'").arg(fame).replace("%1", ot);
model->setFilter(filters.join(" AND "));
model->select();
qDebug() << model->lastError().text();
qDebug() << db.lastError().text();
}