2013-07-31 1 views
1

Jay 덕분에 문제는 QML이 아닌 데이터베이스에만있는 것으로 보입니다. QML 뷰의 QSqlQueryModel이 항목을 두 번 표시합니다.

그래서 최소한의 오류 코드는 다음과 같습니다 my.db.sqlite을 검사 할 때

QFile::remove("my.db.sqlite"); 

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
db.setDatabaseName("my.db.sqlite"); 
db.open(); 

QSqlQuery drop("drop table List;"); 
QSqlQuery create("create table List (sample_text char(200));"); 
QSqlQuery insert("insert into List values (\"some message!\");"); 

drop.exec(); 
create.exec(); 
insert.exec(); 

db.close(); 

, 내가 얻을 :

sqlite> select * from list; 
some message! 
some message! 

감사합니다!

------ 오래된 질문 -------

내가 QtSql과 QML 모두를 학습하는 과정에서 오전, 그래서 오류의 여지가있다. 거의 모든 문제가 내 질문의 제목입니다. 내가 그것을 재현하는 짧은 자체에 포함 된 코드를 만들려고 :

C를 ++ 코드 :

int main(int argc, char *argv[]) 
{ 
QGuiApplication app(argc, argv); 
QtQuick2ApplicationViewer viewer; 
    // uncomment after first launch, deleted test to make code short 
// QFile::remove("my.db.sqlite"); 

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
db.setDatabaseName("my.db.sqlite"); 
db.open(); 

QSqlQuery create("create table List (sample_text char(200))"); 
QSqlQuery create2("insert into List values (\"message !\")"); 
create.exec(); 
create2.exec(); 

QSqlQueryModel *someSqlModel = new QSqlQueryModel(); 
someSqlModel->setQuery("SELECT * FROM List"); 

QQmlContext *context = viewer.rootContext(); 
context->setContextProperty("datamodel", someSqlModel); 

viewer.setMainQmlFile(QStringLiteral("qml/test/main.qml")); 
viewer.showExpanded(); 

return app.exec(); 
} 

QML 코드 :

Rectangle { 
ListView { 
    width: 200; height: 200 
    model: datamodel 
    delegate: Row { 
     Rectangle { 
      width: 100; height: 40 
      Text { 
       anchors.fill: parent 
       text: display 
      } 
     } 
    } 
} 
} 

내가 가야 "메시지를!" 내 목록에 출력으로,하지만 얻을 :

메시지!

메시지!

어떤 도움? 감사!

답변

0

sqllite 데이터베이스에 여러 레코드가 들어 있다고 생각합니다.

이 응용 프로그램을 여러 번 실행하면 테이블 작성에 실패했다고 생각하고 다른 행을 삽입 한 다음 여러 행을 표시합니다.

sqlite 명령 줄 응용 프로그램을 사용하여 데이터베이스의 내용을 확인할 수 있습니다.

+0

나는 그렇게 생각하지 않는다. 텍스트를 변경하고 다시 컴파일하면 두 줄에서 텍스트가 바뀌지 만 추가되거나 제거 된 것이 없다. –

+0

sqlite.exe를 사용하여 데이터베이스의 내용을 확인 했습니까? – Jay

+0

예, 말씀하신대로 여러 번 문장을 올렸습니다. 하지만 난 그냥 손으로 데이터베이스 파일을 삭제하고 다시 한번 내 프로그램을 실행하려고, 그리고 데이터는 여전히 db에 두 번 만들어집니다 ... 왜? (btw 나는 이미 프로그램의 시작 부분에 QFile :: remove ("my.db.sqlite");) 코드를 가지고 있습니다. –