Не обновляются данные в вычисляемом поле

BFedor_2012
Дата: 18.06.2012 13:07:38
Здравствуйте уважаемые профессионалы и любители
Возникла такая проблема.
База данных на FireBird 2.5, компоненты FIBPlus. Компоненты настроены для работы с двумя транзакциями. Есть две таблицы, родительская и подчиненная. Вызываю для редактирования подчиненную таблицу, в которой может быть с десяток записей. Туда записи могут добавляться или удаляться, потом изменения нужно или сохранить или отменить. Для этого перед началом редактирования отключаю для подчиненной таблицы в TpFIBDataSet Autocommit, чтобы получить длинную транзакцию. После редактирования соответственно делаю или Commit или Rollback. Проблема вот в чем. В таблице есть вычисляемое поле. При добавлении записи оно не пересчитывается. Запись вставляю обычно Insert - вставка - Post. Если включить Autocommit все нормально работает, но тогда я не могу отменить действия с таблицей. Без вычисляемого поля все работает как надо, с ним тоже в принципе как надо, но не могу получить данные вычисляемого поля.
Пробовал вычислять значение поля с помощью триггера - результат тот-же.
В IB-Expert все нормально работает, поле пересчитывается при перемещении на другую запись. Можно вставить хоть с десяток записей, затем все можно отменить.
Подскажите пожалуйста что я не так делаю?
Может есть какое-нибудь другое решение для этой задачи?
Мимопроходящий
Дата: 18.06.2012 13:15:40

Hello, BFedor_2012!
You wrote on 18 июня 2012 г. 13:15:41:

BFedor_2012
Подскажите пожалуйста что я не так делаю?

используешь 2 транзакции.

Posted via ActualForum NNTP Server 1.5

BFedor_2012
Дата: 18.06.2012 13:22:08
Спасибо, попробую с одной.
kdv
Дата: 18.06.2012 13:27:00
BFedor_2012
В таблице есть вычисляемое поле. При добавлении записи оно не пересчитывается.

вычисляемое поле вычисляется только при обращении к нему, например через select. При добавлении записи, разумеется, ничего не пересчитывается, потому что поле - вычисляемое, его физически не существует.

BFedor_2012
Пробовал вычислять значение поля с помощью триггера - результат тот-же.

значит ты неправильно написал RefreshSQL у FIBDataSet. Или где-то недовыставил опции этого датасета.
BFedor_2012
Дата: 18.06.2012 13:40:59
С одной транзакцией наполовину заработало. Т.е. значение поля появляется сразу после добавления, но данные из него прочитать не могу. Т.е. я делаю так Insert - данные - Post. Потом делаю запрос на выборку этих данных. Данных нет.
Мимопроходящий
Дата: 18.06.2012 13:44:51

Hello, BFedor_2012!
You wrote on 18 июня 2012 г. 13:45:00:

BFedor_2012
> значение поля появляется сразу после добавления, но
данные из него прочитать не могу.
это как?

Posted via ActualForum NNTP Server 1.5

BFedor_2012
Дата: 18.06.2012 13:50:57
Я имею ввиду появляется в Gride. До этого в гриде было количество и цена, а суммы не было. Теперь есть и сумма. Но когда делаю запрос, данные с вновь введенных записей не возвращаются, только со старых. Запрос возвращает общую сумму по всем записям. Пробовал и вычисляемое поле и произведение количества и суммы
SELECT SUM(O.KOL * O.CENA) AS SUMM FROM OPL O
LEFT OUTER JOIN OPLKR K ON O.IDOPLKR = K.IDOPL
WHERE O.IDOPLKR = 14487
kdv
Дата: 18.06.2012 14:02:54
BFedor_2012
Но когда делаю запрос, данные с вновь введенных записей не возвращаются, только со старых.

разберись с уровнями изоляции транзакций, коммитами и прочим.
- не сделал commit: данные не изменились
- читаешь в транзакции snapshot: не увидишь вообще никаких committed изменений.

почитай что-нибудь по транзакциям на ibase.ru.
BFedor_2012
Дата: 18.06.2012 14:17:57
Взял данные из футера грида. Там они автоматом высчитывались. Более грамотно наверное было бы запросом. С уровнями изоляциями еще поэкспериментирую. Последние три дня только и делал что читал :)) Мимопроходящий большое спасибо за помощь.
Dimitry Sibiryakov
Дата: 18.06.2012 14:27:16

BFedor_2012
Последние три дня только и делал что читал

Всем умиляться до слёз: он целых три дня читал!

Posted via ActualForum NNTP Server 1.5