Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2010, 12:38   #1
RS219
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 18
По умолчанию Суммирование DBGrid

Здраствуйте.
Каким образом сложить сумму чисел отображаемых компонентом DbGrid.
Пример находиться в архиве.
Вложения
Тип файла: rar суммировать.rar (334.5 Кб, 25 просмотров)
RS219 вне форума Ответить с цитированием
Старый 17.11.2010, 13:19   #2
nervniy
Пользователь
 
Регистрация: 13.05.2009
Сообщений: 52
По умолчанию

я для таких целей испльзую DBGridEh из библиотеки Ehlib
или так наверное можно
select sum(<имя_столбца>) from <имя_таблицы>

Последний раз редактировалось nervniy; 17.11.2010 в 13:29.
nervniy вне форума Ответить с цитированием
Старый 17.11.2010, 13:54   #3
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Лови проект обратно.
Изначально все неправильно. Особенно связь таблиц по строковым полям.
Вложения
Тип файла: rar суммировать.rar (334.3 Кб, 20 просмотров)
_SERGEYX_ вне форума Ответить с цитированием
Старый 17.11.2010, 14:59   #4
RS219
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 18
По умолчанию

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
Лови проект обратно.
Изначально все неправильно. Особенно связь таблиц по строковым полям.

А как нужно, что бы было правельно?
А зачем нужен был запрос Q?

От чего происходит расчет на Label'е?

А процедура.

Изначально все неправильно. Особенно связь таблиц по строковым полям.
Как все таки нужно, что бы было правельно?
Связь делалась главный и подчиненый. В Access я не показывал связи, а в делфи указал. А потом положил на форму "сетку". Я теперь спать не буду снова.

Цитата:
Сообщение от nervniy Посмотреть сообщение
я для таких целей испльзую DBGridEh из библиотеки Ehlib
или так наверное можно
select sum(<имя_столбца>) from <имя_таблицы>
Что это за библиотека. Где её взять

Последний раз редактировалось Stilet; 17.11.2010 в 17:27.
RS219 вне форума Ответить с цитированием
Старый 17.11.2010, 15:53   #5
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

1. Не делай первичный ключ для строкового типа поля. Создай числовое поле в обеих таблицах и свяжи таблицы по этому полю.
2. В любой таблице ОБЯЗАТЕЛЬНО должно быть УНИКАЛЬНОЕ поле (первичный ключ, .. счетчик или автоинкркмент).
3. Не открывай таблицы в проекте. По умолчанию ADOConnection1 должно быть закрыто, а уже при запуске программы при создании DataModule2 подключиться к БД и открыть таблицы, т.е. так
Код:
procedure TDataModule2.DataModuleCreate(Sender: TObject);
begin
  try
  ADOConnection1.Connected:= True;
  except
  ShowMessage('Не удалось подключиться к БД');
  Exit;
  end;
  ADOPeriod.Open;
  AdoSumma.Open;
//в uses добавить Dialogs
end;
Цитата:
А зачем нужен был запрос Q?
От чего происходит расчет на Label'е?
От sql-запроса и происходит при AfterScroll.

!!! И ИМХО... Я бы настоятельно советовал НИКОГДА не называть имена таблиц и полей русскими именами... но это уж кому как...
_SERGEYX_ вне форума Ответить с цитированием
Старый 17.11.2010, 16:10   #6
RS219
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 18
По умолчанию

Я извиняюсь. Расскажите пожалуйста все попорядку как вы вставляли это поле. Я попытался скопировать код он в другом проекте не работает, теперь в этом не работает.

-
Есть запрос - Q
сетка - DbGrid
форма - form2
Label - L

один код работает во время открытия формы

Код:
procedure TForm2.FormCreate(Sender: TObject);
begin
DataModule2.ADOPeriod.AfterScroll(DataModule2.ADOPeriod);
end;
Второй код отвечает за расчет

Код:
procedure TDataModule2.ADOPeriodAfterScroll(DataSet: TDataSet);
begin
  if Form2 = nil then Exit;
  if AdoSumma.RecordCount>0 then
  begin
  q.Close;
  q.SQL.Clear;
  q.SQL.Add('select sum(ñóììà) from ñóììà where êîäìåñÿöà = "' + ADOPeriodDSDesigner.Value + '"');
  q.Open;
  form2.l.Caption := q.Fields[0].AsString;
  end else
  form2.l.Caption := '0';
end;
А что это за процедура
Код:
procedure TDataModule2.ADOPeriodAfterScroll(DataSet: TDataSet);
RS219 вне форума Ответить с цитированием
Старый 17.11.2010, 16:21   #7
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Вроде, и пояснять здесь нечего, все понятно...
Код:
procedure TDataModule2.ADOPeriodAfterScroll(DataSet: TDataSet);
begin
  {Form2 еще не успела создаться, поэтому,
   чтобы не выскочила ошибка пишем}
  if Form2 = nil then Exit;

  {Если в таблице Сумма нет записей, то зачем
  делать запрос и напрягать сервер...}
  if AdoSumma.RecordCount > 0 then
  begin
    q.Close;
    q.SQL.Clear;
    {Выбираем сумму только из видимых строк}
    q.SQL.Add('select sum(сумма) from сумма where кодмесяца = "' + ADOPeriodDSDesigner.Value + '"');
    q.Open;
    {Пишем в Label}
    form2.L.Caption := q.Fields[0].AsString;
  end else
    form2.L.Caption := '0';
end;
При создании Form2 код AfterScroll не сработал, потому, что формы еще небыло.
Поэтому повторим его
Код:
procedure TForm2.FormCreate(Sender: TObject);
begin
DataModule2.ADOPeriod.AfterScroll(DataModule2.ADOPeriod);
end;
PS. Русские имена даже здесь "ломаются"
_SERGEYX_ вне форума Ответить с цитированием
Старый 17.11.2010, 16:46   #8
RS219
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 18
По умолчанию

Нет я н об описании кода. Я об последовательности действий, которые необходимо выполнить, чтобы на форме в Label'e отобразилась сумма dbgrid.
1. Это запрос Q (Никакого текста SQl там не нету, он появляется чуть позже)
2. реакция на открытие формы TForm2.FormCreate(Sender: TObject)
3. TDataModule2.ADOPeriodAfterScroll(D ataSet: TDataSet); - а что это за дейтвие, движение мышки, а вместо этого действия можно использовать dlclick или click?

Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
2. В любой таблице ОБЯЗАТЕЛЬНО должно быть УНИКАЛЬНОЕ поле (первичный ключ, .. счетчик или автоинкркмент).
А что такое автоинкркмент. Вы немогли бы привети несколько примеров.
Цитата:
Сообщение от _SERGEYX_ Посмотреть сообщение
3. Не открывай таблицы в проекте. По умолчанию ADOConnection1 должно быть закрыто, а уже при запуске программы при создании DataModule2 подключиться к БД и открыть таблицы, т.е. так
Код:
procedure TDataModule2.DataModuleCreate(Sender: TObject);
begin
  try
  ADOConnection1.Connected:= True;
  except
  ShowMessage('Не удалось подключиться к БД');
  Exit;
  end;
  ADOPeriod.Open;
  AdoSumma.Open;
//в uses добавить Dialogs
end;
Не открывать таблицу в проекте , это не указывать в Инспекторе объектов Свойство Active для Table.
Или свойство ADOConnection1 Connected в true или false????????

Начаная пинимать этот пример.
Спасибо и намного больше.))))
1. Необходимо создать запрос
2. Действие на открытие формы
3. Действие прищелчке мышкой.

...................................

Последний раз редактировалось Stilet; 18.11.2010 в 14:49.
RS219 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Суммирование Slavik Microsoft Office Excel 4 08.04.2010 14:45
Перемещение даннах из dbgrid в dbgrid Hobbit_88 БД в Delphi 7 10.06.2009 13:33
перенос данных из DBGrid в DBGrid KingSize БД в Delphi 17 24.04.2009 09:30
Суммирование SlavaSH БД в Delphi 15 22.01.2009 12:29
суммирование от и до.... snakezx Microsoft Office Excel 1 28.11.2008 15:38