Откат не выполняется из-за отсутствия свободного места - PullRequest
0 голосов
/ 21 февраля 2011

Я использую QSqlDatabase для доступа к моей базе данных sqlite3.

Когда команда INSERT завершается неудачно из-за отсутствия свободного места на диске, откат также может завершиться со следующими сообщениями в моем журнале:

Database error : disk I/O error
Database driver error : Unable to fetch row
Command = INSERT OR FAIL INTO Procedure ( ProcedureUUID, ProcedureGroupUUID, DefaultLocale, Author, CanBeDeleted, VersionMajor, VersionMinor, VersionMaintenance, VersionBuild ) VALUES( :ProcedureUUID, :ProcedureGroupUUID, :DefaultLocale, "User", 1, 0, 0, 0, 0 );

(я пытаюсь регистрировать каждое событие).

В моем коде я открываю базу данных, запускаю транзакцию и затем выполняю запросы. В случае сбоя любого запроса я делаю откат.

Я ожидал, что откат будет успешным каждый раз, но он кажется, что это не так.

Может кто-нибудь объяснить, в каких случаях происходит сбой отката? И как отладить эту проблему.

Спасибо


РЕДАКТИРОВАТЬ:

Может ли быть так, что я не могу выполнить откат, потому что первая команда SQL не удалась?

1 Ответ

0 голосов
/ 24 февраля 2011

Мне кажется, я разобрался и ставлю ответ для будущих ссылок.

Если первая команда sql завершается неудачно, запрос показывается неактивным, и откат невозможен.Самый простой способ - проверить, активен ли запрос, используя isActive , прежде чем выполнять откат.

...