Форум: "Базы";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
ВнизСуммирование значений полей после выполнения 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.03 c