2011-03-22 2 views
1

우리 팀은 이전에 Qt 4.3을 사용 중이었고 최신 릴리스 (4.7.2)로 업데이트하려고합니다.QSqlite 변경

qsqlite 플러그인을 사용하기 전에는이 기능이 Qt의 기본 QSql 구성 요소로 옮겨졌습니다.

업그레이드가 완료되어 이전 데이터베이스를 읽을 수 없습니다.

CREATE TABLE [Characters] ([Id] INTEGER NOT NULL ON CONFLICT ROLLBACK PRIMARY KEY ON CONFLICT ROLLBACK AUTOINCREMENT UNIQUE ON CONFLICT ROLLBACK, [Project_Id] INTEGER NOT NULL ON CONFLICT ROLLBACK REFERENCES [Projects](Id) ON DELETE RESTRICT ON UPDATE RESTRICT ON INSERT RESTRICT, [CharacterName] VARCHAR(128) NOT NULL ON CONFLICT ROLLBACK UNIQUE ON CONFLICT ROLLBACK); 

하지만 ON INSERT RESTRICT가 더 이상 유효하지 : 이것은 우리가 우리의 테이블을 만들 때, 우리는이처럼 그들을 생성하지 않기 때문에 것으로 보인다.

코드를 제거하고 새 테이블을 만들 수 있었지만 기존 DB 중 하나에서 myQSqlDatabase.tables()을 수행하면 0이 반환됩니다.

#if (SQLITE_VERSION_NUMBER >= 3003011) 
    int res = sqlite3_prepare16_v2(d->access, query.constData(), (query.size() + 1) * sizeof(QChar), &d->stmt, 0); 
#else 
    int res = sqlite3_prepare16(d->access, query.constData(), (query.size() + 1) * sizeof(QChar), &d->stmt, 0); 
#endif 

을 우리가 (sqlite3_prepare16_v2), 제 1 IF 입력된다

는 I의 제조 방법을 가지고, Qt의 코드로 파고 차렸다.

SQLITE_VERSION_NUMBER을 어딘가에 더 낮게 정의해야합니까? 이전 버전과의 호환성을 막기 위해 잘못된 조치를 취하고 있습니까?

도움을 주시면 감사하겠습니다.

감사합니다, 저자의 웹 사이트에서 다운로드 Liron

답변

1

sqlite가 명령 줄 프로그램이 함께 제공됩니다. 데이터베이스가 호환되지 않으면 쉽게 데이터를 텍스트 파일로 내보내고 새 데이터베이스에로드 할 수 있습니다.

+0

사실 우리에게는 옵션이 아닙니다. 응용 프로그램이 배포되었고 많은 데이터베이스 사본이 있습니다. 우리는 문제없이 이전 DB를 읽을 수 있어야합니다. – Liron

+0

방금 ​​테스트 해 보았습니다. 이전 DB를 가져 와서 sqlite.exe로 읽어보고 텍스트 파일로 덤프하십시오. 해당 텍스트 파일에서 새 DB를 만듭니다. 그런 다음 해당 파일을 텍스트 파일로 덤프하면 (예상대로) 동등합니다. 문제는 Qt 코드 자체와 sqlite 코드가 아닌 것 같습니다. – Liron

+0

다른 누구도 해설하지 않았기 때문에 대답을 선택했습니다. Qt 코드의 문제는 결코 해결되지 않았지만 우리는이 문제를 해결했습니다. – Liron