2010-12-14 3 views
3
이가

:이 할 경우QSqlTableModel 빈 결과 내가 할 경우

Name: David 

그러나 :

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

가 출력이 (예상대로)입니다

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

대단히 감사합니다. –

관련 문제