![]() |
|
|
#1
|
|||
|
|||
|
Здравствуйте!
хочу сложить 4 столбца и в пятом вывести сумму т.е. в строчках данные складывать в formcreate запихнул Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
PageControl1.Brush.Color := clGradientInactiveCaption;
TabSheet1.Brush.Color := clGradientInactiveCaption;
TabSheet2.Brush.Color := clGradientInactiveCaption;
TabSheet3.Brush.Color := clGradientInactiveCaption;
TabSheet4.Brush.Color := clGradientInactiveCaption;
TabSheet5.Brush.Color := clGradientInactiveCaption;
//подсчёт ставок
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
AdoQuery2.Sql.Text :='select Glav+SM+SSH+RZO as ObH from Clear';
AdoQuery2.Open;
end;в adoquery - sql - string "select * from clear" прописал и табличку выдаёт. вот что хочу сделать, сложить строчки, в последней сумма, потом надо сложить весь столбец , получится "всего", из edit (там будет цифра) вычесть "всего" и получим "остаток" запихнуть "остаток" в label.caption. интернет не помог. 2 дня, даже на интуите искал, в SQL-EX.ru решения ну нет ни одного примера. есть с переборками ,но уж начал с sql запросами, то надо весь проект так сделать, спасибо за понимание! |
|
#2
|
||||
|
||||
|
Вроде можно и сложением, но только не поперек, а вдоль
Код:
with ADOQuery2 do begin Close; SQL.Clear; SQL.Text:='SELECT SUM(Glav) + SUM(SM) + SUM(SSH) + SUM(RZO) FROM Clear'; Open; Label1.Caption:= IntToStr(StrToInt(Edit1.Text) - Fields[0].AsInteger); end; |
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
nikotan (28.06.2015)
| ||
|
#3
|
|||
|
|||
|
всё отлично работает, откуда Вы вот берёте эти коды? если есть книжка дайте пожалуйста, спасибо!
вот две проблемки, теперь нет таблицы со ставками, а только одна колонка "EXPR1000" к которой сумма всех использованных ставок(может её в LAbel2.caption вынести?) я же их должен видеть, у кого сколько и к чему относятся, например Петров 1 основная + 0,5 совмещение. и в последней колонке "ObH" общее должно быть, чтоб я видел сколько у кого("ObH" колонка есть, самая последняя). А вторая если изменить Edit1 (общее кол-во ставок) , то остаток почему-то не меняется, блин пока писал сам догадался, повторить код в событии Edit1Change, работает. Ну блин начинается что-то получатся! СПАСИБО! |
|
#4
|
||||
|
||||
|
Цитата:
|
|
#5
|
|||
|
|||
|
может и обычная, но вот правила писанины(синтаксис) не понятны
'SELECT SUM(Glav) + SUM(SM) + SUM(SSH) + SUM(RZO) FROM Clear' в интернете другие способы, но не работают. как появилась новая колонка колонка "EXPR1000", не понимаю IntToStr(StrToInt(Edit1.Text) - Fields[0].AsInteger) о таком я вообще не знал, а Вы говорите обычная, я сначала на одном компе Ваши код пробую как заработает, потом иду по памяти на другом делаю, чтоб понять и выучить! ну типа стараюсь что ли. |
|
#6
|
|||
|
|||
|
короче с синтаксисом у меня проблемы, и не всегда понимаю как работает код delphi.
|
|
#7
|
||||
|
||||
|
Гугли SQL-92
|
|
#8
|
|||
|
|||
|
Этим заниматься очень интересно, но нервы начинают шалить когда не получается, хотя по идее должно работать
Код:
SQL.Text:='SELECT Fio, Glav , SM , SSH , RZO, Glav + SM + SSH + RZO as summa FROM Clear'; |
|
#9
|
|||
|
|||
|
и ещё проблема выявилась, вот в edit1 ввёл цифру "9", потом изменил на 7 (например), закрыл программу, на следующий день открыл и по идее должно быть "7", как сделать чтоб эта цифра оставалась всегда в памяти где-то?
|
|
#10
|
||||
|
||||
|
Цитата:
Ну так уж и быть, в порядке последнего исключения приведу пример схорона содержимого едита на диске Код:
const fn: string = 'Edit1.wrc';
...
procedure TForm1.FormCreate(Sender: TObject);
var
FStr: TFileStream;
MemStr: TMemoryStream;
begin
if FileExists(fn) then
begin
FStr:= TFileStream.Create(fn, fmOpenRead);
MemStr:= TMemoryStream.Create;
ObjectTextToBinary(FStr, MemStr);
MemStr.Position:= 0;
MemStr.ReadComponent(Edit1);
MemStr.Free;
FStr.Free;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
FStr: TFileStream;
MemStr: TMemoryStream;
begin
FStr:= TFileStream.Create(fn, fmCreate);
MemStr:= TMemoryStream.Create;
MemStr.WriteComponent(Edit1);
MemStr.Position:= 0;
ObjectBinaryToText(MemStr, FStr);
MemStr.Free;
FStr.Free;
end; |
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
nikotan (28.06.2015)
| ||
|
#11
|
|||
|
|||
|
блин всё работает, аж настроение поднимается, после уже 5-часового поиска в инете
про Код:
SQL.Text:='SELECT Fio, Glav , SM , SSH , RZO, Glav + SM + SSH + RZO as summa FROM Clear'; |
|
#12
|
|||
|
|||
|
есть 6 колонок, 4 из них надо сложить и вывести в последнюю
можно убрать последнюю колонку и использовать "as summa" но почему то у меня не считает и в последней колонке пусто Код:
SQL.Text:='SELECT Fio, Glav , SM , SSH , RZO, Glav + SM + SSH + RZO as summa FROM Clear'; |
|
#13
|
||||
|
||||
|
Наводящий вопрос, а что вы собсно от этой строчки хотите получить?
В ней сейчас записано: Выбрать значения полей Fio, Glav , SM , SSH , RZO, дальше идёт рабочая галиматья (Glav + SM + SSH + RZO), результат считать как поле с титулом summa из таблицы Clear, это сработает - в summa будет всегда один и тот же результат сложения первых записей из выбранных полей... |
|
#14
|
|||
|
|||
|
так и надо посчитать сумму 2,3,4,5 полей и значение занести в 6 колонку
|
|
#15
|
||||
|
||||
|
В 6й колонке всегда будет одно и тоже - выполнить сложение значений средствами SQL я такого не знаю, здесь без опроса всех записей не обойтись
|