crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QSQLITE запись в бд после выключения программы
STRATEG_lLTY
  опции профиля:
сообщение 5.3.2015, 21:42
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 21.7.2014
Пользователь №: 4192

Спасибо сказали: 0 раз(а)




Репутация:   0  


Использую QT4 и вот такое подключение к бд
dbase = QSqlDatabase::addDatabase("QSQLITE");
    dbase.setDatabaseName("./DB");
    if (!dbase.open())
    {
        qDebug() << "Non sqllite!\r\n";
    }
    a_query=QSqlQuery();


Проблема в следующем, какие бы манипуляции с бд не осуществлялись, файл перезаписывается только после выключения программы
мне же необходимо, что бы это происходило сразу, так как устройство будет отключаться путём его обесточивания.
Подскажите как это сделать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 6.3.2015, 0:17
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Попробуйте использовать transaction() и commit()
http://qt-project.org/doc/qt-4.8/qsqldatab...tml#transaction
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
STRATEG_lLTY
  опции профиля:
сообщение 23.3.2015, 22:24
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 21.7.2014
Пользователь №: 4192

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 6.3.2015, 1:17) *
Попробуйте использовать transaction() и commit()

Но мне не нужны тразакции, мне надо от них избавиться.
Если я вызываю commit он постоянно выдаёт false и ясное дело проблему это не решает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 23.3.2015, 23:03
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Цитата
Но мне не нужны тразакции, мне надо от них избавиться.

Зачем?
Цитата
Если я вызываю commit он постоянно выдаёт false и ясное дело проблему это не решает.

Конечно, если вы не начали транзакцию он вернет false.

Здесь описывается что такое транзакция:
http://www.tutorialspoint.com/sqlite/sqlite_transactions.htm
нам важно свойство
Цитата
Durability: ensures that the result or effect of a committed transaction persists in case of a system failure.

Почитайте еще вот это:
https://www.sqlite.org/atomiccommit.html
И вот это:
https://www.sqlite.org/wal.html
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
STRATEG_lLTY
  опции профиля:
сообщение 25.3.2015, 3:03
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 21.7.2014
Пользователь №: 4192

Спасибо сказали: 0 раз(а)




Репутация:   0  


Что такое транзакция мне известно.
Проблема в том, что на конечном устройстве база данных не сохраняется сразу, а только после завершения(правильного) приложения.
А по ходу работы программа создаёт файл (название моей базы данных)-(сейчас не вспомню что именно, уточню на работе), например DB-(приписка).
Как я думал, это и есть файл транзакций, но мною они в явном виде не включались.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 25.3.2015, 20:56
Сообщение #6


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Это файл журнала. Если вы читали ссылки, кторые я прислал то знаете что файл журнала удаляется после успешной транзакции.
Вам нужно
1. Начать транзакцию
2. Выполнить коммит
Эти два действия гарантируют, что ваши данные записаны в БД на физическом носителе.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.2.2020, 18:31