11.06.2004, 17:28 | #1 |
Участник
|
расчет ИТОГО по колонке темповой таблицы
Доброго времени суток!
Существует времення таблица RMETmpSubLotLog Необходимо реализовать контроль ввода значений в поле amount. Правило проверки select sum(amount) from tmp; if (tmp.Amount >= element.getLimit()) Сумма по колонке (полю) не должна превышать определенного значения. Проблема в том, что select sum(amount) from tmp не учитывает новое введенное значение, а только лишь старые данные, введенные за одну операцию до этого. Проверка реализована в методе validate соответствующего DataSourc-a (RMETmpSubLotLog_ds.cursor()) Как решить проблему, подскажите! =) PHP код:
|
|
11.06.2004, 17:35 | #2 |
Модератор
|
А если присуммировать новое введенное значение? Что получиться?
|
|
11.06.2004, 17:44 | #3 |
Участник
|
Не подходит, пробовал =)
Пример: есть три строки со значениями в поле amount 10,20,30 я добавляю новую строчку со значением 15 , прибавляю ее к сумме (старых значений) получаю sum(10,20,30) + 15 =.75. Все хорошо, все бъет. Но вот если я ИЗМЕНЯЮ сужествующую строку, к примеру строку со значением 10 меняю на 5, то получаю (10,20,30) + 5 = 65 , а должно 55! |
|
11.06.2004, 17:53 | #4 |
Moderator
|
Можно попробовать к сумме прибавить выражение
<новое_значение_поля> - <старое_значение_поля>, где старое значение поля добывается через orig().
__________________
Андрей. |
|
11.06.2004, 17:57 | #5 |
Administrator
|
В принципе, все логично. SUM берет данные, которые уже есть в таблице. validate() вызывается до внесения изменений в таблицу, стало быть Вашего значения там нет еще. Отнимайте от суммы старое значение, если оно есть, и добавляйте новое.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
11.06.2004, 17:58 | #6 |
Участник
|
Привет!
Я бы попробовал перечитать курсор: PHP код:
__________________
С уважением, Андрей Беседин |
|
11.06.2004, 17:59 | #7 |
Модератор
|
PHP код:
|
|
11.06.2004, 19:26 | #8 |
Участник
|
С миру по нитке ...
Получилось : PHP код:
т.e. было три строки 10,20,30 ... проверка на превышение 100 .... ввожу строку четвертую 2000, код правильно ругается, но сбрасывает в ноль первую строку в гриде (к примеру 10 )... Как побороть? P.S. А чем плохи временные таблицы? Я их использую для того, что бы данные попадали в базу не построчно, а пачкой =)) Хотелось отвязать базу от интерфейса... 2 George Nordic Может я делал что-то не так, но Ваш код не сработал так мне необходимо .. |
|
11.06.2004, 20:04 | #9 |
Участник
|
Вот этот код работает, так как я задумывал .....
Остался последний вопрос: как отключить сортировку в гриде ? (чтобы добавлялась запись в конец и не сортировалась в зависимости от значения) PHP код:
Замысловато получилось ...=(( А можно ли решить такую задачу проще? Я имею в виду контроль суммы по колонке. |
|
11.06.2004, 20:54 | #10 |
Moderator
|
В примере Georde Nordic надо заменить строчку на
PHP код:
__________________
Андрей. |
|
15.06.2004, 14:16 | #11 |
Участник
|
2 ATimTim
Привет! Временные таблицы - это очень плохо. Начать с того, что хранится это дело на диске (клиента или сервера - зависит от места первой вставки). "Индексный" поиск по временным таблицам нагружает процессор АОС или клиента. Далее, иногда очень часто лажаются селекты по временным таблицам. Еще: в 3-х уровневой среде возможны серьезные замедления, связанные с "прояжкой" таблицы между клиентом и сервером. То ли дело RecordSortedList или MAP (зависит от области применения) - милое дело!
__________________
С уважением, Андрей Беседин |
|
19.07.2005, 10:22 | #12 |
Участник
|
Лимит по колонке обычной таблицы
Здравствуйте!
Мне нужно выполнить такюже задачку, только на обычной таблице Просмотрела данную тему и возникли вопросы: 1. Как решение такой задачки отличается от решения на темповой таблице? 2. Что скрывается под методом getLimit()? (Можно код?) 3. И вопрос, не относящийся к этой теме: как на int-поле установить значение по умолчанию? Буду благодарна за развернутые ответы. Заранее спасибо |
|
19.07.2005, 11:49 | #13 |
Moderator
|
1. Решение особо не отличается, но, естественно, не надо заморачиваться со всякими setTmpData().
2. Метод произвольным образом высчитывает и возвращает предел значения по колонке. Сам код его не особо важен, хоть return 100; 3. Значения по умолчанию лучше всего устанавливать в методе initValue() таблицы или DS.
__________________
Андрей. |
|
19.07.2005, 11:59 | #14 |
Участник
|
Спасибо, Dron AKA andy.
Буду пробовать... |
|
19.07.2005, 15:03 | #15 |
Участник
|
Спасибо за информацию. Мне пример ATimTim пригодился очень.
|
|
|
|