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

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

Суммирование значений полей после выполнения SQL-запроса [D5, Paradox]


Solar ©   (2004-01-30 12:36:00) 

Доброе время суток!
В силу отсутсвия достаточных знаний и источников их пополнения, вопрос.
При обработке нажатия некоторой клавиши, узается следующий код:
Datasource1.DataSet := Query1;
RxDBGrid1.DataSource := DataSource1;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add("SELECT * FROM "K:\TABLE\table.db"");
Query1.SQL.Add(p); {p - строковая переменная, по которой происходит выборка
Query1.Open; неких значений из таблицы по заданным условиям}
Но выбор необходимых значений и вывод их на экран - не единственная задача. Необходимо
из выбранного диапазона просуммировать значения всех полей из одной колонки (назовем ее,
к примеру - Фактурная стоимость). И вот в этом главная загвоздка для меня. Прошу Вашей помощи.


Polevi   (2004-02-01 12:19:00) [1]

>Gonsales (01.02.04 04:05) [5]
а что в EhLib без цикла складывает ?


Gonsales   (2004-02-01 04:05:00) [2]

Я использую три варианта
1. Использую EhLib(DbGridEx) как сказал stas
Наверное лучший вариант
2. Циклом именно так как предложил Dedushka_Mazai
хотя все равно способ годится для маленькой выборки иначе тормоза.
3. Пишу запрос с Union
select 0, name, summa from table
union
select 1, name, sum(summa) from table group by name
order by 2, 1
для не Oracle и Sybase,
для Oracle использовать запрос с аналитическими функциями
для Sybase запрос с COMPUTE


pshechenko   (2004-01-30 17:30:00) [3]

да , про Next забыл :(
извиняюсь

получится так

while not Query1.eof do
begin
summ:=summ+Query1.FieldByName("Факт.Стоимость").asInteger;
Query1.Next;// переход на след.запись набора данных
end;


Dedushka_Mazai   (2004-01-30 17:06:00) [4]

2pshechenko:
надо ещё next ставить, а то вечный цикл получается.

2Solar:
можно так

function GetSum(DS: TDataSet; const AFName: string): Extended;
var BM: TBookmark;
begin
Result:=0;
BM:=DS.GetBookmark;
DS.DisableControls;
try
DS.First;
while not DS.Eof do begin
Result:=Result+DS.fieldbyname(AFName).AsFloat;
DS.Next;
end;
finally
DS.GotoBookmark(BM);
DS.FreeBookmark(BM);
DS.EnableControls;
end;
end;


pshechenko   (2004-01-30 16:41:00) [5]

//где-то так (проверь, могут быть ошибки)
var summ:integer;// сумма всех значений
begin
summ:=0;
Query1.Open;
while not Query1.eof do
summ:=summ+Query1.FieldByName("Факт.Стоимость").asInteger;
Query1.Close;
end;


stas   (2004-01-30 13:27:00) [6]

Можно циклом.
Можно использовать Dbgrideh


Наверх

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