![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 13.04.2007
Сообщений: 9
|
![]()
База находится у меня в 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. Не судите строго Делфи изучаю только месяц. |
![]() |
![]() |
![]() |
#2 |
Регистрация: 13.04.2007
Сообщений: 9
|
![]()
Хорошо тогда подскажите как делать вычисления через oncalcfield в ADOtable для TDBGrid не стлобцов, а строк
например солбец "а", Его первую строку нужно суммировать на на вторую строку. Как это сделать? Пожалуйста покажите пример как делать вычисления не столбцов, а строк между собой |
![]() |
![]() |
![]() |
#3 |
Регистрация: 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 в 10:58. |
![]() |
![]() |
![]() |
#4 |
Регистрация: 13.04.2007
Сообщений: 9
|
![]()
У меня есть вычисляемый столбец(назову его "а", который должен наращиваться с каждой новой строкой.Есть вводимые столбцы через DBEdit, их назову "b","с","d". По сути формула так:
a:=b+c-d+a ,но саму на себя нельзя, так как значение не найдено еще надо чтобы столбец "a" с новой строкой наращивался |
![]() |
![]() |
![]() |
#5 |
Регистрация: 16.04.2007
Сообщений: 6
|
![]()
ну а в чем сложность то? я тебе написал - бери значние из предыдущей строки - для нее уже есть "а" - но по сути - ты не можешь быть уверенным что порядок строк будет нужный тебе. Потому - какой смысл этой операции?
|
![]() |
![]() |
![]() |
#6 | |
Регистрация: 13.04.2007
Сообщений: 9
|
![]() Цитата:
"Итого1";"снятие"; "установка" я ввожу в DBedit. Мне надо чтобы работало так: "итого2":= итого1+ установка"-"снятие", "разность":=итого2-итого1; Как вы наверно поняли, что при вводе новой строки, значение "итого2","разности" не сохраняются. Мне надо чтобы они нарастали,но так как саму на себя суммировать не получиться, надо по другому как-то.Пожалуйста если не трудно прочитайте мое сообщение.Там есть некоторые вопросы. |
|
![]() |
![]() |
![]() |
#7 |
Регистрация: 16.04.2007
Сообщений: 6
|
![]()
ну вот так бы сразу и написал
"Итого1";"снятие"; "установка" - исх. данные "итого2":= итого1+ установка"-"снятие" "разность":=итого2-итого1; Соотвественно - так как ты вычисляешь оба значения в OnCalcField - то неясно в чем проблема то? считается "итого2" - в той же процедуре считается и "разность" а даже если сделаешь как то еще - то "разность"=итого1+ установка"-"снятие"-итого1 => разность"=установка"-"снятие" |
![]() |
![]() |
![]() |
#8 |
Регистрация: 13.04.2007
Сообщений: 9
|
![]()
неправильно сформулировал вопрос:
смотрите ниже Последний раз редактировалось Nic-x; 17.04.2007 в 08:24. |
![]() |
![]() |
![]() |
#9 |
Регистрация: 13.04.2007
Сообщений: 9
|
![]()
Большое спасибо за попомощь.
Уважаемый Vidar. Сразу прошу извинений .Я Ламер не совсем точно объяснил Вам. Просто, мне надо было еще чтоб итого2 нарастала и суммировалась на "разность".Вот в чем заковырка. при первой строке у меня получалось. Но при переходе на новую строку, "разность" не действует уже на "итого2" . Вычисления правильны только в одной строке. При переходе на новую строку значения не сохраняются. "Итого2" не сохраняется, и при новой строке опять все по новому. Формула такая: "итого2":= итого1+ установка"-"снятие"+"разность" Последний раз редактировалось Nic-x; 17.04.2007 в 08:46. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Поиск по TDBGrid | Toska | БД в Delphi | 1 | 16.08.2008 23:30 |
TDBGrid | Blackmore | БД в Delphi | 2 | 26.05.2008 09: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 |