Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: переоткрытие соединения для того, чтоб сделать выборку?!
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
call_me_Frank
Привет! столкнулся с такой ситуацией:

запускаю программу, получаю данные, записываю их в БД (вообще-то сразу в две - одна в памяти, другая на диске), потом делаю выборку - и ничего!
теперь выборку по записанным данным можно сделать только после закрытия и открытия заново БД...что это такое и что с этим делать, если вышеописанный вариант меня не устраивает?
Алексей1153
незакрытая транзакция ?
Гость_call_me_Frank_*
Цитата(Алексей1153 @ 16.3.2012, 18:51) *
незакрытая транзакция ?


а как можно это определить? пользуюсь QSqlDatabase, QSqlQuery, QSqlTableModel...
Litkevich Yuriy
Цитата(Гость_Гость_call_me_Frank_*_* @ 18.3.2012, 0:07) *
а как можно это определить?
если явно транзакции не используешь, то и нет повисшей транзакции.
Смотри работу с моделью, делаешь ли ты select() для неё, когда хочешь посмотреть новое состояние БД?
Гость_call_me_Frank_*
Цитата(Litkevich Yuriy @ 18.3.2012, 11:11) *
Цитата(Гость_Гость_call_me_Frank_*_* @ 18.3.2012, 0:07) *
а как можно это определить?
если явно транзакции не используешь, то и нет повисшей транзакции.
Смотри работу с моделью, делаешь ли ты select() для неё, когда хочешь посмотреть новое состояние БД?


Модель используется только в начале работы программы (для копирования содержимого файловой БД в память), и после этого осуществляются еще множество выборок, которые проходят успешно (дальше все выборки - через QSqlQuery).

Есть одна функция, которая как-раз таки дает сбой, устроена следующим образом:

QString func(QString id){

    QSqlQuery q(QSqlDatabase::database(memDB));
    QSqlQuery p(QSqlDatabase::database(memDB));

    ....

    q.exec("...");

    while(q.next()){
        
        ...
        p.exec(...);
        ...
        ret += func(some_id);
    }
    
    return ret;
}


не работает запрос p.exec(); может причина кроется в такой организации самой функции?...
call_me_Frank
Разобрался! как это случается, упустил ошибку совсем в другом месте - один из запросов на добавление данных работал неверно, причем для БД в памяти, поэтому когда программа перезапускалась и memoryDB восстанавливалась с диска, все работало. Всем спасибо за участие :)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.