Форум: "Базы";
Текущий архив: 2002.11.14;
Скачать: [xml.tar.bz2];
ВнизЕсть вопрос Найти похожие ветки
← →
Hlor (2002-10-26 19:17) [0]Доброе время суток Мастера!
Очередной раз прошу Вас мне помочь!
Угараздило меня написать прогу с БД. Вообщем писалось нормально и вообщем то сложного ничего... Но все же есть один вопрос.
Да вот сам сообственно вопрос...
Два таблицы master/detail. Необходимо сначала просчитать detail,
а потом просуммировать все поля в detail и результат использовать в
master. Дело в том, что первая заполняеться master, а потом detail
и естественно, что бы получить нужный результат надо обновить таблицы и при этом получаеться переполнение стека. Вообщем циклица прога и все.
На сколько я понимаю это из-за калькуляции, потому что, после нее выполняеться обновление таблицы, а так как у меня в калькуляции стоит обновление связанной таблицы, то все повторяеться снова и снова...
procedure TDMod.KrasTableCalcFields(DataSet: TDataSet);
var
k : double;
begin
.....
KrasTableCenaVsega.Value:= KrasTableCenaKrasitelya.Value+k;
MainTable.Refresh;
end;
procedure TDMod.MainTableCalcFields(DataSet: TDataSet);
var
r : double;
begin
{Сумму все красителей я считаю обычным перебором, не самый оптимальный способ, но этих полей больше чем 7 не бывает}
KrasTable.Open;
KrasTable.First;
while not KrasTable.Eof do
begin
r := KrasTable.Fields.Fields[4].Value+r;
KrasTable.Next;
end;
MainTableCenaVZakaza.Value:= MainTableKolvo.Value*MainTableCenaBazu.Value+R;
end;
Возможно это не самый оптимальный вариант, подскажите может можно это как-то переделать...
За ранее огромное спасибо!!!
← →
dim- (2002-10-26 20:34) [1]а почему не хочешь использовать функции SQL запроса Sum(a)
← →
MsGuns (2002-10-26 22:11) [2]Occurs when an application recalculates calculated fields.
property OnCalcFields: TDataSetNotifyEvent;
Description
Write an OnCalcFields event handler to take specific action when an application recalculates calculated fields. A calculated field is one that derives its value from the values in one or more fields in the dataset, sometimes with additional processing.
OnCalcFields is triggered when
A dataset is opened.
A dataset is put into dsEdit state.
A record is retrieved from a database.
When the AutoCalcFields property is True, OnCalcFields is also triggered when:
Focus moves from one visual control to another, or from one column to another is a data-aware grid control and modifications were made to the record.
Note: When the AutoCalcFields property is True, an OnCalcFields event handler should not modify the dataset (or a linked dataset if it is part of a master-detail relationship), because such modifications retrigger the OnCalcField event, leading to infinite recursion.
If an application permits users to change data, OnCalcFields is frequently triggered. To reduce the frequency with which OnCalcFields occurs, set AutoCalcFields to False.
Warning: When the dataset is the master table of a master-detail relationship, OnCalcFields occurs before detail sets have been synchronized with the master table.
Неправильно в корне использования события OnCalcFields
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.11.14;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.009 c