2010-12-14 17 views
3

QSqlTableModel空の結果、私はこれを行う場合

QSqlQuery searchQuery(QString("select * from people where id = %1").arg(1)); 
if (searchQuery.next()) 
    { 
    std::cout << "Name: " << searchQuery.value(1).toString().toStdString() << std::endl; 
    } 

を出力は(予想通り)である:

Name: David 

私はこれを行う場合は、:

QSqlTableModel *model = new QSqlTableModel; 
    // Set used table 
    model->setTable("people"); 
    model->setEditStrategy(QSqlTableModel::OnManualSubmit); 
// Set where clause 
model->setFilter(QString("id=%1").arg(1)); 
model->select(); 

// Read result 
QSqlRecord record = model->record(); 
if (!record.isEmpty()) 
    { 
    std::cout << "Name from model: " << record.value(1).toString().toStdString(); 
    } 

をレコードであります空ではありませんが、出力は空白です:

Name from model: 

QSqlTableModelを使用して何が間違っているのか誰にでも見えますか?

また、どちらの方法でも、どのデータベースを使用する必要がある(つまり、QSqlDatabaseと.open()をインスタンス化するかを教えてもらえませんが、データベース?)

おかげで、

デビッド

答えて

3
QSqlRecord record = model->record(); 

あなたが "空白" のレコードを返すQSqlQueryModel::record()を使用している、代わりにQSqlQueryModelの::レコード(int型の行)。取得しているレコードは空ではありません。クエリから返されたフィールドの番号と名前を取得できます。

QSqlQueryまたはQSqlTableModelを使用すると、使用するデータベース接続を指定できます(QSqlTableModelまたはQSqlQueryコンストラクターを参照)。そうしないと、デフォルトのデータベース接続が使用されます。QSqlDatabase documentationを参照してください。明示的に名前を指定しなかった場合は、開いた接続がデフォルトの接続になります。

+0

大変感謝しています! –

関連する問題