5
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();
は機能しません。一方、私が列名SqliteのprepareおよびbindValueを使用するQSqlQuery
query.exec("UPDATE table SET " + column + " = " + value.toString() + " WHERE id = " + QString::number(id));
にクエリを書き直すと、それは動作します。また、削除すると動作します:列のプレースホルダと、これをテストしているクエリの列名に書き込む。したがって、少なくともSqliteでは、bindValueとプレースホルダをカラム名に使用できないようです。しかし、私はどのドキュメンテーションでもこれについて言及していませんでした。
したがって、bindValueとプレースホルダを列名に使用する方法はありませんか、何か不足していますか?ここ
Qtのドキュメントや他のドキュメントでは、これについてどこかに言いますか? '私は検索したが見つかりませんでした。 – Littlebitter
バインド値はQtのものではなく、SQLのものです。ここでは、たとえばhttp://use-the-index-luke.com/sql/where-clause/bind-parametersなどの情報を読むことができます。引用:「バインド・パラメータはSQL文の構造を変更できません。つまり、表名または列名にバインド・パラメータを使用できません。 – Amartel