Несоответствие количества параметров в Qtsql

Я пытаюсь вставить данные в базу данных QtSql, но получаю сообщение об ошибке:

"Parameter count mismatch"

Что может быть, что я делаю не так?

#include <QtSql>

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

qDebug() << QSqlDatabase::drivers();

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setHostName("LOCALHOST");
db.setDatabaseName("people");
db.setUserName("root");
db.setPassword("");

if(db.open()) {
qDebug() << "Opened!";

QSqlQuery query;

query.prepare("INSERT INTO person (id, forename, surname) ""VALUES (:id, :forename, :surname)");
query.bindValue(":id", 1001);
query.bindValue(":forename", "Bart");
query.bindValue(":surname", "Simpson");
query.exec();

if( !query.exec() )
qDebug() << query.lastError().text();
else
qDebug( "Inserted!" );

db.close();

} else {
qDebug() << "Not opened";
}
}

2

Решение

У вас нет таблицы с именем person в базе данных. Вы пытаетесь вставить значения в несуществующую таблицу.


Я думаю, что сообщение об ошибке неверно. Но в любом случае я добавил CREATE в свой код, чтобы таблица была создана до INSERT заявление выполнено:

#include <QtSql>

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":memory:");

if(!db.open()){
qDebug() << "Not opened";
return 1;
}
qDebug() << "Opened!";

QSqlQuery query;

//CREATE the table before executing the INSERT statement
query.exec("CREATE TABLE person (id INTEGER, forename TEXT, surname TEXT);");

query.prepare("INSERT INTO person (id, forename, surname) ""VALUES (:id, :forename, :surname)");
query.bindValue(":id", 1001);
query.bindValue(":forename", "Bart");
query.bindValue(":surname", "Simpson");

if( !query.exec() )
qDebug() << query.lastError().text();
else
qDebug( "Inserted!" );

return 0;
}

Это печатает Inserted! сейчас. Но если я закомментирую CREATE В строке утверждения я получаю такую ​​же ошибку в вашем вопросе:

" Parameter count mismatch"
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]