QSqlQuery с prepare и bindValue для имени столбца Sqlite

void updateDB(const int id, const QString& column, const QVariant& value) const
//*****
//all stuff on open DB etc.
QSqlQuery query;
query.prepare("UPDATE table SET  :column = :value WHERE id = :id ");
query.bindValue(":column", QVariant(column));
query.bindValue(":value", value);
query.bindValue(":id", id);
query.exec();

Не работает Между тем, если я переписать запрос

query.exec("UPDATE table SET " + column + " = " + value.toString() + " WHERE id = " + QString::number(id));

оно работает. Это также работает, если я удаляю: заполнитель столбца и записываю в имя столбца запроса, на котором я тестирую это. Так что кажется, что я не могу использовать bindValue и заполнители для имен столбцов, по крайней мере, с Sqlite. Но я не нашел ни в одной документации упоминания об этом.

Таким образом, нет никакого способа использовать bindValue и заполнители для имен столбцов, или я что-то упустил?

6

Решение

Правильный код здесь будет:

query.prepare(QString("UPDATE table SET %1 = :value WHERE id = :id ").arg(column));
query.bindValue(":value", value);

Вы связываете значения, а не имена полей.

П.С .: ответил перед прочтением всего вопроса. Да, вы правы — нет способа использовать bindValues ​​для связывания столбцов не только для sqlite, но и для каждой базы данных.

13

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

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

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