BFedor_2012
Дата: 18.06.2012 13:07:38
Здравствуйте уважаемые профессионалы и любители
Возникла такая проблема.
База данных на FireBird 2.5, компоненты FIBPlus. Компоненты настроены для работы с двумя транзакциями. Есть две таблицы, родительская и подчиненная. Вызываю для редактирования подчиненную таблицу, в которой может быть с десяток записей. Туда записи могут добавляться или удаляться, потом изменения нужно или сохранить или отменить. Для этого перед началом редактирования отключаю для подчиненной таблицы в TpFIBDataSet Autocommit, чтобы получить длинную транзакцию. После редактирования соответственно делаю или Commit или Rollback. Проблема вот в чем. В таблице есть вычисляемое поле. При добавлении записи оно не пересчитывается. Запись вставляю обычно Insert - вставка - Post. Если включить Autocommit все нормально работает, но тогда я не могу отменить действия с таблицей. Без вычисляемого поля все работает как надо, с ним тоже в принципе как надо, но не могу получить данные вычисляемого поля.
Пробовал вычислять значение поля с помощью триггера - результат тот-же.
В IB-Expert все нормально работает, поле пересчитывается при перемещении на другую запись. Можно вставить хоть с десяток записей, затем все можно отменить.
Подскажите пожалуйста что я не так делаю?
Может есть какое-нибудь другое решение для этой задачи?
kdv
Дата: 18.06.2012 13:27:00
BFedor_2012 |
---|
В таблице есть вычисляемое поле. При добавлении записи оно не пересчитывается. |
вычисляемое поле вычисляется только при обращении к нему, например через select. При добавлении записи, разумеется, ничего не пересчитывается, потому что поле - вычисляемое, его физически не существует.
BFedor_2012 |
---|
Пробовал вычислять значение поля с помощью триггера - результат тот-же. |
значит ты неправильно написал RefreshSQL у FIBDataSet. Или где-то недовыставил опции этого датасета.
BFedor_2012
Дата: 18.06.2012 13:40:59
С одной транзакцией наполовину заработало. Т.е. значение поля появляется сразу после добавления, но данные из него прочитать не могу. Т.е. я делаю так Insert - данные - Post. Потом делаю запрос на выборку этих данных. Данных нет.
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.