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

Вниз

Автокалькуляция в связанных таблицах   Найти похожие ветки 

 
Lord Vader ©   (2003-06-10 07:02) [0]

Имеется две связанные таблицы по типу "владелец-детали". Необходимо в первой таблице(владелец) в вычисляемое поле внести сумму всех значений из подчиненной таблицы(детали). Вот кусок моей программы:

procedure TMainForm.ROrderTableCalcFields(DataSet: TDataSet);
var
b:boolean;
sum:currency;
begin
//вычисляем сумму всех полей в таблице "детали"
sum:=0;
with RealizTable do
begin
b:=FindFirst;
while b do
begin
sum:=sum+fieldbyname("realiz").ascurrency;
b:=FindNext;
end;
end;
//обновляем данные для владельца
with rordertable do FieldByName("realiz").AsCurrency:=sum;
with rordertable do FieldByName("total").AsCurrency:=fieldbyname("kassa").ascurrency+fieldbyname("realiz").ascurrency;
end;

Но в итоге при добавлении, удалении строки в таблицу владельца или изменения данных выводятся некорректные значения в мое вычисляемое поле. Как сделать так, чтобы при OnCalcFields владельца DELPHI все ж обновлял связь с таблицей детали и правильно считал итог?


 
VAleksey ©   (2003-06-10 08:52) [1]

Никак.


 
VAleksey ©   (2003-06-10 08:55) [2]

OnCalcFields для этого не предназначен
Используй вычисление отдельной процедурой по кнопке или пересчитывай суммы после поста дочерней таблицы или используй квери, если таблички не очень большие.


 
Sergey13 ©   (2003-06-10 08:55) [3]

Если честно, то я не понимаю как это вообще работает. И вообще многое не ясно. Ты вычисляешь сумму по ВСЕЙ детальной таблице, или по фильтрованому набору? Что из себя представляют сами НД - таблицы или запросы, и как осуществляется отбор данных в детале? Данные мастер-таблицы в гриде или видна только одна запись?
>Но в итоге при добавлении, удалении строки в таблицу владельца
Каким макаром ты удаляешь/добавляешь в мастер таблицу?
>или изменения данных
Изменение каких данных в мастере может повлечь за собой изменение суммы по деталу?

Что можно посоветовать. Попоробуй отказаться от калк-полей и замени их на вычисляемые в SQL-запросе. Или как то пересмотреть логику работы. То, что ты описал - ИМХО не лучший повод для использования калк-полей.


 
makdi   (2003-06-10 09:39) [4]

Согласен с Sergey13
Что тебе мешает написать запрос?
Select t.field, sum(t2.field)
from table1 t, table2 t2
where t.field1=t2.field2 //связываем таблицы между собой
group by t.field
И будет тебе счастье :)
Если не понял, то пиши.



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

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

Наверх




Память: 0.48 MB
Время: 0.018 c
9-7281
Кен
2003-01-20 01:33
2003.07.03
В GLscene screensaver глючит ! С ним в комплекте идёт демка, чтоб


1-7547
yu-roman
2003-06-22 03:55
2003.07.03
TListBox скорость загрузки


14-7677
nick-from
2003-06-16 09:37
2003.07.03
Народ нужен хостинг, бесплатный естественно, с поддержкой


7-7747
danja
2003-04-21 10:47
2003.07.03
Урезать ClipRect канвы принтера


14-7719
ZeroDivide
2003-06-10 12:40
2003.07.03
Бесконечная история 1