Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];

Вниз

Нужно просуммировать   Найти похожие ветки 

 
sloug ©   (2004-08-02 18:52) [0]

Добрый вечер уважаемые знатоки! Вопрос в следующем. Есть таблица Table1,в ней есть столбец Cost, мне нужно просуммировать значения всех записей в этом столбце. Как это сделать?


 
DSKalugin ©   (2004-08-02 19:15) [1]

var s:Double;
   c: LongInt;
begin
 s:=0;
 c:=Table1.RecNo;
 Table1.DisableControls;
 Table1.First;
 while not Table1.eof
   do s:=s+Table1.FieldByName("Cost").asFloat;
 Table1.RecNo:=c;
 Table1.EnableControls;
 label1.caption:=FloatToStr(s);
end;


 
сергей1   (2004-08-02 20:43) [2]

а еще можно вот так :

form1.ADOQuery1.SQL.Text:="select sum(cost) from Table1 ";
form1.ADOQuery1.Open;


 
AlexG ©   (2004-08-02 21:25) [3]

сергей1 верно говорит


 
GanibalLector ©   (2004-08-02 22:35) [4]

2 сергей1 and AlexG
А ADO тут причем???Обычным Query можно обойтись


 
vakir77   (2004-08-02 22:50) [5]

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add("select sum(cost) from Table1");
Query1.Open;


 
Johnmen ©   (2004-08-03 09:06) [6]

>SKalugin ©   (02.08.04 19:15) [1]

Чё-то ты накосячил и даже не извинился...:)))


 
Anatoly Podgoretsky ©   (2004-08-03 09:12) [7]

Обучает использованию Ctrl+Alt+Del


 
Johnmen ©   (2004-08-03 09:14) [8]

>Anatoly Podgoretsky ©   (03.08.04 09:12) [7]

Точно!


 
DSKalugin ©   (2004-08-03 12:44) [9]

:-))))))))) Next забыл


 
Johnmen ©   (2004-08-03 12:49) [10]

>:-))))))))) Next забыл

И не только его...:)


 
Rule ©   (2004-08-03 12:57) [11]

согласен с суммами, но вот есть альтернативный вариант, я его использую чаще, это отображение суммы прям в гриде, это делается легко средствами самого грида (я про DBGridEh)


 
Johnmen ©   (2004-08-03 12:59) [12]

>Rule ©   (03.08.04 12:57) [11]

>... легко средствами самого грида (я про DBGridEh)

Надеюсь понятно, что эти "средства" делают полный проход набора данных ? (типа [1])
:)


 
Rule ©   (2004-08-03 13:06) [13]

Johnmen ©   (03.08.04 12:59) [12]

Да , но делают они это локально, без подключения к БД


 
Johnmen ©   (2004-08-03 13:17) [14]

>Rule ©   (03.08.04 13:06) [13]
>Да , но делают они это локально, без подключения к БД

"локально" - полный проход, и, значит, получение клиентом ВСЕХ записей. Что полность эквивалентно while not Eof do begin; ... Next; end;
Выполнить просто запрос типа [2]/[5] менее накладно по ресурсам и часто быстрее...
Про подключение к БД не понял, но догадываюсь...:)


 
Rule ©   (2004-08-03 14:25) [15]

Johnmen ©   (03.08.04 13:17) [14]
"без подключения к БД" это типа без обращения к СУБД, а именно с теми данными которые были получены, кстати один из минусов, если не были получены все данные (fetch all) то показывает не правильную сумму, а в последней версии кстати вроде исправлено, получается что тогда помимо открытия происходит "выгребание всех данны", но это относится к Клиент-Серверным СУБД, а в данной ветке вроде обсуждается Парадокс, которая оной не является, так что для автора по моему будет проще использовать грид, так как BDE который будет обрабатывать запрос на сумму все равно будет перебирать все записи а так как серверной части нет то это будет происходить в самом приложении, таким образом все способы сводятся к одному и томуже, просто это одно  и тоже делают разные модули (части) (если перечислять то переборы делают BDE, DBGRIDEH  или руками, вот автору и предстоит выбрать более удобный метод, так как по своей функциональности они очень похожи)


 
Rule ©   (2004-08-03 14:27) [16]

Rule ©   (03.08.04 14:25) [15]
Ну если кто-то чего то понял то хорошо, а то я такого накрутил, аж самому старшно стало, сори за сложность высказываний, просто голова уже кипит, баги вылавливаю вот и тяжко мне :)


 
sloug ©   (2004-08-03 18:16) [17]

Спаисбо за то, что откликнулись на мою просьбу. Я только начинающий и поэтому не знаю как SQL запрос вывести в TEdit или TDBEdit.
Очень понравилось предложение сергей1. Когда пишу так как предложил DSKalugin ©, программа почему-то виснет.
У меня еще вопрос, могу ли я в локальной базе данных использовать TClientDataSet, потом создать агрегатное поле, значение которого привсоить TDBEdit. Так же вроде можно.И что такое DBGRIDEH.
Надеюсь на ответы, и если можно подробнее.


 
Johnmen ©   (2004-08-03 18:20) [18]

>sloug ©  

Тяга к знаниям похвальна.
Но не надо забывать, что здесь не курсы повышения квалификации и не курсы "Дельфи за 21 минуту".

Здесь ОТВЕЧАЮТ на КОНКРЕТНЫЕ вопросы !


 
sloug ©   (2004-08-03 19:13) [19]

Я сделал следующим образом:
 Var Summ: real;
Begin
 Summ:=0;
  With Form2.Table1 Do
  Begin
   While not eof do
    begin
     Summ:=Summ+FieldByName("Summ").AsFloat;
     next;
    end;
end;
end;

Все нормально считает.


 
Anatoly Podgoretsky ©   (2004-08-03 19:50) [20]

sloug ©   (03.08.04 19:13) [19]
Теперь тоже самое сделай с "select sum(cost) from Table1" и сравни время, думаю будет значительно быстрее. А данные получить еще проще Query.Fields[0].AsFloat

DSKalugin совместно с CAD пробовал :-)


 
DSKalugin ©   (2004-08-03 20:10) [21]

ЧТОБЫ НЕ ВИСЛО надо добавить Next и обрамить тело цикла в Begin end. Пардон за ошибку
var s:Double;
  c: LongInt;
begin
s:=0;
c:=Table1.RecNo; //запомним текущую позицию
Table1.DisableControls; //отключим пробег в DBGrid
Table1.First; // В начало таблицы
while not Table1.eof do begin
  s:=s+Table1.FieldByName("Cost").asFloat;
  Table1.Next;
end;
Table1.RecNo:=c; // возврат курсора на туже строку
Table1.EnableControls; //включаем курсор
label1.caption:=FloatToStr(s); //выводим результат
end;

С запросом на Query могут быть расхождения, если таблица окажется под фильтром. Тогда надо динамически формировать хвост WHERE
Так что при учете фильтрации это не проще будет.


 
Johnmen ©   (2004-08-03 23:29) [22]

>DSKalugin ©  (03.08.04 20:10) [21]

Вот-вот. И под фильтром ещё...:)
Так что запоминание позиции и возврат в нее делается не RecNo"мером, а с помощью закладок...



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

Форум: "Базы";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.053 c
10-1034539453
49
2002-10-14 00:04
2004.08.29
BOA


10-1034156256
Sikkens
2002-10-09 13:37
2004.08.29
idl2cpp error!!! HELP!


6-1086028320
BBCHa
2004-05-31 22:32
2004.08.29
Блокировка пакетов.


14-1092065538
Внук
2004-08-09 19:32
2004.08.29
Женился


14-1092318174
olookin
2004-08-12 17:42
2004.08.29
Новый альбом Rammstein...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский