私のチームは以前 Qt 4.3 を使用していましたが、最新リリース (4.7.2) に更新しようとしています。
以前は 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
、もはや有効ではありません。
そのコードを削除して新しいテーブルを作成することはできましたがmyQSqlDatabase.tables()
、既存の DB の 1 つで行うと、ゼロが返されます。
Qtコードを掘り下げて、準備メソッドに次のものがあることに気付きました。
#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
最初の if ( sqlite3_prepare16_v2
) に入ります。
SQLITE_VERSION_NUMBER をどこかに低く定義する必要がありますか? 後方互換性を妨げるために私たちが間違っていることは他にありますか?
どんな助けでも大歓迎です。
ありがとう、ライロン