Моя команда ранее использовала Qt 4.3 и пытается обновить ее до последней версии (4.7.2).
До того, как мы использовали плагин qsqlite, но эта функциональность была перенесена в основной компонент QSqlQt.
Теперь, когда мы обновились, мы не можем читать наши старые базы данных.Это происходит потому, что когда мы создавали наши таблицы, мы создавали их следующим образом:
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()
на одной из существующих БД, она вернет ноль.
Я заметил, копаясь в коде Qt, что метод prepare имеет:
#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
).
Должны ли мы определять SQLITE_VERSION_NUMBER где-нибудь ниже?Есть ли что-то еще, что мы делаем неправильно, чтобы предотвратить обратную совместимость?
Буду признателен за любую помощь.
Спасибо, Лирон