Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-79892
Анатолий
2004-02-10 09:06
2004.02.25
вопрос об использовании PGP


1-79791
SoftFM
2004-02-11 14:55
2004.02.25
Макрос


14-80208
DeMoN-777
2004-01-30 13:00
2004.02.25
Проблемы с WinXP


3-79670
Goida
2004-01-30 14:31
2004.02.25
Работа с DBGrid и DBListBox.


1-79960
@G
2004-02-13 18:33
2004.02.25
Дата и Время





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский