Russian Qt Forum

Qt => Базы данных => Тема начата: demiurg от Октябрь 15, 2011, 17:37



Название: НЕ работает проверка на соединение с БД.
Отправлено: demiurg от Октябрь 15, 2011, 17:37
Перед каждой серией запросов решил поставить проверку на соединение. А то мало ли чего бывает.  А она не работает - ни когда службу перезапускаю, ни когда база по wait_timeout рубит соединение. Постоянно true после запуска приложения.

Код:
bool c_e=db.isOpen();
 if (!c_e)     //!sql.exec(tr("SELECT 1")))
        {
        bool connected = db.open();
            if (!connected)
                {
                cout << STR(QObject::tr("Не могу запустить БД")+ 0x0d+0x0a);
                }
                else
                {
                 cout << STR(QObject::tr("Переподключение")+ 0x0d+0x0a);
                };
        };

Может ещё что надо настроить?
ЗЫ ДА , забыл,при первом подключении работает.


Название: Re: НЕ работает проверка на соединение с БД.
Отправлено: Странник от Октябрь 15, 2011, 22:58
тема несколько раз поднималась - решения, насколько я помню, так и не нашлось. да и не так оно нужно, в вашем случае. анализируйте значение, возвращаемое exec() и lastError().


Название: Re: НЕ работает проверка на соединение с БД.
Отправлено: demiurg от Октябрь 15, 2011, 23:16
Пришлось всё таки оставить "select 1".
Тоже кстати если в первый раз подключается- говорит что запрос не прошёл. А дальше - как будто подключение не разрывалось, а запрос всётаки не выполнился.

А ещё вопрос : где можно почитать про опции соединения:
CLIENT_COMPRESS
CLIENT_FOUND_ROWS
CLIENT_IGNORE_SPACE
CLIENT_SSL
CLIENT_ODBC
CLIENT_NO_SCHEMA
CLIENT_INTERACTIVE
UNIX_SOCKET
Которые в setConnectOptions прописываются. Особенно интересно что за опция CLIENT_INTERACTIVE.


Название: Re: НЕ работает проверка на соединение с БД.
Отправлено: Странник от Октябрь 16, 2011, 23:33
А ещё вопрос : где можно почитать про опции соединения:
CLIENT_COMPRESS
CLIENT_FOUND_ROWS
CLIENT_IGNORE_SPACE
CLIENT_SSL
CLIENT_ODBC
CLIENT_NO_SCHEMA
CLIENT_INTERACTIVE
UNIX_SOCKET
Которые в setConnectOptions прописываются. Особенно интересно что за опция CLIENT_INTERACTIVE.
в документации к серверу, MySQL я так понимаю. там же можно найти коды ошибок, возвращаемые драйвером. и через lastError() по коду ошибки определить, что запрос не выполнился из-за отсутствия соединения с сервером.


Название: Re: НЕ работает проверка на соединение с БД.
Отправлено: demiurg от Октябрь 18, 2011, 01:18
АА , точно, нашёл... Я думал это опции из Qt :).