Russian Qt Forum

Qt => Базы данных => Тема начата: INZER от Июнь 01, 2022, 23:11



Название: Соединение с несуществующей БД
Отправлено: INZER от Июнь 01, 2022, 23:11
Коллеги, добрый день,
Как обработать ошибку ошибочного ввода IP сервера БД?

Довольно стандартная функция подключения к БД:
Код:
void SqlQueryExecutor::slotOpenDbConnection(QString address, QString serverName, QString login, QString password)
{
    if (QSqlDatabase::database().isOpen())
    {
        QString connectionName = QSqlDatabase::database().connectionName();
        QSqlDatabase::database(connectionName).close();
        QSqlDatabase::removeDatabase(connectionName);
    }
    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    db.setHostName(address);
    db.setDatabaseName(dbName);
    db.setUserName(login);
    db.setPassword(password);
    if (!db.open())
    {
        if (db.lastError().isValid())
            emit dbDbErrorAppears(db.lastError().type(), db.lastError().text(), serverName);
        return;
    }
    emit dbConnected(serverName);
}

Когда на сервере развернута БД все ок, соединение устанавливается, либо не устанавливается по каким то причинам.
Но если мы подключаемся по несуществующему IP поток зависает на функции open на довольно продолжительное время.
и в конце концов получаю ответ

could not connect to server: Время ожидания соединения истекло
   Is the server running on host "10.248.0.2" and accepting
   TCP/IP connections on port 5432?
QPSQL: Unable to connect

Как это время можно сократить?


Название: Re: Соединение с несуществующей БД
Отправлено: PimenS от Июнь 02, 2022, 04:56
Привет.

Как вариант установить таймаут с помощью void QSqlDatabase::setConnectOptions(const QString &options = QString())


Название: Re: Соединение с несуществующей БД
Отправлено: INZER от Июнь 02, 2022, 07:11
Спасибо за подсказку Postgresql поддерживает опцию "connect_timeout"