powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Проверка на read only
4 сообщений из 4, страница 1 из 1
Проверка на read only
    #37522694
maximand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проект mmex написан на wxWidgets.
Перед началом работы приложения, база проверяется на возможность писать в неё.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    try {
        db.Begin(WXSQLITE_TRANSACTION_IMMEDIATE);
        db.Commit();
        } catch (wxSQLite3Exception &e) {
        err = e.GetExtendedErrorCode();
        if (err != SQLITE_CANTOPEN && err != SQLITE_READONLY && err != SQLITE_NOTADB) {
            throw;
        }
Это работает только если сам файл защитить от записи, но если его открыть, например в SQLiteman и сделать запрос, то mmex при старте начинает ждать 60 секунд, затем аварийный останов.

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

Теперь хочу сделать функцию, которая будет определять состояние базы, на предмет, можно ли изменять её. Такую, чтобы работала быстро.
Какие есть варианты?
...
Рейтинг: 0 / 0
Проверка на read only
    #37522804
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maximandКакие есть варианты?Стартовать проверку в отдельном потоке?
...
Рейтинг: 0 / 0
Проверка на read only
    #37523005
maximand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovmaximandКакие есть варианты?Стартовать проверку в отдельном потоке?
Есть пример в разрезе wxWidgets?

Я думаю задать параметр тайм аута = 2 сек и сделать цикл чтоб раз пять проверить, при этом выводить прогресс бар, чтобы было очевидно, чем система занята.
...
Рейтинг: 0 / 0
Проверка на read only
    #37535463
maximand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Реализовал следующим образом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
            try {
            db->SetBusyTimeout( 2000 );
            db->Begin(WXSQLITE_TRANSACTION_IMMEDIATE);
            db->Commit();

            //if got any error that mean we can use DB but in read only mode
            } catch (wxSQLite3Exception &e) {
            err = e.GetExtendedErrorCode();
            errStr = e.GetMessage();
            }
            if (err!=SQLITE_OK)
            {
                wxLogDebug(wxT("Database::write attemption: Exception"), errStr);
                wxLogError(wxString::Format(_("Error: %s"), errStr.c_str()));
            }
        }
            return (db);
Осталось только записать куда-то что запись в БД не прошла.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Проверка на read only
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]