Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сложение, вычитание, умножение, деление, проценты, таблица умножения в базе. 
:(
    Опции темы
Sett
Дата 19.4.2005, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 20.12.2004
Где: Подольск

Репутация: нет
Всего: нет



Доброго времени суток Всем!

У меня вопрос, делаю базы, пользуюсь компонентами: Table1, DataSource1 and DBGrid1. Вопрос заключается вот в чём, в принципе понемногу осваиваю возможности что гдето придумываю и вроде всё получается.

Но ни как не могу разобраться как можно вести подсчёт ячеек, то есть в одном столбце есть много цифр, меня интересует как сделать так чтобы данный столбец посчитался (сложился, умножился, разделился, - не важно) сам по себе и вывел СУММУ в каком нибудь Label1.Caption ?

Друзья мои кто может помогите, уже и не знаю что придумать у самого не получается вообще!
PM MAIL WWW ICQ   Вверх
Петрович
Дата 19.4.2005, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 6
Всего: 55



Используй вместо tDBGrid например tDBGridEh из библиотеки EhLib. Там есть подсчет агрегативных функций. Либо пользуйся SQL-запросами с агрегативными функциями.

Это сообщение отредактировал(а) Петрович - 19.4.2005, 23:12


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
DimW
Дата 20.4.2005, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 5
Всего: 44



Цитата
Используй вместо tDBGrid например tDBGridEh из библиотеки EhLib.


Сам пользуюсь этой библиотекой. Библиотека просто супер!!!
Но Sett кликать мышью можно научиться всегда, а вот понять как это насамом деле работает для тебя будет наверное лучше... Тем более
Цитата
в принципе понемногу осваиваю возможности что гдето придумываю и вроде всё получается.


так вот:

допустим Table1 возвращает все записи из таблицы Table_Name;
допустим тебе нужно подсчитать сумму поля Field_name из таблицы Table_Name;
кидаешь на форму Query и прописываешь SQL:
Код

SELECT SUM(FIELD_NAME) AS SUM_FIELD_NAME
FROM TABLE_NAME;


при выполнении Query возвратьт сумму по полю Field_name в SUM_FIELD_NAME.

Затем ты хочешь:
Цитата
вывел СУММУ в каком нибудь Label1.Caption


При нажатии на кнопку или еще что нить.... :
Код

begin
Query.close;
Query.open;
Label1.Caption:=Query.FieldByName('SUM_FIELD_NAME').AsString;
end;


З.Ы. главное чтобы Table и Query возвращали одинаковый набор данных т.е. условия выбора данных были одинаковые...





PM MAIL ICQ   Вверх
offline
Дата 20.4.2005, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



действительно, EhLib супер, ставь и не будет головных болей.

можно как посоветовал DimW но это SQL. Если ты с ним не знаком, то есль оди выход, но это на рациональный способ.
Повесь на обработчики событий компонента DataSource цикл, который пробегает от первой записи и до последней, вычисляет нужные операции и скидывает значения куда тебе нужно, но это не красивый способ, хотя работает правильно smile

PM MAIL   Вверх
DimW
Дата 21.4.2005, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 5
Всего: 44



Цитата
но это не красивый способ

еще какой!!!!
Цитата
хотя работает правильно

но долго!!!

И вообще если человек хочет заниматься БД, то SQL это язык без которого не возможно построить грамотное приложение!!!
PM MAIL ICQ   Вверх
offline
Дата 21.4.2005, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Цитата
И вообще если человек хочет заниматься БД, то SQL это язык без которого не возможно построить грамотное приложение!!!


Согласен на все 100%
Но если человек только начал разбираться, а проект горит, то пусть выкрутиться некрасивыми методами. А уж когда овладеет секретом SQL smile, то все карты в руки переделывать старые проекты.
PM MAIL   Вверх
Sett
Дата 21.4.2005, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 20.12.2004
Где: Подольск

Репутация: нет
Всего: нет



Я благодарен, за помощь. Но критики то зачем столько по поводу, как я программирую.
Я начинающий, далеко не любитель, а видь разница огроманая (начинающий - любитель).
Освоюсь возмусь за SQL, но пока по простому.

Да, kirilllius, подскажи пожалуйста как делать цикл, любой простой пример, а то не знаю
как smile , спасибо.

И если можешь покажи пожалуйста пример, какой нибудь математической функции,
типа:
2+2=4
2*8=16
18 поделить на 6 = 3

////////////////////

в одно Edit'e.Text= 2

функция сложить

в другом Edit'e.Text= 3

нажимаем кнопку и получаем ответ в Label1.Caption = 5

Это сообщение отредактировал(а) Sett - 21.4.2005, 22:32
PM MAIL WWW ICQ   Вверх
DimW
Дата 22.4.2005, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 5
Всего: 44



Label1.Caption:=FloatToStr(StrToFloat(Edit1.text)+StrToFloat(Edit2.text));

или StrToInt для целых чисел.

Цитата
Но критики то зачем столько по поводу, как я программирую.


Ды некто тебя не критекует, просто пытаемся помоч... smile
Добавлено @ 07:37
вопрос был не комне, но отвечу по поводу цикла:

Код

var
i:integer;
m:Real;
-------------------------------------------------------
m:=0;
Table1.First;//становимся на первую запись...
for i:=1 to Table1.RecordCount do
begin
m:=m+Table1.FieldByName('поле_которое_нужно_просуммировать').AsFloat;
Table1.next;// переходим на следущую...
end;
Label1.Caption:=FloatToStr(m);


Так можно просуммировать поле.
PM MAIL ICQ   Вверх
Петрович
Дата 22.4.2005, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 6
Всего: 55



Цитата(DimW @ 22.4.2005, 08:29)
вопрос был не комне, но отвечу по поводу цикла:
Приведенный код может не всегда корректно работать поскольку для некоторых СУБД значение RecordCount может быть недействительным.
Правильнее будет:
Код

var
  i:integer;
 m:Real;
...
  m:=0;
  Table1.First;//становимся на первую запись...
  while  not Table1.EOF  do begin  // пока не достигли конца набора данных
    m:=m+Table1.FieldByName('поле_которое_нужно_просуммировать').AsFloat;
    Table1.next;// переходим на следущую...
  end;
  Label1.Caption:=FloatToStr(m);

Добавлено @ 12:21
А еще, что-бы побыстрее работало, можно сделать так:
Код

var
  i:integer;
  m:Real;
  f:tField;
...
  m:=0;
  Table1.First;//становимся на первую запись...
  f := Table1.FieldByName('поле_которое_нужно_просуммировать'); // поле которое суммируем
  while  not Table1.EOF  do begin  // пока не достигли конца набора данных
    m:=m+f.AsFloat;
    Table1.next;// переходим на следущую...
  end;
  Label1.Caption:=FloatToStr(m);


Это сообщение отредактировал(а) Петрович - 22.4.2005, 12:19


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Sett
Дата 25.4.2005, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 20.12.2004
Где: Подольск

Репутация: нет
Всего: нет



Очень благодарен. Спасибо!
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0843 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.