Помощь - Поиск - Пользователи - Календарь
Полная версия: сумма ячеек столбца-?
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
1147
В столбце А 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?
volvo
Нет, вот здесь тебе 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 будет делать сам то, что сейчас делаешь ты.
1147
кроме этого кода и AdoQuery больше ничего не требуется? ADOQuerySum нужно объявить как integer?
volvo
Цитата
ADOQuerySum нужно объявить как integer?
С чего бы? ADOQuerySum - это название компонента типа TADOQuery. Я просто добавил на форму TADOQuery и на нажатие кнопки (для теста) - вышеприведенный код. Все работает.
1147
У меня подчеркивается with-declaration expected but WITH found, Undeclared identifier 'SQL' (Clear также подчеркнута), Open тоже Undeclared identifier, хотя я также компонент TADOTable находящийся в dbGo, помещаю на форму, а на кнопку-код.
Connection и DataSource AdoQuery задавать не нужно? В любом случае это ничего не меняет..
Может чтото еще необходимо сделать чем просто добавить TADOQuery и код на кнопку? Ошибка ведь из-за чего то возникает..
volvo
Цитата
Connection и DataSource AdoQuery задавать не нужно?
Нужно, разумеется.
Цитата
В любом случае это ничего не меняет..
Правда? Ну-ну:
Нажмите для просмотра прикрепленного файла
1147
теперь ясно smile.gif . Вот только у меня название столбца написано через дефис, это вызывает ошибку. Есть ли какой-нибудь способ исправить ее, не прибегая к переименованию столбца?
volvo
Цитата
Есть ли какой-нибудь способ исправить ее, не прибегая к переименованию столбца?
Есть. Записать всю Query в Access, и вызывать из Дельфи, скажем, связав результат выполнения Query с DBText-ом. Если сможешь ОБНОВЛЯТЬ результаты. Мне не удалось. Вот тебе еще одно "преимущество" использования нестандартных возможностей Access-а. Попользовался? Получи теперь по-полной невозможность добавлять функционал. Не использовал бы дефис - все было бы в порядке.
volvo
Цитата
Есть ли какой-нибудь способ исправить ее, не прибегая к переименованию столбца?
Нашелся способ:
  with ADOQuerySum do
begin
SQL.Clear;
SQL.Text := 'SELECT Sum(Table1.[my-tab]) AS [SumOfmytab] FROM Table1;';
Open;
Label1.Caption := FieldByName('SumOfmytab').AsString;
end;
(обрати внимание, название поля с дефисом или пробелом берется в квадратные скобки)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.