2017-05-15 5 views
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を使用しています。

+0

パラメータが* SQL *文字列に置き換えられないため、クエリは何も返しません。しかし、どんな場合でも、 'next()'は決して真実を返すべきではありません... –

+0

私はあなたが '文字列の中で置き換えられた'ということを理解しませんでした。バインド値への参照ですか? –

+0

「ABC%」または「ABC%」を検索しますか? –

答えて

0

@CL。ヒントをありがとう。私はこのラインを試してみました、それが働いた:

query.prepare("SELECT * FROM METADATA WHERE ITEM LIKE '" + itemToSearch + "%'"); 

どうやらbindValueは、この場合には不適切でした。

関連する問題