Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Группировка. Найти сумму вычисляемых полей. [D6, Access 2000]


Vic111 ©   (2006-05-16 10:57:00) 

Уважаемые Мастера, юпомогите советом.

Есть запрос из нескольких таблиц, на основании данных выборки рассчитываются данные вычисляемых полей. Как мне можно получить сумму значений, полученных в выч. поле, как если бы была сделана группировка по одному из полей запроса (CIKL_P).

Текст запроса:
SELECT Izdelia.masa_zag, Izdelia.cena_zag, Izdelia.masa_ot, Izdelia.cena_mat, [2Sotrudniki].FIO, [1Profesii].Oplata, Tehnologii.t, Oborudovanie.Amortizacia, Oborudovanie.rashod_exp, Izdelia.proch_rash
FROM Tehnologii INNER JOIN (Oborudovanie INNER JOIN (Izdelia INNER JOIN ((1Profesii INNER JOIN 2Sotrudniki ON [1Profesii].N = [2Sotrudniki].Doljnost) INNER JOIN CIKL_Proizv ON [2Sotrudniki].N = CIKL_Proizv.Rabotn) ON Izdelia.N = CIKL_Proizv.CIKL_P) ON Oborudovanie.N = CIKL_Proizv.Oborud) ON Tehnologii.N = CIKL_Proizv.Tehnolog

Заранее спасибо.


Vic111   (2006-05-16 16:43:00) [1]

Торможу!
Бывает!
Частенько!
;-)

Запрос перестроить не получается :-(, там данные из 6 табл.

А насколько неправильно будет создать 2-й DS и сделать:
ADODataSet1.Recordset:=ADODataSet_Sebest.Recordset;

и затем в зависимости от положения в 1-м - бегать по 2-му и искать сумму?


Sergey13   (2006-05-16 12:55:00) [2]

2[6] Vic111   (16.05.06 12:53)
А подумать? На переход на следующую строку вешать переход по всем строкам.


Vic111   (2006-05-16 12:53:00) [3]

В  AfterScroll DataSet-а, в нем же создаю вычисляемые поля.

Спасибо, ВСЕМ за подсказки, сейчас проверю.


MsGuns   (2006-05-16 12:33:00) [4]

Чей-то не узрел в сабже вычисляемых полей.

А проблемка решается так:

Основной запрос, возвращающий вычисляемые поля:

SELECT P.skladid, P.prodid, P.prodname, P.cost, P.quont, P.cost*P.quont AS summ
 FROM Production P

Для получения общей суммы надо выполнить другой запрос, получамый из первого:

SELECT A.skladid, SUM(A.summ) FROM
   (SELECT P.prodid, P.prodname, P.cost, P.quont, P.cost*P.quont AS summ
      FROM Production P) A
  GROUP BY A.skladid

Первый НД отображается в сетке (типа просмотр картотек складов), из второго данные забираются в отображаемые контролы-итоги.

Для достоверности результатов оба запроса надо выполнять в контексте одной транзакции.


ANB   (2006-05-16 12:21:00) [5]


> Vic111   (16.05.06 10:57)

Аксесс подзапросы в селектовой части кушает ?


Sergey13   (2006-05-16 11:45:00) [6]

>Куда его можно запихнуть?
Гусары, молчать!!!! 8-)

2 [2] Vic111   (16.05.06 11:36)
>но если ставлю его в AfterScroll
В AfterScroll чего?


Vic111   (2006-05-16 11:36:00) [7]

Высмыкнул такой кусочек кода

function TSebest_Form.SumField(const fieldName: String): real;
var
fld: TField;
bm: TBookmark;
begin
result := 0;
ADODataSet_Sebest.DisableControls;
bm := ADODataSet_Sebest.GetBookmark;
fld := ADODataSet_Sebest.FieldByName(fieldName);
ADODataSet_Sebest.first;
while not ADODataSet_Sebest.eof do
begin
 result := result + fld.AsFloat;
 ADODataSet_Sebest.next;
end;
ADODataSet_Sebest.GotoBookmark(bm);
ADODataSet_Sebest.EnableControls;
label1.Caption:=FloatToStr(result);
end;

но если ставлю его в AfterScroll (чтобы отслеживать данные конкретной детали) то вылетает переполнение стека. Куда его можно запихнуть?


Sergey13   (2006-05-16 11:03:00) [8]

2Vic111   (16.05.06 10:57)
1.Циклом пробегись по набору и просуммируй вычисляемые поля.
2.Переделай запрос и введи вычисления в него.


Наверх

Титульная страница Поиск, карта сайта Написать письмо