Название: Firebird Непонятное с транзакциями Отправлено: varkon от Июль 04, 2010, 23:21 Есть код двух функций:
Код: int dmModule::modifyRegDoc(TDocumentItem item,QString op){ Код: int dmModule::modifyRegInventory(const int gid, const int smid, const int wid,const int amid, const double count){ Код: int dmModule::modifyReceived(TDocument doc, QTableWidget *tb){ Как правильно оформить по сути атомарную операцию - в чем моя ошибка? Название: Re: Firebird Непонятное с транзакциями Отправлено: MoPDoBoPoT от Июль 04, 2010, 23:39 Надо транзакцию явно начинать QSqlDatabase::transaction()
Код
Название: Re: Firebird Непонятное с транзакциями Отправлено: varkon от Июль 05, 2010, 00:17 Надо транзакцию явно начинать QSqlDatabase::transaction() спасибо попробую. т.е. я могу быть уверен в таком случае, что либо выполнится все, либо ничего? Попробую опишусь естественно. Название: Re: Firebird Непонятное с транзакциями Отправлено: varkon от Июль 05, 2010, 17:07 Нет. К сожалению не работает. Т.е. если добавить в код :
Код: int dmModule::modifyReceived(TDocument doc, QTableWidget *tb){ Название: Re: Firebird Непонятное с транзакциями Отправлено: MoPDoBoPoT от Июль 05, 2010, 18:03 Может дело в самих хранимых процедурах, то есть фиксация изменений происходит в них?
Название: Re: Firebird Непонятное с транзакциями Отправлено: MoPDoBoPoT от Июль 05, 2010, 18:10 Кстати, здесь query->setForwardOnly(true) как-то "не в кассу". Это же не SELECT запрос.
Название: Re: Firebird Непонятное с транзакциями Отправлено: varkon от Июль 05, 2010, 18:55 Может дело в самих хранимых процедурах, то есть фиксация изменений происходит в них? хмммм. да не должно вроде. проверюНазвание: Re: Firebird Непонятное с транзакциями Отправлено: varkon от Июль 06, 2010, 05:26 Может дело в самих хранимых процедурах, то есть фиксация изменений происходит в них? нет не происходит. Т.е. если я выполняю процедуру например в IBExpert - то требуется подтверждение транзакции.Название: Re: Firebird Непонятное с транзакциями Отправлено: sarbash от Июль 06, 2010, 08:28 Странная конструкция... :)
1. Я бы квери клал на стек, само бы удалялось при выходе из функции. 2. Что за драйвер используется? 3. dmBaseModule::db - это что? Что мешает пользоваться штатной QSqlDatabase::database()? 4. dmBaseModule::db и здесь: QSqlQuery *query = new QSqlQuery(dmModule::db) -- это одна и та же база? P.S. Прошу прощения, что-то меня не туда понесло... Название: Re: Firebird Непонятное с транзакциями Отправлено: varkon от Июль 06, 2010, 12:42 Странная конструкция... :) 1. Не вижу существенной разницы.1. Я бы квери клал на стек, само бы удалялось при выходе из функции. 2. Что за драйвер используется? 2. QIBASE 3. dmBaseModule::db - это что? Что мешает пользоваться штатной QSqlDatabase::database()? 3. Объявлено как:Код: class dmBaseModule : public QObject Код: class dmModule : public dmBaseModule 4. dmBaseModule::db и здесь: QSqlQuery *query = new QSqlQuery(dmModule::db) -- это одна и та же база? Вот с этим я может немного заблудился (хотя по моему это не имеет значения) - но сейчас просто переделал dmBaseModule::db - результат вроде тот же.Мне нужно обращаться к соединению из разных модулей, которые грузятся динамически, поэтому использую такую схему. Название: Re: Firebird Непонятное с транзакциями Отправлено: lit-uriy от Июль 06, 2010, 12:59 >>static QSqlDatabase db;
принципиально не нужен. Так как "QSqlDatabase is value class", что равносильно фразе "QSqlDatabase - именованный одиночка (singleton)". Т.е. обращаясь по имени соединения, как во всех примерах, ты всегда будешь получать доступ к одному и тому же соединению с БД. Название: Re: Firebird Непонятное с транзакциями Отправлено: sarbash от Июль 06, 2010, 13:22 1. Согласен, разница появляется только когда много кода и нечаянно забываешь прописать нужный delete... :)
2. Если QIBASE, я -- пас, он мне с самого начала не понравился невозможностью задать параметры транзакции. Поэтому не могу больше ничего сказать по этому поводу. Название: Re: Firebird Непонятное с транзакциями Отправлено: varkon от Июль 06, 2010, 13:24 >>static QSqlDatabase db; Ну насколько я понимаю - от этого хуже не будет? Так как я использую класс который сингелтоном не является - я таким образом гарантирую что все созданные классы обращаются к одной области памяти. Или это потенциально не верный подход?принципиально не нужен. Так как "QSqlDatabase is value class", что равносильно фразе "QSqlDatabase - именованный одиночка (singleton)". Т.е. обращаясь по имени соединения, как во всех примерах, ты всегда будешь получать доступ к одному и тому же соединению с БД. Название: Re: Firebird Непонятное с транзакциями Отправлено: varkon от Июль 06, 2010, 13:27 1. Согласен, разница появляется только когда много кода и нечаянно забываешь прописать нужный delete... :) ну так как мне надо работы программы под винду и линь - то мне желательно драйвер, который бы не требовал дополнительных систем (типа ODBC). Какие в таком случае варианты? В теме о транзакциях (http://www.prog.org.ru/topic_8509_0.html) я так понял что есть возможность использовать другой драйвер - но будет ли это решением проблемы?2. Если QIBASE, я -- пас, он мне с самого начала не понравился невозможностью задать параметры транзакции. Поэтому не могу больше ничего сказать по этому поводу. Название: Re: Firebird Непонятное с транзакциями Отправлено: sarbash от Июль 06, 2010, 13:47 Именно его и использую. Под Linux, правда, не пробовал, но, осмелюсь предположить, что проблем возникнуть не должно.
Название: Re: Firebird Непонятное с транзакциями Отправлено: varkon от Июль 06, 2010, 13:52 гм. Последнее в одном из сообщений в теме говорится о проблемах с числами типа numeric? Это достаточно принципиальная ошибка. Ответа пока нет.
Название: Re: Firebird Непонятное с транзакциями Отправлено: sarbash от Июль 07, 2010, 08:45 Проверьте на гуглокоде ченджлог, вроде бы автор давно это пофиксил?
Название: Re: Firebird Непонятное с транзакциями Отправлено: varkon от Июль 07, 2010, 09:09 Проверьте на гуглокоде ченджлог, вроде бы автор давно это пофиксил? не проверял, но все значения нумерек отображаются нормальноНазвание: Re: Firebird Непонятное с транзакциями Отправлено: sarbash от Июль 07, 2010, 10:23 Именно это я и имел в виду.
|