Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Отфильтровать таблицу по вычисляемому полю


Автор: Chyslyvchyk 24.1.2007, 06:06
Есть Table1 (THalcyonDataSet), в котором есть вычисляемое поле CASH:
Код

procedure TFormBankRec.Table1CalcFields(DataSet: TDataSet);
begin
   Table2.setkey;
   Table2.fieldbyname('code1').AsString := Table1.fieldbyname('code1').AsString;
   Table2.fieldbyname('code2').AsString := Table1.fieldbyname('code2').AsString;
   if Table2.gotokey then
   Table1CASH.Value := Table2.fieldbyname('cash').AsString;
end;


Нужно отфильтровать по условию:
Код

procedure TFormBankRec.Table1FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
begin
  If (Table1.fieldbyname('NAME').asstring[1] in ['R','P','B'])
     and (Table1.fieldbyname('ST').asstring <> 'Y')
     and (Table1.fieldbyname('CASH').asstring <> 'B')
  then Accept := True;
  else  Accept := False;
end;


Как выяснилось фильтровать по вычисляемому полю невозможно. 
Как тогда вывести нужные записи из таблицы? 
Query не предлагать.

Автор: x77 27.1.2007, 03:03
только одно в голову пришло. после каждого переоткрытия (изменения) таблицы формировать динамический массив из Id, удовлетворяющих условиям фильтра. Id - суть ключевое поле. тогда в OnFilterRecord останется проверять, входит ли ключевое поле данной записи в сформированный массив.

все переоткрытие таблицы, конечно, замедлится. но вот фильтрация будет работать как бы не быстрее ;)

Автор: dimazu 27.1.2007, 19:46
Создать временную таблицу, в ней сделать физическое поле
CASH, при вычислениях заносить в него значения и фильтровать
уже по нему...

Автор: Chyslyvchyk 14.2.2007, 01:38
Цитата(dimazu @ 27.1.2007,  19:46)
Создать временную таблицу, в ней сделать физическое поле
CASH, при вычислениях заносить в него значения и фильтровать
уже по нему...

Угу. Несколько людей подсказали такую идею. Ее и юзаю.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)