Qt SQLite - нет совпадения запросов или параметров - PullRequest
0 голосов
/ 20 февраля 2020

Жонглирование между получением двух разных ошибок.

void summary::on_pushButton_saveSummary_clicked()   
{
    if(db.open())
    {
        query.exec("insert or replace into [PN:"+partNum+" CN:"+chargeNum+"](total, defects, rust) values(1, 2, 3)");
        if (!query.exec())
        {
        qDebug() << query.lastError();
        qDebug() << query.exec()<<endl;
        }
     }
    else
    {
        qDebug() << db.lastError();
    }
}

Вышеприведенное дает ошибку: QSqlError ("", "Невозможно получить строку", "Нет запроса")

Пока:

void summary::on_pushButton_saveSummary_clicked()
{
    if(db.open())
    {
        qDebug() << "db open";
        int a = 3;
        int b = 1;
        int c = 3;

        query.prepare("insert into [PN:"+partNum+" CN:"+chargeNum+"](total, defects, rust) values(:total, :defects, :rust)");
        query.bindValue(":total", a);
        query.bindValue(":defects", b);
        query.bindValue(":rust", c);

        if (!query.exec())
        {
        qDebug() << query.lastError();
        qDebug() << query.exec()<<endl;
        }
    }
    else
    {
        qDebug() << db.lastError();
    }
}

Выход: QSqlError ("", "Несоответствие количества параметров", "")

Конструктор имеет:

db.setDatabaseName("/home/igraves/Databases/testdb");
db.open();
QString partNum = "134345";
QString chargeNum = "3452";
query.prepare("create table if not exists [PN:"+partNum+" CN:"+chargeNum+"](total int, defects int, rust int)");
query.exec();

Таблица создается, я могу видеть это. Так я угадал синтаксис? Хотя это так, как пишет вики Qt ...

Редактировать: Добавление некоторого материала .h

    QString partNum;
    QString chargeNum;
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    QSqlQuery query;

Ответ: Мои переменные QString были временными, после того, как конструктор был сделан, они вышли за рамки. Поменял мой .h

QString partNum = "124124";
QString chargeNum = "234234";

1 Ответ

0 голосов
/ 20 февраля 2020

Я вижу, по крайней мере, следующие ошибки:

  • Вы не задаете путь к базе данных.
  • Не открывайте базу данных при создании таблицы.
  • «134345» и «3452» назначаются временным переменным вместо членов класса

С учетом вышеизложенного в конструкторе должно быть следующее:

partNum = "134345";
chargeNum = "3452";
db.setDatabaseName("/path/of/database.db");
if(db.open())
    query.exec(QString("create table if not exists [PN:%1 CN:%2](total int, defects int, rust int)")
               .arg(partNum)
               .arg(chargeNum));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...