Russian Qt Forum

Qt => Базы данных => Тема начата: deMax от Ноябрь 30, 2017, 15:20



Название: QODBC mssql2012 уменьщить timeout (Qt 5.9.1 win7 x64)
Отправлено: deMax от Ноябрь 30, 2017, 15:20
Код:
    auto db = QSqlDatabase::addDatabase( "QODBC" );
    db.setDatabaseName("DRIVER={SQL Server};Server="+config.ip+";DATABASE="+config.name);
    db.setUserName(config.login);
    db.setPassword(config.password);
    db.setConnectOptions("SQL_ATTR_LOGIN_TIMEOUT=5;SQL_ATTR_CONNECTION_TIMEOUT=5");
    return db.open();
Собственно сабж, вбиваю неправильный ip, db.open() ждет 47 секунд, SQL_ATTR_LOGIN_TIMEOUT=0 - ждет 299 секунд.


Название: Re: QODBC mssql2012 уменьщить timeout (Qt 5.9.1 win7 x64)
Отправлено: deMax от Декабрь 01, 2017, 10:20
50,60 - 68секунд, 70,80,110 - 116 секунд. Такое чувство что он переменную округляет до 68 вверх.


Название: Re: QODBC mssql2012 уменьщить timeout (Qt 5.9.1 win7 x64)
Отправлено: deMax от Декабрь 01, 2017, 13:57
testDB.pro
Код:
QT       += core gui sql
unix: LIBS += -lodbc
#unix: LIBS += -lsybdb
win32: LIBS += -lodbc32
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = testBD
TEMPLATE = app
SOURCES += main.cpp

main.cpp
Код:
#include <QApplication>
#include <QDebug>
#include <qsqldatabase.h>
#include <QSqlError>
#include <QTime>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QSqlDatabase db;
    db = QSqlDatabase::addDatabase("QODBC");
    db.setDatabaseName("DRIVER={SQL Server};Server=1.1.1.1;DATABASE=Obmen");
    db.setUserName("user");
    db.setPassword("password");
    db.setConnectOptions("SQL_ATTR_LOGIN_TIMEOUT=1");

    QTime t; t.start();
    db.open();
    qDebug()<<t.elapsed()*0.001;
    return 0;//a.exec();
}

вывод 47.523

p.s. 66, 67 - 68секунд, 68 - 89секунд, 90 - 116. 400 - 419секунд


Название: Re: QODBC mssql2012 уменьщить timeout (Qt 5.9.1 win7 x64)
Отправлено: lolobotik от Декабрь 21, 2017, 12:35
Код:
    db = QSqlDatabase::addDatabase("QODBC3");
    db.setConnectOptions("SQL_ATTR_LOGIN_TIMEOUT=5");
    db.setDatabaseName("DRIVER={SQL Server};"+DatabaseAddressString+"Uid=****;Port=***;Pwd=****;");
Насколько я помню, у меня такая ерунда решилась установкой SQL_ATTR_LOGIN_TIMEOUT до setDatabaseName. После setDatabaseName писать уже бесполезно.


Название: Re: QODBC mssql2012 уменьщить timeout (Qt 5.9.1 win7 x64)
Отправлено: deMax от Декабрь 22, 2017, 09:50
Цитировать
    QSqlDatabase db;
    db = QSqlDatabase::addDatabase("QODBC3");
    db.setConnectOptions("SQL_ATTR_LOGIN_TIMEOUT=5;SQL_ATTR_CONNECTION_TIMEOUT=5");
    db.setDatabaseName("DRIVER={SQL Server};Server=1.1.1.1;DATABASE=Obmen");
//    db.setUserName("user");
//    db.setPassword("password");

    QTime t; t.start();
    db.open();
    qDebug()<<t.elapsed()*0.001<<db.lastError();
иногда 21 секунда проскакивает, на 47 чаще...


Название: Re: QODBC mssql2012 уменьщить timeout (Qt 5.9.1 win7 x64)
Отправлено: deMax от Декабрь 22, 2017, 10:18
Если в цикле запустить,
21.005
47.507
21.003
47.514
21.01
47.519
21.013
47.511
21.007
47.522
21.005
причем если остановить приложение на 21, следующий раз будет 47. Хотя подключаюсь к 1.1.1.1


Название: Re: QODBC mssql2012 уменьщить timeout (Qt 5.9.1 win7 x64)
Отправлено: deMax от Декабрь 22, 2017, 10:38
Собственно нашел проблему, но пока не знаю решение. Если прописать порт для некорректного адреса "Server=1.1.1.1:1" то работает для SQL_ATTR_LOGIN_TIMEOUT=5 выдает 7-10 секунд.
У меня проблема в том что пользователь указывает адрес сервера(как правило без порта), и если он опечатается, то программа будет долго висеть пытаясь подключиться, что не очень красиво.