Форум: "Базы";
Текущий архив: 2003.10.06;
Скачать: [xml.tar.bz2];
ВнизАвторасчет Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c