IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Разница столбцов DBGrid-?
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


В DBGrid есть 2 столбца (А, В). В столбец А находятся некоторые значения. Нужно создать столбец С, который бы отображал разницу столбцов А и В. Если например в ячейку столбца В вводятся те же значения что есть в ячейке столбца А, то они как бы взаимно уничтожаются (условно, т.к. в самих ячейках и в базе никаких изменений не происходит) а столбец С отображает результат этого (он также доложен находиться в БД как и остальные), как показано на рисунке. Если в ячейки столбца В вводятся какие-то посторонние значения, столбец С их игнорирует.
Помогите реализовать столбец С?

Сообщение отредактировано: 1147 -


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Ну, и в чем проблема? Как создаются calculated fields уже было здесь, как определить, какие числа есть в одной строке, какие - в другой - тоже есть. Собери из них одну процедуру, и добавь ее в OnCalcField
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


проблема в том что значения calculated fields не заносятся в базу данных. а мне нужно чтобы они там были
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






А что, тебе кто-то мешает иметь и calculated и обычное поле? Допустим, поле X - вычислимое, поле Xtbl - присутствует в таблице AdoTable2. Тогда просто на OnBeforePost делаешь:
procedure TForm1.ADOTable2BeforePost(DataSet: TDataSet);
begin
ADOTable2Xtbl.AsString := ADOTable2X.AsString;
end;
, и содержимое X копируется в базу. При этом Xtbl может быть невидимым, то есть отображаться будет только вычислимое поле, но перед записью в базу его содержимое будет копироваться в Xtbl, и соответственно тоже переноситься в базу.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Значит в calculated field я должен написать чтото вроде этого да?
procedure TForm5.ADOTable1CalcFields(DataSet: TDataSet);
ADOTable1C.Value:=
ADOTable1WideStringField3.value-
ADOTable1WideStringField6.value;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Нет... Тебе надо вычислять, какие значения есть в одном поле, а в другом - нету. Вычитания строк пока еще не придумали. Вот так (по аналогии с выделением красным отсутствующих элементов):
procedure TForm1.ADOTable2CalcFields(DataSet: TDataSet);

var
first, second: TStringList;
s: string;
i: integer;
begin
first := TStringList.Create();
second := TStringList.Create();

ExtractStrings([','], [], PChar(ADOTable2first.AsString), first); // первое поле
ExtractStrings([','], [], PChar(ADOTable2second.AsString), second); // второе поле

for i := first.Count - 1 downto 0 do // проход от конца к началу, так проще
begin
if second.IndexOf(first.Strings[i]) <> -1 then
begin
first.Delete(i);
end;
end;

s := '';
for i := 0 to first.Count - 1 do
begin
if i <> 0 then s := s + ', ';
s := s + first.Strings[i];
end;
second.Free;
first.Free;

ADOTable2XX.Value := s; // "разность" полей
end;
(XX - вычислимое поле типа String)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


В событии OnBeforePost данные из CalcField копируются в поле находящееся в БД. В случае ввода данных в DBGrid все прекрасно работает, но если данные вводятся через DBEdit, копирования не происходит, хотя там у меня указано:
if Form5.ADOTable1.modified then
form5.ADOTable1.Post;
Может нужно использовать какое-нибудь другое событие, или в OnKeyPress DBEdita внести изменения?
Проблема решена. Спасибо

Сообщение отредактировано: 1147 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 4:16
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name