Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Delphi > БД в Delphi
Регистрация

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 13.04.2007, 20:38   #1
Nic-x
 
Регистрация: 13.04.2007
Сообщений: 9
Восклицание TDBGrid. Вычисление

База находится у меня в Acces,работаю через ADO. Oncalcfield в adotable ;
Даны ячейки "a" она вычисляемая; "б" она вводится через dbedit;
Вычисляю в ячейках простую формулу a:=a+b, заню что плюсовать само на себя нельзя, хотя у меня в defaultexpress( по умолчанию) стоит значение ноль
но при переходе на новую строку у меня "a" снова становится в первоначальное значение, а мне надо чтобы оно продолжалось
например
первая строка: a:=0+6=6;
вторая строка: a:=6+6=12
третья строка: a:= 12+6=18

хочу объяснить чтобы переменная "а" нарастала
а у меня
первая строка: a:=0+6=6;
вторая строка: a:=0+6=6
третья строка: a:= 0+6=6
Все говорят присваивать на саму себя нельзя. Подскажите пожалуйста,приведите пример, как можно по другому. Может счетщик нужен?
могу выслать программу для изучения если кто согласится помощь

Короче:
Нужно чтобы значение ячейки TDBGrid из одной строки автомотически переносилось в другую как счетщик нарастало
(а не обновлялось,обнулялось)
P.S. Не судите строго Делфи изучаю только месяц.
Nic-x вне форума Ответить с цитированием
Старый 14.04.2007, 12:03   #2
Nic-x
 
Регистрация: 13.04.2007
Сообщений: 9
Восклицание Тогда сформулирую вопрос

Хорошо тогда подскажите как делать вычисления через oncalcfield в ADOtable для TDBGrid не стлобцов, а строк
например солбец "а", Его первую строку нужно суммировать на на вторую строку. Как это сделать? Пожалуйста покажите пример как делать вычисления не столбцов, а строк между собой
Nic-x вне форума Ответить с цитированием
Старый 16.04.2007, 09:56   #3
Vidar
 
Аватар для Vidar
 
Регистрация: 16.04.2007
Сообщений: 6
По умолчанию

Хмм...не совсем понятно чего тебе именно хочется...
но если ты делаешь вычисляемое поле - то при вычислении тебе доступна текущая запись.. соответственно твоё

первая строка: a:=0+6=6;
вторая строка: a:=0+6=6
третья строка: a:= 0+6=6

это как раз правильно - так как у тебя на момент вычисления значения "а" еще не считалась.
по идее можно сделать так: в процедуре OnCalcField делать примерно следующее
Запомнить текущее состояние таблицы в букмарк BM:=Table.Bookmark;
Перейти на предыдущую запись Table.Prior
Запомнить значение а SaveA:=Table.FieldByName('a').asint eger;
Восстановить положение в таблице Table.GotoBookmark(BM);
Посчитать новое значение а
Table.FieldByName('a').asinteger:=T able.FieldByNAme('b').asinteger+Sav eA

Так по идее работать должно - но для реляционных баз данных это в принципе неверно , ибо порядок следования полей - неизвестен, то есть рандомен. Может что то ты не то делаешь - объясни для чего тебе нужно суммировать.

Последний раз редактировалось Vidar; 16.04.2007 в 09:58.
Vidar вне форума Ответить с цитированием
Старый 16.04.2007, 10:12   #4
Nic-x
 
Регистрация: 13.04.2007
Сообщений: 9
По умолчанию

У меня есть вычисляемый столбец(назову его "а", который должен наращиваться с каждой новой строкой.Есть вводимые столбцы через DBEdit, их назову "b","с","d". По сути формула так:
a:=b+c-d+a ,но саму на себя нельзя, так как значение не найдено еще
надо чтобы столбец "a" с новой строкой наращивался
Nic-x вне форума Ответить с цитированием
Старый 16.04.2007, 12:23   #5
Vidar
 
Аватар для Vidar
 
Регистрация: 16.04.2007
Сообщений: 6
По умолчанию

ну а в чем сложность то? я тебе написал - бери значние из предыдущей строки - для нее уже есть "а" - но по сути - ты не можешь быть уверенным что порядок строк будет нужный тебе. Потому - какой смысл этой операции?
Vidar вне форума Ответить с цитированием
Старый 16.04.2007, 12:48   #6
Nic-x
 
Регистрация: 13.04.2007
Сообщений: 9
По умолчанию Попробую

Цитата:
Сообщение от Vidar Посмотреть сообщение
ну а в чем сложность то? я тебе написал - бери значние из предыдущей строки - для нее уже есть "а" - но по сути - ты не можешь быть уверенным что порядок строк будет нужный тебе. Потому - какой смысл этой операции?
Я пишу программу база данных атс (отец просил для себя).Используется Acces.в adotable указываю данные таблицы.В ней даны: "Наименование АТС", "установка","снятие", "итого1","итого2","разность".
"Итого1";"снятие"; "установка" я ввожу в DBedit.
Мне надо чтобы работало так: "итого2":= итого1+ установка"-"снятие",
"разность":=итого2-итого1;
Как вы наверно поняли, что при вводе новой строки, значение "итого2","разности" не сохраняются. Мне надо чтобы они нарастали,но так как саму на себя суммировать не получиться, надо по другому как-то.Пожалуйста если не трудно прочитайте мое сообщение.Там есть некоторые вопросы.
Nic-x вне форума Ответить с цитированием
Старый 16.04.2007, 21:56   #7
Vidar
 
Аватар для Vidar
 
Регистрация: 16.04.2007
Сообщений: 6
По умолчанию

ну вот так бы сразу и написал

"Итого1";"снятие"; "установка" - исх. данные

"итого2":= итого1+ установка"-"снятие"

"разность":=итого2-итого1;

Соотвественно - так как ты вычисляешь оба значения в OnCalcField - то неясно в чем проблема то?
считается "итого2" - в той же процедуре считается и "разность"

а даже если сделаешь как то еще - то "разность"=итого1+ установка"-"снятие"-итого1 => разность"=установка"-"снятие"
Vidar вне форума Ответить с цитированием
Старый 17.04.2007, 07:14   #8
Nic-x
 
Регистрация: 13.04.2007
Сообщений: 9
Вопрос

неправильно сформулировал вопрос:
смотрите ниже

Последний раз редактировалось Nic-x; 17.04.2007 в 07:24.
Nic-x вне форума Ответить с цитированием
Старый 17.04.2007, 07:19   #9
Nic-x
 
Регистрация: 13.04.2007
Сообщений: 9
Радость Уважаемый Vidar

Большое спасибо за попомощь.
Уважаемый Vidar.
Сразу прошу извинений .Я Ламер не совсем точно объяснил Вам.

Просто, мне надо было еще чтоб итого2 нарастала и суммировалась на "разность".Вот в чем заковырка.
при первой строке у меня получалось. Но при переходе на новую строку, "разность" не действует уже на "итого2" . Вычисления правильны только в одной строке. При переходе на новую строку значения не сохраняются.
"Итого2" не сохраняется, и при новой строке опять все по новому.
Формула такая:

"итого2":= итого1+ установка"-"снятие"+"разность"

Последний раз редактировалось Nic-x; 17.04.2007 в 07:46.
Nic-x вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск по TDBGrid Toska БД в Delphi 1 16.08.2008 22:30
TDBGrid Blackmore БД в Delphi 2 26.05.2008 08:39
скролинг TDBGrid azat БД в Delphi 5 18.01.2008 15:12
редактирование TDBGrid mm_mauser БД в Delphi 5 29.11.2007 11:39
Поля в TDBGrid Lynx БД в Delphi 5 15.02.2007 18:36


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS