![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Авторасчет [D5, Paradox]
Denizzz © (2003-09-17 12:04:00)
Первый раз столкнулся с необходимостью вычисления поля таблицы по данным полей этой же таблицы. Как это проще реализовать?
Например в идеальном варианте: Добавляем запись, заносим вес, цену и скидку, а сумма должна уже расчитаться автоматически.
Заранее благодарен.
sewer1 (2003-09-17 13:30:00) [1]
А почему нельзя сделать вычисляемое поле и воспользоваться onCalcFields?
Sandman25 (2003-09-17 13:26:00) [2]
Не обязательно вызывать PackTable после каждого удаления.
Можно это делать при входе/выходе из программы.
Denizzz (2003-09-17 13:22:00) [3]
Этим и обхожусь.
Лишние действия (PackTable).
Sandman25 (2003-09-17 13:17:00) [4]
>Как бы извернуться, чтобы при отмене ввода нового документа очищались соотв. записи в этих таблицах?
Удалять вручную.
Denizzz (2003-09-17 13:15:00) [5]
У меня выходит тоже самое:
Таблица с продукцией связана (MasterSource) с таблицей реквизитов документа. При записи нового товара автоматом присваивается значение индекса номера документа (по номеру связаны документ и продукция).
Как бы извернуться, чтобы при отмене ввода нового документа очищались соотв. записи в этих таблицах?
Sandman25 (2003-09-17 13:10:00) [6]
Вы имеете в виду как отменять заведение нового документа?
Я шапку записывал только непосредственно перед тем, как записывать товары. Можно было это считать одной транзакцией, в некотором роде. Вообще-то я с Paradox уже давно не работал, многое подзабыл.
Denizzz (2003-09-17 13:05:00) [7]
Благодарю, помогло.
На всякий случай: В документе Шапка это одна таблица, а в табличной части вносятся записи другой таблицы, связаной с первой. Как тогда реализовывается отмена сохранения документа (т.е. как сохраненные в кэш записи не сохранять)?
Обновляю записи принудительно (FlushBuffers).
Sandman25 (2003-09-17 12:42:00) [8]
>но сумма обновляется только когда встаешь на это поле.
Можно попытаться сделать TDBGrid.Invalidate или что-то подобное.
Я, правда, когда реализовывал что-то подобное, обрабатывал Datasource.OnDataChange, проблем с отображением там не было.
Denizzz (2003-09-17 12:34:00) [9]
Спасибо за советы. Воспользовался OnChange - помогло, но сумма обновляется только когда встаешь на это поле.
> Тогда не соответствует нормализации. Лишнии данные, которые
> расчитываются.
К документу может принадлежать несколько записей (одна таблица - документы, другая - завязанная по коду документа и содержащая записи документов), и проще будет иметь доступ к уже готовым суммам базы.
vopros (2003-09-17 12:26:00) [10]
Если он такие вопросы задает, то надежнее ему вычисляемое поле сделать.Да и на парадоксе пишет он.
Sandman25 (2003-09-17 12:23:00) [11]
Не соответствие нормализации не обязательно плохо. Например, если в таблицу триггерами записывается общая сумма по документу, что существенно ускоряет получение отчетов.
Anatoly Podgoretsky (2003-09-17 12:21:00) [12]
Тогда не соответствует нормализации. Лишнии данные, которые расчитываются. Но точно также их можно рассчитывать в момент записи или при каждом чихе.
Sandman25 (2003-09-17 12:11:00) [13]
[3] Anatoly Podgoretsky © (17.09.03 12:09)
Судя по его посту, ему нужно работать с настоящим полем БД.
Anatoly Podgoretsky (2003-09-17 12:09:00) [14]
Расчетные поля, нажми правую кнопку на наборе и добавь поле.
Sandman25 (2003-09-17 12:08:00) [15]
PriceField.OnChange, AmountField.OnChange и DiscountField.OnChange вызывают перерасчет SumField.Value
Sandman25 (2003-09-17 12:08:00) [16]
Либо в триггере на Insert/Update, если СУБД позволяет.