C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Базы данных, Суммирование данных в столбце
Володя
Отправлено: 18.01.2005, 08:34


Не зарегистрирован







Привет всем.
Такой вопрос. Kак сделать так, чтобы после ввода данных в таблицу после нажатия на кнопку ИТОГО складывались все числовые данные в заданном столбце. То есть, если введено 10 наименований товара, их количество и цена, то можна было посчитать общее количество и цену. Спасибо всем ответившим. Можно, и даже желательно, писать мне на мыло — vkohan@list.ru
Valdemar
Отправлено: 18.01.2005, 09:00


Мастер участка

Группа: Участник
Сообщений: 433



Напишите примерно такой запрос:
CODE
SELECT SUM (count) itogo_count, SUM(price*count) itogo_price FROM table_name

Если надо, то в запросе можно указать условие WHERE.
AVC
Отправлено: 18.01.2005, 09:05


Ветеран

Группа: Модератор
Сообщений: 1583



Есть два основных способа:

1. Пробежаться по всем записям (или поручить это "умному" компоненту, например сетке). Схема решения:
Запомнить позицию курсора
DisableControls
for (First(); !Eof; Next()) Сумма += кол-во * цена
Восстановить позицию курсора
EnableControls
Есть варианты, оптимизирующие этот процесс.

2. Поручить это серверу.
Выполнить запрос вида
Select Sum(Kolvo * Cena) From ... Where ...
и прочитать результат.
full_lamer
Отправлено: 18.01.2005, 13:17


Машинист паровоза

Группа: Участник
Сообщений: 225



вообщем то есть и третий вариант — наверняка ты ведешь в базе идентификатор записей — так просто запоминай последний идентификатор после которого ты забивал записи. желательно чтобы ид был числовым, тогда можно просто выполнить запрос предложенный valdemar, только указать еще условие
CODE
WHERE id > <последний_известный_идентификатор>
avc*
Отправлено: 18.01.2005, 15:03


Не зарегистрирован







2full_lamer
Третьего нет. Все остальное разновидности этих двух.
Лично я иногда пользую такой метод:
Пробегаю по датасет и подситываю суммы.
При входе в редактор запоминаю начальное значение.
При посте из суммы отнимаю старое и добавляю новое.
Но это только разновидность способа 1.
У каждого из способов есть свои плюсы и минусы так что универсального решения нет. Каждое для каждого конкретного случая.


2Володя
Сейчас малось разгребусь и набросаю код по обходу датасета.

Вернуться в Работа с базами данных в C++Builder