Russian Qt Forum

Qt => Базы данных => Тема начата: Garfild от Март 01, 2010, 15:39



Название: Транзакции в Access
Отправлено: Garfild от Март 01, 2010, 15:39
Доброго времени суток!!!
Почему-то при начале выполнения транзакции выдает такое сообщение:  [Microsoft][Драйвер ODBC Microsoft Access]Задать атрибут сейчас нельзя  QODBC3: Unable to disable autocommit  Что это может значить?
Делаю так:
Код
C++ (Qt)
QSqlDatabase db=QSqlDatabase::database();
if(!db.transaction())
QMessageBox::information(this,"",db.lastError().text());
 


Название: Re: Транзакции в Access
Отправлено: Garfild от Март 02, 2010, 10:01
Кажется я понял в чем проблема...у меня на формочке есть tableView, в которой отображаются данне.. И видимо поэтому вылазиет ошибка "Задать отрибут сейчас нельзя"
Может подскажете,как лучше сделать...чтоб у меня и во вьюшке все отображалось и транзакцию можно было бы начать


Название: Re: Транзакции в Access
Отправлено: Пантер от Март 02, 2010, 12:30
Попробуй создать 2 подключения: через одно смотреть, а через другое править.


Название: Re: Транзакции в Access
Отправлено: Garfild от Март 02, 2010, 13:08
Спасибо,так получилось!!!!!!
Вопрос снят.


Название: Re: Транзакции в Access
Отправлено: Garfild от Март 09, 2010, 14:34
Добрый день!!
А не подскажите такой момент...создаю второе подключенте след.образом
 
Код
C++ (Qt)
QSqlDatabase db = QSqlDatabase::database();
QSqlDatabase dbase = QSqlDatabase::cloneDatabase(db,"other");
 
после выполнения опреции мне нужно удалить это подключение
 
Код
C++ (Qt)
QSqlDatabase::removeDatabase("other");
 
или не обязательно?


Название: Re: Транзакции в Access
Отправлено: Пантер от Март 09, 2010, 17:38
Надо. Зачем ему висеть?


Название: Re: Транзакции в Access
Отправлено: Garfild от Март 24, 2010, 19:46
Попробуй создать 2 подключения: через одно смотреть, а через другое править.

С двумя подключениями все нормально работает,только возникает один касяк... Изменения,которые были внесены в одном подключении не всегда отражаются во втором подключении, через которое и отображается QTableView :((
Поэтому думаю, что лучше все-таки использовать одно подклячение... только как через одно подключение,можно сразу и отображать таблицу и изменять данные в рамках транзакции ??? Получается,что при отображении таблицы БД в QTableView, делается запрос через QSqlQueryModel и вставляется в QTableView и такое ощущение,что запрос к БД всегда активный... А при активном запросе невозможны выполнения транзакции ... Может кто-нить подскажет как можно выйти из этой ситуации, не используя второе подключение???


Название: Re: Транзакции в Access
Отправлено: voronElf от Март 25, 2010, 09:14
видимо читать результаты запроса в память и освобождать запрос. Свою модель тогда придется делать вместо QSqlQueryModel


Название: Re: Транзакции в Access
Отправлено: Garfild от Март 25, 2010, 09:39
voronElf, спасибо большое за ответ
У меня тож были такие подозрения,что свою модель придется делать...Но была надажда,что все-таки как-то через стандартную модель можно будет сделать.. просто всегда пользовался только стандартной моделью ... придется разбираться с QAbstractTableModel :(((


Название: Re: Транзакции в Access
Отправлено: voronElf от Март 25, 2010, 10:07
Да можт и можно, точно не могу сказать, просто чаще всего у меня возникала необходимость писать свои модели (понравился мне этот способ), так что стандартными пользовался редко. А разобратся как свою модель сваять несложно, Бланшет и Шлее хорошо помогают.
Другой вопрос, можт и можно задать каккой-то режим стандартной модели, чтоб запрос не был постоянно активным. Подождем комментариев ...