Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.25;
Скачать: 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 вся ветка

Текущий архив: 2004.02.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
14-80220
ZeRaM
2004-02-05 15:58
2004.02.25
HTML


14-80203
IronHawk
2004-01-19 15:10
2004.02.25
Народ прикиньте на БК спёрли моего героя! МОЕГО!!!


3-79666
Layner
2004-01-30 13:37
2004.02.25
Помогите вызвать хр. процедуру из тригера MS SQL Serv.


14-80151
Soft
2004-02-01 17:11
2004.02.25
Черствеем мы, спасите наши души.


14-80180
Solom
2004-01-31 20:22
2004.02.25
компилятор не видит TTabStrings