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 и заполнители для имен столбцов, или я что-то упустил?
Правильный код здесь будет:
query.prepare(QString("UPDATE table SET %1 = :value WHERE id = :id ").arg(column));
query.bindValue(":value", value);
Вы связываете значения, а не имена полей.
П.С .: ответил перед прочтением всего вопроса. Да, вы правы — нет способа использовать bindValues для связывания столбцов не только для sqlite, но и для каждой базы данных.
Других решений пока нет …