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