QSqlite изменения - PullRequest
       24

QSqlite изменения

1 голос
/ 22 марта 2011

Моя команда ранее использовала 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 где-нибудь ниже?Есть ли что-то еще, что мы делаем неправильно, чтобы предотвратить обратную совместимость?

Буду признателен за любую помощь.

Спасибо, Лирон

1 Ответ

1 голос
/ 22 марта 2011

sqlite, загруженный с сайта авторов, поставляется с программой командной строки.Если ваша база данных несовместима, вы можете легко использовать ее для экспорта данных в текстовый файл и загрузки в новую базу данных.

...