Russian Qt Forum
Ноябрь 22, 2024, 23:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QODBC mssql2012 уменьщить timeout (Qt 5.9.1 win7 x64)  (Прочитано 4797 раз)
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« : Ноябрь 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 секунд.
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #1 : Декабрь 01, 2017, 10:20 »

50,60 - 68секунд, 70,80,110 - 116 секунд. Такое чувство что он переменную округляет до 68 вверх.
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #2 : Декабрь 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секунд
Записан
lolobotik
Гость
« Ответ #3 : Декабрь 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 писать уже бесполезно.
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #4 : Декабрь 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 чаще...
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #5 : Декабрь 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
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #6 : Декабрь 22, 2017, 10:38 »

Собственно нашел проблему, но пока не знаю решение. Если прописать порт для некорректного адреса "Server=1.1.1.1:1" то работает для SQL_ATTR_LOGIN_TIMEOUT=5 выдает 7-10 секунд.
У меня проблема в том что пользователь указывает адрес сервера(как правило без порта), и если он опечатается, то программа будет долго висеть пытаясь подключиться, что не очень красиво.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 23.