powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / QSqlQuery + Firebird длительное ожидание ответа на query->next()
36 сообщений из 36, показаны все 2 страниц
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38390577
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Даже не знаю, туда ли я написал.

Есть программа на Qt 4.8.1 (работает под виндой), Firebird 2.5.2. Драйвер собран из исходников Qt с использованием fbclient_ms.lib.

Есть таблица
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE (
ADDR SMALLINT NOT NULL,
TAG SMALLINT NOT NULL,
VAL FLOAT,
DATE_TIME TIMESTAMP,
REQ_UPDATE INTEGER NOT NULL,
REAL_TIME INTEGER NOT NULL,
REQ_WRITE INTEGER NOT NULL,
CONSTRAINT UNQ_ADDR_TAG UNIQUE (ADDR,TAG)
)



Таблица имеет 7680 записей. 30 - ADDR на каждый приходится 256 - TAG

Выполняется запрос
Код: sql
1.
2.
3.
4.
SELECT TAG, VAL FROM RTTABLE 
    WHERE ADDR = 1 
              AND REAL_TIME = 1
              AND REQ_WRITE = 0



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

И самое странное, что задержка возникает при вызове первого query->next();

Код следующий:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
    if(!query->prepare(
        "SELECT TAG, VAL FROM RTTABLE "
             "WHERE ADDR = :id_addr "
                    "AND REAL_TIME = 1 "
                    "AND REQ_WRITE = 0 "
        )
    ){
        qDebug() << "IRTPoolTags::getPoolIncTags query->prepare"
                 << query->lastError();
        return;
    }

    query->bindValue(":id_addr",curAddr);

    if(!query->exec()){
        qDebug() << "IRTPoolTags::getPoolIncTags query->exec"
                 << query->lastError();
        return;
    }

    while(query->next()){
        PoolTag poolTag;
        poolTag.tag = query->value(0).toInt();
        poolTag.val = query->value(1).toDouble();

        listTag.append(poolTag);
    }



Вот первый «query->next()» и тормозит дальше как по маслу.

query создается в конструкторе:
Код: plaintext
1.
query = new QSqlQuery(db);



Предварительно db создается и открывается:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
bool IncPool::openDB()
{
    db =  QSqlDatabase::addDatabase("QIBASE",threadID);

    db.setDatabaseName ("INCBASE") ;
    db.setUserName ("sysdba") ;
    db.setPassword("masterkey") ;

    db.setHostName ("localhost") ;

    if (!db.open()) {

        qDebug() << lastError;
        return false;
    }
    return true;
}


где threadID поле получаемое следующим образом:
Код: plaintext
1.
2.
    threadID = QString::number(
                (qint32)QThread::currentThreadId(), 16).toUpper();



Поток пока одни REAL_TIME = 1 AND REQ_WRITE = 0 устанавливает другое приложение. В принципе все работает, но вот при первом включение такая засада.

Пробовал:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    if(!query->first()){
        return;
    }

    do{
        PoolTag poolTag;
        poolTag.tag = query->value(0).toInt();
        poolTag.val = query->value(1).toDouble();

        listTag.append(poolTag);
    }while(query->next());



Таже задержка только query->first().

В общем, не могу понять, как с этим бороться. Может, кто что подскажет? Буду очень признателен.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38390585
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agodaДаже не знаю, туда ли я написал.
Не, не туда. Тут про С++, а у вас что-то другое.
agodaпервое обращение может выполняться до 5 и более минут, а последующие обращения занимают миллисекунды
База локальная. Может антивирус проверяет базу в первый раз?
Потому что 7000 записей никак не могут считываться 5 минут - т.е. тут дело не в SQL, а в каких то посторонних факторах.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38390616
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agoda,

Видимо, дело в бд, а не в клиенте.
Первый fetch - это просто выполнение запроса до стадии получения первой записи.
Попробуй проверить есть ли такой же эффект без использования этой программы, выполняя этот же запрос через какую-нибудь консоль.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38390818
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyagodaДаже не знаю, туда ли я написал.
Не, не туда. Тут про С++, а у вас что-то другое.

Прошу прощения, но я не нашел подходящего форума для такого вопроса. Толи база, толи код на С++, толи как вы написали антивирус. Увидел задержку после query->next() и решил написать в С++.

Anatoly Moskovskyagodaпервое обращение может выполняться до 5 и более минут, а последующие обращения занимают миллисекунды
База локальная. Может антивирус проверяет базу в первый раз?
Потому что 7000 записей никак не могут считываться 5 минут - т.е. тут дело не в SQL, а в каких то посторонних факторах.

Про антивирус я и не подумал, хотя на похожие грабли уже наступал. Спасибо, вечером попробую. База локальная.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38390846
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyМожет антивирус проверяет базу в первый раз?

В этом случае тормоза были бы на connect.

Qt драйвер для Firebird вообще известен своей кривизной.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38390875
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovAnatoly MoskovskyМожет антивирус проверяет базу в первый раз?

В этом случае тормоза были бы на connect.

Qt драйвер для Firebird вообще известен своей кривизной.
И как быть? Отказаться от Qt?
Я, правда, еще не проверил теорию с антивирусом…
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38390881
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agodaИ как быть? Отказаться от Qt?
Лично я бы так и сделал.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38390917
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovagodaИ как быть? Отказаться от Qt?
Лично я бы так и сделал.
Мне нужен толстый клиент для нескольких рабочих станций виндовых и линуховых. Я пробовал Лазарус, но там были глюки с полосами прокруток, хинтами и т.д. Плюс, то что работало в винде не всегда работало в линухе. Попробовал Qt. Гуй как-то менее глючный показался. Да и с базой работал, только вылезло вот это неприятное место.

А как на счет Qt SQL driver for Firebird with IBPP library qtfirebirdibppsqldriver? Я тут начал просматривать альтернативы…
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38391022
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAnatoly MoskovskyМожет антивирус проверяет базу в первый раз?

В этом случае тормоза были бы на connect.

Необязательно если коннект (вернее то что за ним стоит) выполняется сервером асинхронно.
Как на самом деле - не знаю.

Dimitry SibiryakovQt драйвер для Firebird вообще известен своей кривизной.
Про кривизну драйвера - не буду спорить :)
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38391348
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agodaА как на счет Qt SQL driver for Firebird with IBPP library
qtfirebirdibppsqldriver?
На него жалоб вроде бы как не было.

Anatoly MoskovskyНеобязательно если коннект (вернее то что за ним стоит)
выполняется сервером асинхронно.
Как на самом деле - не знаю.
Как оно на самом деле в сервере - я знаю. А вот Qt драйвер - тёмная лошадка.

А вообще-то при такой длинной задержке это всё должно тривиально проверяться с помощью
штатного Firebird-овского isql. Если он ведёт себя так же - нужно копать сервер. Работает
нормально - приложение.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38391360
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы знаете что на Qt можно писать вообще без использования QSQL модуля и без этих кривых драйверов. Вся мощь ODBC или какой-нибудь native library к вашим услугам.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38391579
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlА вы знаете что на Qt можно писать вообще без использования QSQL модуля и без этих кривых драйверов. Вся мощь ODBC или какой-нибудь native library к вашим услугам.Спасибо за рекомендацию.

Я посмотрел, что в виндовой Qt 4.8.1 драйвер QODBC также нужно было собирать, и решил собрать QIBASE. Все заработало и ничего кроме fb не пришлось на машину ставить. Мне ничего другого не требовалось. Но вот наткнулся на такую проблему.

У меня пока нет доступа к той машине, где приложение работает. Проверю теорию с антивирусом. Если не поможет, подумаю, чем воспользоваться ODBC или qtfirebirdibppsqldriver. Мне нужно, что бы и под виндой и под линухом одинаково работало.

А можно ссылку на то как работать с ODBC без QtSql?
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38391582
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agodaА можно ссылку на то как работать с ODBC без QtSql?
С ODBC работать так:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms714177(v=vs.85).aspx
С Firebird работать так: http://www.ibphoenix.com/files/60ApiGuide.zip
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38391588
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovagodaА как на счет Qt SQL driver for Firebird with IBPP library
qtfirebirdibppsqldriver?
На него жалоб вроде бы как не было.Попробую, если отключение антивируса не поможет.
Dimitry SibiryakovА вообще-то при такой длинной задержке это всё должно тривиально проверяться с помощью
штатного Firebird-овского isql. Если он ведёт себя так же - нужно копать сервер. Работает
нормально - приложение.


Дело в том, что такая задержка выскакивает не постоянно. Обычно при первом доступе после перезагрузки компа, но не всегда. У меня этот запрос выполняется в цикле и занимает до десяти миллисекунд. И только иногда такое происходит. В принципе подождать и дальше все работает. Но когда ждать нужно до пяти минут закрадывается сомнение, и люди нервничают.

В общем я isql-ем пробовал у меня такой длительности не получалось но учитывая что у меня и в приложении это происходит не часто я не могу быть уверенным.

Жаль, сегодня не получилось добраться до машины с приложением, очень хочется, что бы это был антивирус.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38391594
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovagodaА можно ссылку на то как работать с ODBC без QtSql?
С ODBC работать так:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms714177(v=vs.85).aspx
С Firebird работать так: http://www.ibphoenix.com/files/60ApiGuide.zip
Спасибо, посмотрел. Чтобы не сильно менять уже готовое приложение придется написать свой врапер с интерфейсами, как у QSql. Или предстоит крутой рефакторинг.

Если отключение антивируса не поможет, сразу попробую qtfirebirdibppsqldriver. Если там все плохо буду пробовать… :(

Спасибо за то, что осветили путь.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38391600
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agodaDimitry Sibiryakovпропущено...

На него жалоб вроде бы как не было.Попробую, если отключение антивируса не поможет.
Dimitry SibiryakovА вообще-то при такой длинной задержке это всё должно тривиально проверяться с помощью
штатного Firebird-овского isql. Если он ведёт себя так же - нужно копать сервер. Работает
нормально - приложение.


Дело в том, что такая задержка выскакивает не постоянно. Обычно при первом доступе после перезагрузки компа, но не всегда. У меня этот запрос выполняется в цикле и занимает до десяти миллисекунд. И только иногда такое происходит. В принципе подождать и дальше все работает. Но когда ждать нужно до пяти минут закрадывается сомнение, и люди нервничают.

В общем я isql-ем пробовал у меня такой длительности не получалось но учитывая что у меня и в приложении это происходит не часто я не могу быть уверенным.

Жаль, сегодня не получилось добраться до машины с приложением, очень хочется, что бы это был антивирус.


Так может это банально кэш набивается ...
Кэш субд.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38391601
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agodaDimitry Sibiryakovпропущено...

С ODBC работать так:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms714177(v=vs.85).aspx
С Firebird работать так: http://www.ibphoenix.com/files/60ApiGuide.zip
Спасибо, посмотрел. Чтобы не сильно менять уже готовое приложение придется написать свой врапер с интерфейсами, как у QSql. Или предстоит крутой рефакторинг.

Если отключение антивируса не поможет, сразу попробую qtfirebirdibppsqldriver. Если там все плохо буду пробовать… :(

Спасибо за то, что осветили путь.

Не делай ничего, пока не выяснишь причину.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38391603
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivТак может это банально кэш набивается ...
Кэш субд.
Он набивается при execute, не при fetch.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38391756
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivagodaпропущено...
Попробую, если отключение антивируса не поможет.
пропущено...


Дело в том, что такая задержка выскакивает не постоянно. Обычно при первом доступе после перезагрузки компа, но не всегда. У меня этот запрос выполняется в цикле и занимает до десяти миллисекунд. И только иногда такое происходит. В принципе подождать и дальше все работает. Но когда ждать нужно до пяти минут закрадывается сомнение, и люди нервничают.

В общем я isql-ем пробовал у меня такой длительности не получалось но учитывая что у меня и в приложении это происходит не часто я не могу быть уверенным.

Жаль, сегодня не получилось добраться до машины с приложением, очень хочется, что бы это был антивирус.


Так может это банально кэш набивается ...
Кэш субд.А как это проверить?
Да и иногда запрос не возвращает ни одной записи, а тормоза все равно присутствуют. Хуже то, что та машина, где это проявляется, у заказчика и географически далеко расположена. И перегружать ее часто не желательно. А у меня на машине этого глюка я не наблюдал.
Спасибо за советы. Я теперь хоть знаю, куда смотреть в случае чего. Переделывать, конечно, сразу не буду бросаться. Как че узнаю, сюда напишу, чем дело закончилось.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38392154
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agodaмашина, где это проявляется, у заказчика и географически далеко расположена. И
перегружать ее часто не желательно. А у меня на машине этого глюка я не наблюдал.

Тогда вопрос на засыпку: а ты действительно абсолютно уверен, что тормозит именно вызов
next?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38392161
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Со слов бухгалтера :)
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38392234
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMasterZivТак может это банально кэш набивается ...
Кэш субд.
Он набивается при execute, не при fetch.


Это ни ты, ни я не знаем, когда он набивается.
Но я тебе точно скажу, на 100%, fetch тоже может помещать данные в кэш. И если напр. ты не вызовешь лишний раз fetch, кэш останется нетронутым.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38392274
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЭто ни ты, ни я не знаем, когда он набивается.
Мы говорим не о MS SQL, а о Firebird, не забывай.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38392416
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovagodaмашина, где это проявляется, у заказчика и географически далеко расположена. И
перегружать ее часто не желательно. А у меня на машине этого глюка я не наблюдал.

Тогда вопрос на засыпку: а ты действительно абсолютно уверен, что тормозит именно вызов
next?..
Уверен, у меня есть лог, в котором записаны времена выполнения каждой функции.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38392433
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskyDimitry Sibiryakov,

Со слов бухгалтера :):)
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38392540
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agodaУверен, у меня есть лог, в котором записаны времена выполнения каждой функции.

Хорошо, зайдём с другой стороны: поскольку проблема возникает после перезагрузки сервера,
озаботься сбором полной статистики о базе (с помощью gstat) сразу после его перезагрузки.
Анализ этой информации (которым вообще-то должен заниматься DBA по собственной инициативе
гораздо чаще) может показать если приложение с базой криво работает.

PS: Уж не кнопкой ли Reset перезагружают тот сервер?..
PPS: Это уже тема не для этого раздела.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38393719
trdm_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovagodaмашина, где это проявляется, у заказчика и географически далеко расположена. И
перегружать ее часто не желательно. А у меня на машине этого глюка я не наблюдал.

Тогда вопрос на засыпку: а ты действительно абсолютно уверен, что тормозит именно вызов
next?..

Профайлинг может это показывает.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38396565
Фотография MedEx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agoda
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    if(!query->prepare(
        "SELECT TAG, VAL FROM RTTABLE "
             "WHERE ADDR = :id_addr "
                    "AND REAL_TIME = 1 "
                    "AND REQ_WRITE = 0 "
        )
    ){
        qDebug() << "IRTPoolTags::getPoolIncTags query->prepare"
                 << query->lastError();
        return;
    }

    query->bindValue(":id_addr",curAddr);

    if(!query->exec()){
        qDebug() << "IRTPoolTags::getPoolIncTags query->exec"
                 << query->lastError();
        return;
    }


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
//query.setForwardOnly(true);???
query.exec(QString(
                "SELECT TAG, VAL FROM RTTABLE "
             "WHERE ADDR = %1 "
                    "AND REAL_TIME = 1 "
                    "AND REQ_WRITE = 0 "
                .arg(curAddr)
                .toUtf8());

            if(query.isActive())
            {
		if(!query.isForwardOnly())
		{
			if(query.size() == 0)QDebug() << "query size = 0";
		}
		else
		if(query->first())
		{
			do
			{
				PoolTag poolTag;
        			poolTag.tag = query->value(0).toInt();
        			poolTag.val = query->value(1).toDouble();
        			listTag.append(poolTag);
			}
			while(query->next());
		}
		else QDebug() << "query size = 0";             	 
            }
            else
            {
                QDebug() << query.lastError().text();                
            }



agoda
Код: plaintext
1.
query = new QSqlQuery(db);



Код: plaintext
1.
QSqlQuery query(db);
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38423870
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MedEx
Код: plaintext
1.
//query.setForwardOnly(true);???


Я не устанавливал, по умолчанию false, спасибо попробую.
MedEx
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
query.exec(QString(
                "SELECT TAG, VAL FROM RTTABLE "
             "WHERE ADDR = %1 "
                    "AND REAL_TIME = 1 "
                    "AND REQ_WRITE = 0 "
                .arg(curAddr)
                .toUtf8());


Вряд ли bindValue влияет на выполнение next()
MedEx
Код: plaintext
1.
2.
            if(query.isActive())
            {


Чем это отличается от проверки результата exec?
MedEx
Код: plaintext
1.
2.
3.
4.
5.
		if(!query.isForwardOnly())
		{
			if(query.size() == 0)QDebug() << "query size = 0";
		}
		else


Если я установлю setForwardOnly(true) эту проверку делать, наверное, не надо?
MedEx
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
		if(query->first())
		{
			do
			{
				PoolTag poolTag;
        			poolTag.tag = query->value(0).toInt();
        			poolTag.val = query->value(1).toDouble();
        			listTag.append(poolTag);
			}
			while(query->next());
		}
		else QDebug() << "query size = 0"; 


Согласно доке по next(): «If the result is currently located before the first record, e.g. immediately after a query is executed, an attempt is made to retrieve the first record.»
а про exec сказано:
«After the query is executed, the query is positioned on an invalid record and must be navigated to a valid record before data values can be retrieved (for example, using next()).»

Так что конструкция
Код: plaintext
1.
2.
3.
while(query->next()){
…
}


сразу после exec() вполне корректна, да и я сначала пробовал с first() – тормозило на first()

MedEx
Код: plaintext
1.
QSqlQuery query(db);


А это-то как может влиять?


А вообще, я наконец-то добрался до своей базы.
Отключение антивируса ничего не дало. Вот только за месяц пока я добирался, база выросла до 3 гиг, и при запуске программа в этом месте зависала так, что «отвисания» дожидаться уже не хотелось. Причем после минут 30 программа проходила это место, а дальше все шло как по маслу и при перезапуске программы в том числе. А вот спустя какое-то время повторялось и повторялось при перезапуске. В один из затыков (хрошо, что зависло на долго, и я еще не далеко отьехал) я схватил ISQL и написал такой же запрос. ISQL задумался на долго. После чего я сделал бекап/ресторе и все побежало. Дня три как бегает, программу перезапускали, и таких длительных затыков не было. Мне не понятно, ведь таблица, к которой я обращаюсь, маленькая, в базе растет другая таблица. Может делать две базы одну для настроек, другую для данных?.. Но это точно не в этой ветке нужно обсуждать.

А setForwardOnly(true) я вставлю, хоть, пока, тормозов не наблюдаю, но потестить насколько эта штука помогает надо.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38424448
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agodaМне не понятно
Если непонятно, бери в руки базу в которой оно тормозит, gstat и смотри что там с этой
твоей таблицей.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38424497
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovagodaМне не понятно
Если непонятно, бери в руки базу в которой оно тормозит, gstat и смотри что там с этой
твоей таблицей.

Да я это понял еще с предыдущих постов, только база от меня далеко и оказаться в нужном месте в нужный момент не так просто. Как получу какую-то статистику, думаю, уже с ней обращусь в раздел Firebird, InterBase.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38424566
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
agodaбаза от меня далеко и оказаться в нужном месте в нужный момент не так
просто
Не пойму о чём ты говоришь. Когда ты "сделал бекап/ресторе" у тебя на руках должно было
быть две базы: старая, в которой запрос тормозит и новая в которой "все побежало". Первую
и надо было закинуть себе на винт для опытов. Почему ты этого не сделал?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38424816
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovПочему ты этого не сделал?
Еще через месяц узнаем :)
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38427230
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovagodaбаза от меня далеко и оказаться в нужном месте в нужный момент не так
просто
Не пойму о чём ты говоришь. Когда ты "сделал бекап/ресторе" у тебя на руках должно было
быть две базы: старая, в которой запрос тормозит и новая в которой "все побежало". Первую
и надо было закинуть себе на винт для опытов. Почему ты этого не сделал?
По глупости. Под рукой не оказалось флешки, а инет в том месте такой, что 3 гига будут месяц передаваться.
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38427232
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дай угадаю: по той же глупости ты эту старую базу стёр, чтобы уже никто никогда не мог
узнать в чём же была проблема. Ню-ню...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
QSqlQuery + Firebird длительное ожидание ответа на query->next()
    #38427266
agoda
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovДай угадаю: по той же глупости ты эту старую базу стёр, чтобы уже никто никогда не мог
узнать в чём же была проблема. Ню-ню...
Именно. Но, учитывая, что я уже делал бекап/ресторе до этого и вопрос возник, есть надежда, что проблема повторится.
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / QSqlQuery + Firebird длительное ожидание ответа на query->next()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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