Форум: "Базы";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
ВнизКак реализовать поле с суммой значений из другой таблицы? Найти похожие ветки
← →
Morrison © (2004-09-17 17:47) [0]Т. е.
Таблица Visits: visitId, date, clientId + serviceSum;
Таблица Services: serviceId, name, price, visitId;
Таблицы связаны по полю VisitId. Поле serviceSum должно содержать сумму значений поля price. Причем подсчет должен осуществляться только для текущей записи таблицы Visits. Поэтому вычилсяемые поля в этом случае не подходят. Я пытался написать собственную процедуру вычиления суммы и запускать ее, когда надо, но Делфи имеет привычку обнулять вычисляемые поля каждый раз, когда должно выполняться событие OnCalcFields. Может есть способ сделать так, чтобы не обнулял? Т. е. просто чтобы было поле, куда я могу записывать все что угодно?
← →
menart © (2004-09-17 17:59) [1]напиши устроиство таблиц по подробнее, а то:
> Таблица Visits: visitId, date, clientId + serviceSum;
> Таблица Services: serviceId, name, price, visitId;
не совсем понятно
← →
Роман Снегирев (2004-09-17 18:00) [2]а при чем тут вычисляемые поля. Просто напиши процедуру типа "пересчет", в которой беги в цикле по таблице визитс, для каждой записи вычисляй сумму поля price из таблицы Services и присваивай ее значение полю serviceSum текущей записи таблицы Visits (фу, вроде ничего не перепутал)
← →
Morrison © (2004-09-17 18:03) [3]Поле ServiceSum -- это такое поле, которого у меня нет, но которое мне хочется чтобы было :) Поэтому оно приплюсовано. В этом поле должна быть суммы значений price из таблицы Sevices.
Таблица Visits: visitId, date, clientId + serviceSum;
← →
Morrison © (2004-09-17 18:09) [4]Роман Снегирев,
Именно это я и хотел сделать. Но тогда какое поле добавлять в таблицу? Data требует, чтобы поле реально существовало, Calculated -- я уже говорил, Lookup тоже не подходит...
← →
Morrison © (2004-09-18 00:20) [5]И всё же...
← →
kaif © (2004-09-18 00:55) [6]Т. е. просто чтобы было поле, куда я могу записывать все что угодно?
Может быть сделать режим CachedUpdates = True и записывть туда все, что угодно?
Хотя я бы все же сделал через SQL-запрос или в крайнем случае через OnCalcFields. Почему бы не вычислять много раз? Если не хочется вычислять много раз - можно массив соорудить и там хранить результаты вычислений, а в OnCalcFields только присваивать значение, извлекая из массива (если оно там есть).
← →
сергей1 (2004-09-18 08:31) [7]не знаю насчет paradoxa, но для MSSQL это делается элементарно.
сначала считаем сумму
form1.ADOQuery2.SQL.Text:="select sum(ServiceSum) as res from Services";
form1.ADOQuery2.Open;
v:=form1.ADOQuery2.FieldByName("res").AsString;
теперь другой query (а можно даже то-же самый использовать) посылает запрос и результат светиться в гриде.
form1.ADOQuery1.SQL.Text:="select visitId, date, clientId + + "+ v + "from Visits";
form1.ADOQuery1.Open;
все, или я что-то неправильно понял ?
← →
сергей1 (2004-09-18 08:33) [8]ой, ошибочка,
>form1.ADOQuery1.SQL.Text:="select visitId, date, clientId + + "+ v + "from Visits";
читать как
form1.ADOQuery1.SQL.Text:="select visitId, date, clientId + "+ v + "from Visits";
← →
ЮЮ © (2004-09-20 03:27) [9]1) Запрос
SELECT SUM(Price) Price FROM Services WHERE visitId = :visitId
оформляешь как Detail Query
2) Если суииа нужна в гриде вместе с полями из Visits, то используем вложенный подзапрос: price.sql (текстовый файл в папке с таблицами):
SELECT visitId, SUM(Price) Price FROM Services GROUP BY visitId
Тогда запрос из Visits имее вид:
SELECT Visits.*, Price
FROM
Visits
LEFT JOIN price.sql price ON Visits.visitId = price.visitId
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.037 c