Вниз
Скачать: CL | DM;

Суммирование значений полей после выполнения SQL-запроса   Найти похожие ветки 

← →
Solar   (2004-01-30 12:36) [0]

Доброе время суток!
В силу отсутсвия достаточных знаний и источников их пополнения, вопрос.
При обработке нажатия некоторой клавиши, узается следующий код:
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; неких значений из таблицы по заданным условиям}
Но выбор необходимых значений и вывод их на экран - не единственная задача. Необходимо
из выбранного диапазона просуммировать значения всех полей из одной колонки (назовем ее,
к примеру - Фактурная стоимость). И вот в этом главная загвоздка для меня. Прошу Вашей помощи.


← →
stas ©   (2004-01-30 13:27) [1]

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


← →
pshechenko ©   (2004-01-30 16:41) [2]

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


← →
Dedushka_Mazai ©   (2004-01-30 17:06) [3]

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 17:30) [4]

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

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

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


← →
Gonsales   (2004-02-01 04:05) [5]

Я использую три варианта
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


← →
Polevi ©   (2004-02-01 12:19) [6]

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



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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.017 c
4-80365
zdn
2003-12-17 13:14
2004.02.25
Подключение к запущенному процесус


14-80135
IIStan
2004-02-02 01:25
2004.02.25
Где можно купить неонувую лампу?


1-80015
denis24
2004-02-12 19:00
2004.02.25
старый вопрос проокругление


1-79900
MainKaif
2004-02-10 09:21
2004.02.25
Консольные команды.


1-79866
staryx
2004-02-06 11:59
2004.02.25
Меню а-ля




   Наверх