Одним update изменить два поля, одно из которых вычисляемое

konst37
Дата: 17.12.2011 10:48:19
есть такая строка апдейта
strSQL = "Update [Подписки] set Оплата = Оплата - " & rst.Fields(1) & "  where код = " & rst.Fields(0)

в Immediate все хорошо Update [Подписки] set Оплата = Оплата - 10 where код = 8

Но в таблице Подписки есть поле Долг значение которого есть разница между Цена и Оплата
Можно ли одним апдейтом изменить два поля?
Такая конструкция мне не внушает доверия
strSQL = "Update [Подписки] set Оплата = Оплата - " & rst.Fields(1) & ", Долг = Цена - Оплата  where код = " & rst.Fields(0)

Только через два отдельных апдейта?
mds_world
Дата: 17.12.2011 11:02:13
Во-первых, одним запросом можно обновить сколь угодно полей.
Во-вторых, зачем? Зачем вычисляемое поле в таблице? Тем более, что оно у вас вычисляется неверно. Вы ориентируетесь на уже откорректированную оплату, а в поле пока старое значение.

Бросьте это неблагодарное дело - хранить вычисляемые поля, когда есть запросы.
RomanFromOr
Дата: 17.12.2011 11:02:14
konst37, Зачем в таблице делать вычисляемое поле? Его можно всегда вычислить
konst37
Дата: 18.12.2011 12:42:49
mds_world
Во-первых, одним запросом можно обновить сколь угодно полей.

Да, это я знаю, но хотелось как-то так :)
update Update [Подписки] set Долг = Цена - new.Оплата
Зачем вычисляемое поле в таблице? Тем более, что оно у вас вычисляется неверно. Вы ориентируетесь на уже откорректированную оплату, а в поле пока старое значение.

Я, наверное, не так выразился. Оно вычисляется на событии Количество_AfterUpdate.
Т.е при вставке в таблицу все нормально, а удаление делаю с VBA. Вот и подумал как-то одним запросом сотворить нечто, как в
хранимой процедуре IB.
Сделал на двух апдейтах. Вроде работает...
Rivkin Dmitry
Дата: 18.12.2011 12:56:03
konst37
mds_world
Во-первых, одним запросом можно обновить сколь угодно полей.

Да, это я знаю, но хотелось как-то так :)
update Update [Подписки] set Долг = Цена - new.Оплата
Зачем вычисляемое поле в таблице? Тем более, что оно у вас вычисляется неверно. Вы ориентируетесь на уже откорректированную оплату, а в поле пока старое значение.

Я, наверное, не так выразился. Оно вычисляется на событии Количество_AfterUpdate.
Т.е при вставке в таблицу все нормально, а удаление делаю с VBA. Вот и подумал как-то одним запросом сотворить нечто, как в
хранимой процедуре IB.
Сделал на двух апдейтах. Вроде работает...

Еще раз: не надо делать вычисляемых полей в таблице. Вычисления надо делать в запросе и только в запросе! В крайних случаях, когда вычисления могут быть очень сложными и когда редактироване таблиц практически запрещено, можно сделать отдельный процесс, который по таймеру будет делать такие вычисления и при этом выставлять флаги, что поля уже вычислены. Еще может быть оправдано вычисление в триггере, которых нет в Аксе. Так что - никаких вычислений ни до ни после Количество_AfterUpdate!