0

Qt で学んSqliteでいますが、a によって返されるレコード値にアクセスする際に問題が発生しましたQSqlQuery

詳細は以下のとおりですが、要点は次のとおりです。QSqlRecordクエリから返され、レコードのすべてのフィールドにアクセスしたいのですが、QSqlRecord.count明らかに 2 つあるのに 1 つの列しか報告していません (例では、それらはidkeywordです)。

SQLite とクエリの機能を誤解していますか、それともレコードにアクセスしようとしている方法に問題がありますか?


これは私のスキーマです:

ここに画像の説明を入力

これは私のテストデータです:

ここに画像の説明を入力

完全なコード:

void MainWindow::on_addKeywordBtn_clicked()
{

    // find a matching keyword
    QSqlQuery query(db);
    query.prepare("SELECT keyword FROM keywords WHERE keyword = ?");
    query.addBindValue(QString("blue"));
    query.exec();


    while (query.next()) {
        QString k = query.value(0).toString();
        qDebug() << "found" << k;

        QSqlRecord rec = query.record();

        qDebug() << "Number of columns: " << rec.count();

        int idIndex = rec.indexOf("id");
        int keywordIndex = rec.indexOf("keyword");
         qDebug() << query.value(idIndex).toString() << query.value(keywordIndex).toString();

    }
}

コンソール出力:

found "blue" 
Number of columns:  1 
QSqlQuery::value: not positioned on a valid record
"" "blue" 
4

1 に答える 1

0

あなたの間違いはこの行にあります、実際にクエリしてください

  query.prepare("SELECT keyword FROM keywords WHERE keyword = ?");

コードで、データベースに1列のみを返すように明示的に指示した場合、適切な解決策は次のとおりです。

  query.prepare("SELECT * FROM keywords WHERE keyword = ?");

また

   query.prepare("SELECT id, keyword FROM keywords WHERE keyword = ?");
于 2013-08-08T16:15:37.790 に答える