В столбце А 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;
Нет, вот здесь тебе Calculated Field точно не поможет. Потому что тебе надо находить сумму в столбце, а не выполнять какие-то действия в строке Грида. Лучший вариант - это использовать Access-овские возможности через TQuery (использовать тот же Sum), или так, как ты делаешь (это - худший вариант).
AdoQuery можно задействовать вот так, например:
with ADOQuerySum doТогда Access будет делать сам то, что сейчас делаешь ты.
begin
SQL.Clear;
SQL.Text := 'SELECT Sum(Table1.A) AS [SumOfA] FROM Table1;';
Open;
Label1.Caption := FieldByName('SumOfA').AsString;
end;
кроме этого кода и AdoQuery больше ничего не требуется? ADOQuerySum нужно объявить как integer?
У меня подчеркивается with-declaration expected but WITH found, Undeclared identifier 'SQL' (Clear также подчеркнута), Open тоже Undeclared identifier, хотя я также компонент TADOTable находящийся в dbGo, помещаю на форму, а на кнопку-код.
Connection и DataSource AdoQuery задавать не нужно? В любом случае это ничего не меняет..
Может чтото еще необходимо сделать чем просто добавить TADOQuery и код на кнопку? Ошибка ведь из-за чего то возникает..
Эскизы прикрепленных изображений
теперь ясно . Вот только у меня название столбца написано через дефис, это вызывает ошибку. Есть ли какой-нибудь способ исправить ее, не прибегая к переименованию столбца?
with ADOQuerySum do(обрати внимание, название поля с дефисом или пробелом берется в квадратные скобки)
begin
SQL.Clear;
SQL.Text := 'SELECT Sum(Table1.[my-tab]) AS [SumOfmytab] FROM Table1;';
Open;
Label1.Caption := FieldByName('SumOfmytab').AsString;
end;