2014-06-10 4 views
2

사용자가 편집 할 수 있도록 tableView의 QStandardItemModel에있는 Sqlite 데이터베이스의 데이터를 표시하고 있습니다. 사용자가 "저장"을 누르거나 저장하지 않은 변경 사항으로 종료하려고하면 이러한 변경 사항을 다시 내 데이터베이스에 저장하고 싶습니다 (그러한 경우에는 약속하기 위해).tableView 데이터가 변경된 후 데이터베이스에 데이터 저장

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 업데이트 쿼리를 실행하려고 생각했습니다. 그러나 사용자가 수정 한 행에 대해서만 쿼리를 실행하는 방법이 있습니까?

답변

2

당신은 QTableView에서 테이블의 내용을 표시 QSqlTableModel를 사용할 수 있습니다

QSqlTableModel * model = new QSqlTableModel(this,db); 
model->setEditStrategy(QSqlTableModel::OnManualSubmit); 
model->setTable("someTable"); 
model->select(); 

ui->tableView->setModel(model); 

저장하거나 변경을 취소하기 위해 당신은 tranaction를 시작하고 마지막에 커밋 또는 롤백. 트랜잭션을 시작하는 것은 같은 것입니다 : 당신의 취소 버튼

if(model->submitAll()) 
    model->database().commit(); 
else 
    model->database().rollback(); 

코드 : : 당신의 저장 버튼

model->database().transaction(); 

코드 내있는 TableView는 결과를 나타내는 경우

model->revertAll(); 
model->database().rollback(); 
+0

이도 사용할 수 있습니다 join 문의 내용? –

+1

그런 경우에는 내용에'QSqlRelationalTableModel'을 사용해야합니다. 이 경우는 답과 유사합니다. – Nejat

+0

@ Nejat 및 jm. : 고맙습니다. 저는이 프로젝트에서이 지점에 갇혀 있었고, 모델 -> 데이터베이스()를 잊어 버렸습니다. 트랜잭션(); 및 model-> database(). commit(); . 내 게시물이 정말 도움이되었습니다. – Wim

0

내장 된 QSqlTableModel 클래스를 사용해야합니다. 편집 가능한 데이터 모델을 제공하며 변경 사항을 자동으로 저장할 수 있습니다.