우리 팀은 이전에 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 입력된다
SQLITE_VERSION_NUMBER을 어딘가에 더 낮게 정의해야합니까? 이전 버전과의 호환성을 막기 위해 잘못된 조치를 취하고 있습니까?
도움을 주시면 감사하겠습니다.
감사합니다, 저자의 웹 사이트에서 다운로드 Liron
사실 우리에게는 옵션이 아닙니다. 응용 프로그램이 배포되었고 많은 데이터베이스 사본이 있습니다. 우리는 문제없이 이전 DB를 읽을 수 있어야합니다. – Liron
방금 테스트 해 보았습니다. 이전 DB를 가져 와서 sqlite.exe로 읽어보고 텍스트 파일로 덤프하십시오. 해당 텍스트 파일에서 새 DB를 만듭니다. 그런 다음 해당 파일을 텍스트 파일로 덤프하면 (예상대로) 동등합니다. 문제는 Qt 코드 자체와 sqlite 코드가 아닌 것 같습니다. – Liron
다른 누구도 해설하지 않았기 때문에 대답을 선택했습니다. Qt 코드의 문제는 결코 해결되지 않았지만 우리는이 문제를 해결했습니다. – Liron