Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

кто как считает итоги в DBGrid ?


tchn ©   (2003-11-26 23:30:00) 

как подсчитать, к примеру сумму данных в колонке DBGrid? или среднее?
есть много компонентов с агрегатными функциями в гриде, но без исходников, а самому задачу решить чего-то не под силу ((
можно каждый раз пробегаться по DataSet"у этого грида при изменении данных, и считать что надо.
но это, кажется, плохой выход. к тому же некрасиво выглядит этот момент (указатель бегает по гриду, скроллбар скачет...)
подскажите, если кто богат опытом


tchn   (2003-11-27 19:15:00) [1]

ага.
вот ЮЮ дело говорит. самое то.
благодарствую


chtr   (2003-11-27 08:53:00) [2]

Прошу прощения за свою невнимательность у публики :)


mfender   (2003-11-27 08:27:00) [3]


> chtr © (27.11.03 08:09) [10]
> А почему бы в OnPost не запросить сумму по полю из базы?


Так ведь опять же запрос...
А надо было:
> но в том и дело, что пользователь работает с открытым запросом,
> так что нужно у клиента это дело считать. ввел цифиру в
> ячейку - итог посчитался...

Что-то Вы мозги тут почтенной публике пудрите.


chtr   (2003-11-27 08:09:00) [4]

А почему бы в OnPost не запросить сумму по полю из базы?


mfender   (2003-11-27 08:07:00) [5]

Ну а уж "указатель на прежнее место вернуть", думаю особых затруднений не вызовет.


mfender   (2003-11-27 08:04:00) [6]


> ЮЮ © (27.11.03 04:16) [6]
> >ввел цифиру в ячейку - итог посчитался
>
> Отнял от суммы то, что было до редактирования и прибавил
> то, что получилось после, и бегать по всеиу НД не надо (только
> при открытии). Так. кстати сделано и в DBGridEh


Умно. Следует прислушаться.


> tchn © (27.11.03 02:26) [5]
> все это хорошо, конечно, запросы на сервере, хранимые процедуры
> и т.д.
> но в том и дело, что пользователь работает с открытым запросом,
> так что нужно у клиента это дело считать. ввел цифиру в
> ячейку - итог посчитался...
> так что? все-таки бегать?
> ладно, бегать - так бегать. а как в таком случае спеэффекты-то
> убрать? и еще ж нужно указатель на прежнее место вернуть
> после беготни...


Не совсем понятно, как в "открытом запросе" можно поменять значение поля, не закрывая его. Или это для того, чтобы только отдельновзятый клиент видел, что там получится, а уж лищь затем UPDATE делал?
Тогда, батенька, следует Вам прислушаться таки к ЮЮ © (27.11.03 04:16) [6], а лучше пользоваться не совсем средствами БД.


chtr   (2003-11-27 07:42:00) [7]

Я бы наверное в еще одном датасете посчитал сумму


ЮЮ   (2003-11-27 04:16:00) [8]

>ввел цифиру в ячейку - итог посчитался

Отнял от суммы то, что было до редактирования и прибавил то, что получилось после, и бегать по всеиу НД не надо (только при открытии). Так. кстати сделано и в DBGridEh


tchn   (2003-11-27 02:26:00) [9]

все это хорошо, конечно, запросы на сервере, хранимые процедуры и т.д.
но в том и дело, что пользователь работает с открытым запросом, так что нужно у клиента это дело считать. ввел цифиру в ячейку - итог посчитался...
так что? все-таки бегать?
ладно, бегать - так бегать. а как в таком случае спеэффекты-то убрать? и еще ж нужно указатель на прежнее место вернуть после беготни...


Michail Dalakov   (2003-11-27 00:51:00) [10]

Нет универсального решения на все случаи жизни,
если данные в гриде довольно статичны то лучше деиствительно
использовать СУБД. А если открытый Query часто редактируется то дешевле будет правильно организовать все это на клиенте, написав
(или используя) соответствующий компонент, ибо запускать процедуру на сервере при каждом изменении поля, вставке или удалении слишком накладно.


Vemer   (2003-11-27 00:37:00) [11]

Хоть и не указан тип БД, но наверно подойдет:
1 раз написать хранимую процедуру с подфункциями и процедуру вызова ее из программы. Типа:
Sklad_Sum.Caption := FloatToStr((Call_Proc(1,0)) - вывод суммы склада;
SellDAY_Sum.Caption := FloatToStr((Call_Proc(2,Date))- вывод суммы продаж за сегодня и т. п.


Где Call_Proc - Процедура задающая нужные параметры для вызова ХП. На одну ХП с 2-4 параметрами можно повесить почти все стандартные расчеты по колонкам (кол-во, сумма, среднее и т.д.)
SQL внутри базы считает очень быстро и без всяких спецэффектов в гриде.


mfender   (2003-11-26 23:40:00) [12]

Чтобы не скакало и не бегало нужно писать что-то типа DisableControls, я думаю...
Наверное, примерно так же поступают и многие из подразумевающихся компонентов. Рекомендую таки пользоваться TQuery и т.п., и считать соответственно прямо в запросе. Много лет жизни можно сэкономить.


Michail Dalakov   (2003-11-26 23:38:00) [13]

Не хочется бегать по DataSet, возвращай с сервера, а как еще?

Ну если бегать, то можно сделать и без спецэффектов (указатель бегает по гриду, скроллбар скачет...)


Наверх

Титульная страница Поиск, карта сайта Написать письмо