![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
1147 |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 205 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
В DBGrid есть 2 столбца (А, В). В столбец А находятся некоторые значения. Нужно создать столбец С, который бы отображал разницу столбцов А и В. Если например в ячейку столбца В вводятся те же значения что есть в ячейке столбца А, то они как бы взаимно уничтожаются (условно, т.к. в самих ячейках и в базе никаких изменений не происходит) а столбец С отображает результат этого (он также доложен находиться в БД как и остальные), как показано на рисунке. Если в ячейки столбца В вводятся какие-то посторонние значения, столбец С их игнорирует.
Помогите реализовать столбец С? Сообщение отредактировано: 1147 - 14.11.2009 0:16 Эскизы прикрепленных изображений ![]() |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Ну, и в чем проблема? Как создаются calculated fields уже было здесь, как определить, какие числа есть в одной строке, какие - в другой - тоже есть. Собери из них одну процедуру, и добавь ее в OnCalcField
|
1147 |
![]()
Сообщение
#3
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 205 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
проблема в том что значения calculated fields не заносятся в базу данных. а мне нужно чтобы они там были
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
А что, тебе кто-то мешает иметь и calculated и обычное поле? Допустим, поле X - вычислимое, поле Xtbl - присутствует в таблице AdoTable2. Тогда просто на OnBeforePost делаешь:
procedure TForm1.ADOTable2BeforePost(DataSet: TDataSet);, и содержимое X копируется в базу. При этом Xtbl может быть невидимым, то есть отображаться будет только вычислимое поле, но перед записью в базу его содержимое будет копироваться в Xtbl, и соответственно тоже переноситься в базу. |
1147 |
![]()
Сообщение
#5
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 205 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Значит в calculated field я должен написать чтото вроде этого да?
procedure TForm5.ADOTable1CalcFields(DataSet: TDataSet); |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Нет... Тебе надо вычислять, какие значения есть в одном поле, а в другом - нету. Вычитания строк пока еще не придумали. Вот так (по аналогии с выделением красным отсутствующих элементов):
procedure TForm1.ADOTable2CalcFields(DataSet: TDataSet);(XX - вычислимое поле типа String) |
1147 |
![]()
Сообщение
#7
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 205 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
В событии OnBeforePost данные из CalcField копируются в поле находящееся в БД. В случае ввода данных в DBGrid все прекрасно работает, но если данные вводятся через DBEdit, копирования не происходит, хотя там у меня указано:
if Form5.ADOTable1.modified thenМожет нужно использовать какое-нибудь другое событие, или в OnKeyPress DBEdita внести изменения? Проблема решена. Спасибо Сообщение отредактировано: 1147 - 15.11.2009 4:01 |
![]() ![]() |
![]() |
Текстовая версия | 8.07.2025 9:08 |