0
QTableWidgetの列を埋めて、SQLテーブルから値を取得する予定の小さなコードを作成しています。Qtableで有効なレコードに配置されていない値:
はここで小さなスニペットです:
QString path = "C:\\ENTRIES.db";
QString itemToSearch = "ABC"; //This comes as a parameter to a slot actually, assigning it here for simplicity
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(path);
db.open();
QSqlQuery query(db);
query.prepare("SELECT * FROM METADATA WHERE ITEM LIKE ':item %'");
query.bindValue(":item", itemToSearch);
if(query.exec())
{
ui->tableWidgetSearchResults->setVisible(true);
ui->tableWidgetSearchResults->clearContents();
int rCount = ui->tableWidgetSearchResults->rowCount();
while(query.next())
{
ui->tableWidgetSearchResults->setRowCount(rCount + 1);
QTableWidgetItem *qtwParamName = new QTableWidgetItem;
qtwParamName->setFlags(qtwParamName->flags() & ~Qt::ItemIsSelectable & ~Qt::ItemIsEditable);
qtwParamName->setText(query.value(0).toString());
ui->tableWidgetSearchResults->setItem(rCount, 0, qtwParamName);
QTableWidgetItem *qtwParamValue = new QTableWidgetItem;
qtwParamValue->setFlags(qtwParamValue->flags() & ~Qt::ItemIsSelectable & ~Qt::ItemIsEditable);
qtwParamValue->setText(query.value(1).toString());
ui->tableWidgetSearchResults->setItem(rCount, 1, qtwParamValue);
rCount++;
}
}
else
{
qDebug() << "Error message: " << query.lastError().text() ;
ui->tableWidgetSearchResults->setHidden(true);
}
db.close();
query.value(<index here>).toString());
ライン、アプリケーションの出力を印刷実行:
QSqlQuery::value: not positioned on a valid record
QSqlQuery::value: not positioned on a valid record
私は私がここで行方不明です何のか分からないが。
注:私はQt 5.6、MSVC 2013コンパイラとSQLite 3.8を使用しています。
パラメータが* SQL *文字列に置き換えられないため、クエリは何も返しません。しかし、どんな場合でも、 'next()'は決して真実を返すべきではありません... –
私はあなたが '文字列の中で置き換えられた'ということを理解しませんでした。バインド値への参照ですか? –
「ABC%」または「ABC%」を検索しますか? –