Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
3 / 3 / 0
Регистрация: 21.05.2016
Сообщений: 304

Как суммировать столбцы DbGrid?

26.05.2016, 22:10. Показов 4817. Ответов 46
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
здравствуйте, хочу суммировать столбцы dbgrid, на форме dbgrid стримиа столбцами хочу суммировать две из них
какое, значение не имеет (потом сам переделаю), суммировать по отдельности, по вертикале и результат вывести
dbedit или edit, чтоб мог суммировать дробные числа, на форме dbgrid , ClientDataSet , DataSource.
если можно код дайте под кнопочку, мне так легче вниом разобраться. спасибо зарание.

Добавлено через 9 минут
в интернете нашел код с компонентам adoQuery или Query. не у меня таких компонентов нету, если без них обойдусь будет хорошо.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.05.2016, 22:10
Ответы с готовыми решениями:

Фиксирование нужных столбцов DBGrid или скрыть относительно позиции гор. скролла DBGrid'a необходимые столбцы
Добрый день! Можно ли в компоненте DBGrid сделать фиксированными определенные столбцы? или же как то вычислять позицию горизонтального...

Как вместить все столбцы DBGrid?
Они есть, но не вмещаются, при прокрутке видны. Мне нужно что бы без прокрутки были видны.

Столбцы в DBGrid - как задать ширину каждому из них ?
Добрый день ув. пользователи. Помогите пожалуйста. У меня есть форма, на которой расположено четыре компонента для работы с БД (MS Access...

46
3 / 3 / 0
Регистрация: 21.05.2016
Сообщений: 304
29.05.2016, 12:48  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от krapotkin Посмотреть сообщение
тут речь шла об итоге ПО ВСЕМ ЗАПИСЯМ
не каждый столбик по отдельности
0
 Аватар для Пытливый
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
29.05.2016, 12:52
Упс...
суммировать по отдельности, по вертикале
действительно, упустил этот момент. Тогда конечно вычисляемый столбец тут не пойдет.

Добавлено через 2 минуты
Тогда надо делать итоги, а вот выводить их куда? У вас видимо на форме есть Edit или Label который предназначен для этого? DBEdit тут не подойдет.
0
3 / 3 / 0
Регистрация: 21.05.2016
Сообщений: 304
29.05.2016, 12:56  [ТС]
Цитата Сообщение от krapotkin Посмотреть сообщение
тут речь шла об итоге ПО ВСЕМ ЗАПИСЯМ
каждый столбик по отдельности

Добавлено через 3 минуты
Цитата Сообщение от Пытливый Посмотреть сообщение
Тогда надо делать итоги, а вот выводить их куда? У вас видимо на форме есть Edit или Label который предназначен для этого? DBEdit тут не подойдет.
пусть будет edit буду благодарен
0
 Аватар для Пытливый
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
29.05.2016, 13:08
В общем я могу предложить вот такой алгоритм. Создаем динамический массив для итогов по количеству колонок в таблице:
Delphi
1
2
3
4
5
var ATotal: Array of Integer;
...
for i := 0 to ClientDataSet1.Fields.Count - 1
do if ClientDataSet1.Fields.Fields[i].DataType in [ftInteger, ftSmallInt]
    then SetLength(ATotal, Length(ATotal) + 1);
проходим по всему ClientDataSet1 накапливая сумму для каждой колонки:

Delphi
1
2
3
4
5
6
7
8
9
10
11
while not ClientDataSet1.eof
do begin
   n := 0;
    for i := 0 to ClientDataSet1.Fields.Count - 1
    do if ClientDataSet1.Fields.Fields[i].DataType in [ftInteger, ftSmallInt]
        then begin
               Inc(ATotal[n], ClientDataSet1.FieldByName('Calculated').AsInteger + ClientDataSet1.Fields.Fields[i].AsInteger);
               Inc(n);
               end;
    ClientDataSet1.next;
    end;
0
3 / 3 / 0
Регистрация: 21.05.2016
Сообщений: 304
29.05.2016, 13:19  [ТС]
а где результаты будут выводиться
у меня три столбика и две из них хочу суммировать по отдельности
еще раз спасибо

Добавлено через 7 минут
Пытливый, извини конечно можите код под кнопку dat ато в этом коде что то не разберусь
почему мне два кода дали я чота запутался
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
29.05.2016, 13:30
вам не нужно по всем столбцам, нужно по конкретным, поэтому можно взять вполне конкретный размер массива
кроме того, надо пробежать по датасету, просуммировать, а потом вернуться на место!
а еще отключить от него грид, чтобы на время пробега он не перерисовывался как чумной

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var bm:TBookmark;
  arr:array[0..1] of double;
begin
  arr[0]:=0;
  arr[1]:=0;
  bm:=ds.GetBookmark;
  ds.DisableControls;
  try
    ds.First;
    while not ds.eof do
    begin
      arr[0]:=arr[0]+ds.FieldByName('aaaa').AsFloat;
      arr[1]:=arr[1]+ds.FieldByName('bbb').AsFloat;
      ds.next;
    end;
  finally
    ds.Gotobookmark(bm);
    ds.EnableControls;
    freeBookmark(bm);
  end;
edit1.text := floattostr(arr[0]);
edit2.text:= floatToStr(arr[1]);
end;
1
3 / 3 / 0
Регистрация: 21.05.2016
Сообщений: 304
29.05.2016, 13:46  [ТС]
krapotkin, GetBookmark ошибку выдает underklader identifier uses надо что то прописать?
0
3 / 3 / 0
Регистрация: 21.05.2016
Сообщений: 304
29.05.2016, 13:54  [ТС]
krapotkin,
Миниатюры
Как суммировать столбцы DbGrid?  
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
29.05.2016, 14:11
какая версия делфи-то хоть
я же вслепую пишу...
0
3 / 3 / 0
Регистрация: 21.05.2016
Сообщений: 304
29.05.2016, 14:14  [ТС]
embarcadero rad studio 2010
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
29.05.2016, 14:53
TClientDataset объявлен в DBClient.pas
он произведен от TDataSet, который объявлен в DB.pas

пользуйтесь справкой и исходниками, тут никто не обязан за вас лазить по справке
тем более, старой версии
0
3 / 3 / 0
Регистрация: 21.05.2016
Сообщений: 304
29.05.2016, 15:00  [ТС]
OK, спасибо но так и не получил ответа
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
29.05.2016, 15:06
на здоровье
а DCLient и DB это вовсе не ответ?
0
3 / 3 / 0
Регистрация: 21.05.2016
Сообщений: 304
30.05.2016, 00:05  [ТС]
helpppppppp
0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
30.05.2016, 13:46
еще раз
идете в исходники и ищете, в каком файле объявлен TClientDataSet
если в нем нет метода GetBookmark
ищем, в каком файле объявлен его предок - TDataSet, у него точно есть этот метод

имя файла ставим в uses
вот документация
там тоже есть нужная информация

раз
два
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,607
30.05.2016, 15:57
Лучший ответ Сообщение было отмечено kobakoba7 как решение

Решение

Цитата Сообщение от kobakoba7 Посмотреть сообщение
суммировать по отдельности, по вертикале и результат вывести
dbedit или edit
Так понятно ? Очищается DBGrid
-- qrySUMM это ADOQuery2 и с этим выполняем SQL запрос
SQL
1
SELECT SUM(price) FROM printer
-- из ADOQuery1 просто
SQL
1
SELECT * FROM printer
Добавлено через 5 минут
Цитата Сообщение от Пытливый Посмотреть сообщение
проходим по всему ClientDataSet1 накапливая сумму для каждой колонки:
Такой алгоритм работаеть да . Но, лучше делать это SQL запросе, ещё лучше компилировать процедур на сервере и вызвать его на выполнение
1
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,684
Записей в блоге: 21
30.05.2016, 16:19
так вот у него сервера-то и нет, судя по всему )))
TClientDataSet подключенный к файлу. если я все правильно понял
0
3 / 3 / 0
Регистрация: 21.05.2016
Сообщений: 304
30.05.2016, 16:46  [ТС]
krapotkin, друг вы думайте что я понимаю

Цитата Сообщение от krapotkin Посмотреть сообщение
в каком файле объявлен TClientDataSet
если в нем нет метода GetBookmark
ищем, в каком файле объявлен его предок - TDataSet, у него точно есть этот метод

а чем вы говорите здесь. я не программист и вряд ли я им стану, но хотелось бы. исходники искал в интернете
но не нашёл, за ссылки спасибо конечно но там все на английском языке .
если вы действительно хотите помочь абисните никак программисту а на простом языке. вот допустим вы написали
( TClientDataSet в каком файле объявлен ) если я даже исходник найду то не смогу узнать как и почему, где и зачем объявлен.

Добавлено через 4 минуты
нет сервера нету, cds файл будет лежать вместе exe файлом в одной папке
0
Эксперт Pascal/Delphi
 Аватар для xxbesoxx
1135 / 616 / 129
Регистрация: 13.02.2009
Сообщений: 3,607
30.05.2016, 17:49
Цитата Сообщение от krapotkin Посмотреть сообщение
так вот у него сервера-то и нет, судя по всему )))
Угадаем изначально надо было вопрос сформулировать грамотно на каком СУБД человек работаеть )) показали его пример и всё
0
 Аватар для Пытливый
3764 / 2272 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
30.05.2016, 19:27
Да нет у него никакого сервера, он просто сделал на основе компонента TClientDataset локальный файлик. В принципе, для масенькой БД этого вполне достаточно, но у этого компонента нет поддержки SQL, что несколько меняет привычную концепцию работы с БД.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.05.2016, 19:27

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

Проверять в DBgrid записи, и суммировать только те, где присутствует 9008
Нужен алгоритм который будет поверять в DBgrid записи и суммировать только те где присутствует 9008. он у меня как суммирует не правильно....

Столбцы в DBGrid
Добрый день! У меня есть таблица DBGrid, в ней около 20 столбцов, у одного из них очень длинное наименование. Ширина столбца 120 и полное...

Столбцы и поля в DBgrid
Интересуют элементарные вопросы Когда подключаю БД(Access) к DBGrid, она отображает столбцы на всю ширину обьекта DBGrid, как это...

DBgrid столбцы выровнять
хочу сделать автовыравнивание по содержимому столбца. в инспекторе объектов что то менять надо? Помогите кто знает=)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru