IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> сумма ячеек столбца-?
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


В столбце А DBGrid содержатся цифры. Нужно чтобы например в label1 отображалась сумма всех цифр столбца. В данном случае, как на рисунке, сумма будет равна 17. Как сделать чтобы цикл не пробегал по таблице при каждом изменении суммы, и в каком событии?
procedure TForm5.AdoTable1AfterPost(DataSet: TDataSet);
var sum:integer;
begin
AdoTable1.First;
sum:=0;
while not AdoTable1.EOF do
begin
AdoTable1:=sum+AdoTable1.FieldByName('txt').AsInteger;
AdoTable1.Next;
label1.Caption:=inttostr(sum);
end;
end;

Может быть можно использовать вычисляемое поле DBGrid?

Сообщение отредактировано: 1147 -


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Нет, вот здесь тебе Calculated Field точно не поможет. Потому что тебе надо находить сумму в столбце, а не выполнять какие-то действия в строке Грида. Лучший вариант - это использовать Access-овские возможности через TQuery (использовать тот же Sum), или так, как ты делаешь (это - худший вариант).

AdoQuery можно задействовать вот так, например:
  with ADOQuerySum do
begin

SQL.Clear;
SQL.Text := 'SELECT Sum(Table1.A) AS [SumOfA] FROM Table1;';
Open;

Label1.Caption := FieldByName('SumOfA').AsString;
end;
Тогда Access будет делать сам то, что сейчас делаешь ты.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


кроме этого кода и AdoQuery больше ничего не требуется? ADOQuerySum нужно объявить как integer?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
ADOQuerySum нужно объявить как integer?
С чего бы? ADOQuerySum - это название компонента типа TADOQuery. Я просто добавил на форму TADOQuery и на нажатие кнопки (для теста) - вышеприведенный код. Все работает.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


У меня подчеркивается with-declaration expected but WITH found, Undeclared identifier 'SQL' (Clear также подчеркнута), Open тоже Undeclared identifier, хотя я также компонент TADOTable находящийся в dbGo, помещаю на форму, а на кнопку-код.
Connection и DataSource AdoQuery задавать не нужно? В любом случае это ничего не меняет..
Может чтото еще необходимо сделать чем просто добавить TADOQuery и код на кнопку? Ошибка ведь из-за чего то возникает..

Сообщение отредактировано: 1147 -


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
Connection и DataSource AdoQuery задавать не нужно?
Нужно, разумеется.
Цитата
В любом случае это ничего не меняет..
Правда? Ну-ну:
Прикрепленное изображение
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


теперь ясно smile.gif . Вот только у меня название столбца написано через дефис, это вызывает ошибку. Есть ли какой-нибудь способ исправить ее, не прибегая к переименованию столбца?

Сообщение отредактировано: 1147 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Цитата
Есть ли какой-нибудь способ исправить ее, не прибегая к переименованию столбца?
Есть. Записать всю Query в Access, и вызывать из Дельфи, скажем, связав результат выполнения Query с DBText-ом. Если сможешь ОБНОВЛЯТЬ результаты. Мне не удалось. Вот тебе еще одно "преимущество" использования нестандартных возможностей Access-а. Попользовался? Получи теперь по-полной невозможность добавлять функционал. Не использовал бы дефис - все было бы в порядке.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Цитата
Есть ли какой-нибудь способ исправить ее, не прибегая к переименованию столбца?
Нашелся способ:
  with ADOQuerySum do
begin
SQL.Clear;
SQL.Text := 'SELECT Sum(Table1.[my-tab]) AS [SumOfmytab] FROM Table1;';
Open;
Label1.Caption := FieldByName('SumOfmytab').AsString;
end;
(обрати внимание, название поля с дефисом или пробелом берется в квадратные скобки)
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 1.11.2020 3:15
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name