7
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));

できます。:column プレースホルダーを削除して、これをテストしているクエリ列名に書き込む場合にも機能します。したがって、少なくともSqliteでは、bindValueとプレースホルダーを列名に使用できないようです。しかし、これに関するドキュメントの言及は見つかりませんでした。

bindValue とプレースホルダーを列名に使用する方法はありませんか、それとも何か不足していますか?

4

1 に答える 1