Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.011 c
14-46133
AL2002
2002-10-25 18:21
2002.11.14
Спасибо мастерам Дельфи.


4-46185
Th
2002-10-02 20:20
2002.11.14
Как Bitmap поместить на DC?


1-45890
Nostradamus
2002-11-05 18:40
2002.11.14
Текст с прозрачным фоном


1-45886
Брат
2002-11-05 17:04
2002.11.14
Как остановить выполнение программы на определенный промежуток...


1-45956
Comp
2002-11-04 13:49
2002.11.14
И ещё...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский