Qt QSqlQuery bindValue работает с? но не с: заполнителями

Я работаю с SQLite, делаю вставку в таблицу. Folowwing

QSqlQuery testQuery(QString("INSERT INTO test(testcol) VALUES(?)"));
testQuery.bindValue(0, someQStringObg);
testQuery.exec();

работает, но

QSqlQuery testQuery(QString("INSERT INTO test(testcol) VALUES(:val)"));
testQuery.bindValue(":val", someQStringObg);
testQuery.exec();

нет. testQuery.lastError().text() возвращает нет запроса Невозможно получить строку

Понятия не имею, почему все так, но очень хочется это выяснить.

1 ответ

Решение

Пожалуйста, используйте подготовить в качестве официального примера:

QSqlQuery testQuery;
testQuery.prepare("INSERT INTO test(testcol) VALUES(:val)");
testQuery.bindValue(":val", someQStringObj);
testQuery.exec();

Причина ошибки заключается в том, что запрос был выполнен перед привязкой к соответствующему заполнителю. Вы можете увидеть соответствующую часть документации конструктора:

Если запрос не является пустой строкой, он будет выполнен.

Другие вопросы по тегам