Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.06;
Скачать: CL | DM;

Вниз

Авторасчет   Найти похожие ветки 

 
Denizzz   (2003-09-17 12:04) [0]

Первый раз столкнулся с необходимостью вычисления поля таблицы по данным полей этой же таблицы. Как это проще реализовать?
Например в идеальном варианте: Добавляем запись, заносим вес, цену и скидку, а сумма должна уже расчитаться автоматически.
Заранее благодарен.


 
Sandman25 ©   (2003-09-17 12:08) [1]

PriceField.OnChange, AmountField.OnChange и DiscountField.OnChange вызывают перерасчет SumField.Value


 
Sandman25 ©   (2003-09-17 12:08) [2]

Либо в триггере на Insert/Update, если СУБД позволяет.


 
Anatoly Podgoretsky ©   (2003-09-17 12:09) [3]

Расчетные поля, нажми правую кнопку на наборе и добавь поле.


 
Sandman25 ©   (2003-09-17 12:11) [4]

[3] Anatoly Podgoretsky © (17.09.03 12:09)

Судя по его посту, ему нужно работать с настоящим полем БД.


 
Anatoly Podgoretsky ©   (2003-09-17 12:21) [5]

Тогда не соответствует нормализации. Лишнии данные, которые расчитываются. Но точно также их можно рассчитывать в момент записи или при каждом чихе.


 
Sandman25 ©   (2003-09-17 12:23) [6]

Не соответствие нормализации не обязательно плохо. Например, если в таблицу триггерами записывается общая сумма по документу, что существенно ускоряет получение отчетов.


 
vopros ©   (2003-09-17 12:26) [7]

Если он такие вопросы задает, то надежнее ему вычисляемое поле сделать.Да и на парадоксе пишет он.


 
Denizzz   (2003-09-17 12:34) [8]

Спасибо за советы. Воспользовался OnChange - помогло, но сумма обновляется только когда встаешь на это поле.

> Тогда не соответствует нормализации. Лишнии данные, которые
> расчитываются.

К документу может принадлежать несколько записей (одна таблица - документы, другая - завязанная по коду документа и содержащая записи документов), и проще будет иметь доступ к уже готовым суммам базы.


 
Sandman25 ©   (2003-09-17 12:42) [9]

>но сумма обновляется только когда встаешь на это поле.

Можно попытаться сделать TDBGrid.Invalidate или что-то подобное.
Я, правда, когда реализовывал что-то подобное, обрабатывал Datasource.OnDataChange, проблем с отображением там не было.


 
Denizzz   (2003-09-17 13:05) [10]

Благодарю, помогло.
На всякий случай: В документе Шапка это одна таблица, а в табличной части вносятся записи другой таблицы, связаной с первой. Как тогда реализовывается отмена сохранения документа (т.е. как сохраненные в кэш записи не сохранять)?
Обновляю записи принудительно (FlushBuffers).


 
Sandman25 ©   (2003-09-17 13:10) [11]

Вы имеете в виду как отменять заведение нового документа?
Я шапку записывал только непосредственно перед тем, как записывать товары. Можно было это считать одной транзакцией, в некотором роде. Вообще-то я с Paradox уже давно не работал, многое подзабыл.


 
Denizzz   (2003-09-17 13:15) [12]

У меня выходит тоже самое:
Таблица с продукцией связана (MasterSource) с таблицей реквизитов документа. При записи нового товара автоматом присваивается значение индекса номера документа (по номеру связаны документ и продукция).
Как бы извернуться, чтобы при отмене ввода нового документа очищались соотв. записи в этих таблицах?


 
Sandman25 ©   (2003-09-17 13:17) [13]

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

Удалять вручную.


 
Denizzz   (2003-09-17 13:22) [14]

Этим и обхожусь.
Лишние действия (PackTable).


 
Sandman25 ©   (2003-09-17 13:26) [15]

Не обязательно вызывать PackTable после каждого удаления.
Можно это делать при входе/выходе из программы.


 
sewer1   (2003-09-17 13:30) [16]

А почему нельзя сделать вычисляемое поле и воспользоваться onCalcFields?



Страницы: 1 вся ветка

Текущий архив: 2003.10.06;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.024 c
1-18381
lak
2003-09-22 15:48
2003.10.06
вычисление выражений в префиксной записи


1-18291
ZoKr
2003-09-24 07:59
2003.10.06
ENTER=TAB


14-18594
dimon1979
2003-09-18 11:41
2003.10.06
Установка компонент


11-18286
Kladov
2003-01-23 15:15
2003.10.06
Конкурс на самую короткую реализацию Double2Str


6-18510
DrimS
2003-08-08 14:37
2003.10.06
Socket.Data