Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2012, 12:12   #1
a_n_n_a
Форумчанин
 
Регистрация: 06.03.2009
Сообщений: 157
По умолчанию Фильтр вычисляемого поля

Здравствуйте, в AdoTable создала вычисляемое поле Sena_kv_m. А Вычисляется оно на событии ADOTable1CalcFields.теперь мне надо сделать фильтрацию. делаю так:
Код:
ADOTable1.Filter:='Sena_kv_m>='+Edit17.Text+' and Sena_kv_m<='+Edit18.Text;
Выдает ошибку: В коллекции не удается найти элемент,соответствующий требуемому имени или порядковому номеру.
Только не говорите, что ADOTable1.Filter - это долго, плохо и т.д.))) Это я знаю. Но переделывать очень много придется,не хочу.
А фильтр моего поля мне нужен имеенно через ADOTable1.Filter. Подскажите, как правильно замутить с фильтром)
Спасибо)
a_n_n_a вне форума Ответить с цитированием
Старый 20.03.2012, 12:57   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

В справке по Дельфи есть пример как использовать событие OnFilterRecord для Dataset'а (касается и ADOTable).
Можно в процедуре обработки этого события установить условия фильтрации.
Код:
procedure TProdForm.ADOTable1FilterRecord(DataSet: TDataSet;  var Accept: Boolean);
var
  F1, F2 : Double;
begin
  F1 := StrToFloat(Edit17.Text);
  Accept := ADOTable1Sena_kv_m.Value >= F1;
end;
Чтобы событие срабатывало, нужно свойство Filtered установить в True.
Здесь фильтрация будет работать потому как вызов этого события происходит после вычисления значения в поле Sena_kv_m.
Прик вне форума Ответить с цитированием
Старый 20.03.2012, 13:00   #3
a_n_n_a
Форумчанин
 
Регистрация: 06.03.2009
Сообщений: 157
По умолчанию

Я не думаю, что мне это подойдет... У меня принцип такой, пользователь задает параметры фильтра для разных полей, нажимает кнопку, и уже составляется большой ADOTable1.Filter, где много разных условий фильтра.
Короче, сначала формирую большое условие, только потом ADOTable1.Filtered:=True.

Последний раз редактировалось a_n_n_a; 20.03.2012 в 13:07.
a_n_n_a вне форума Ответить с цитированием
Старый 20.03.2012, 23:35   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А допустим так:
Код:
 with ADOTable1 do begin
  filtered:=false;
  filter:='1=1 ';
   if Edit17.Text<>'' then Filter:=Filter+' AND Sena_kv_m>='+Edit17.Text;
   if Edit18.Text<>'' then Filter:=Filter+' and Sena_kv_m<='+Edit18.Text;
   if Edit19.Text<>'' then Filter:=Filter+' and ... Ну и так далее по фильтру;
  filtered:=true;
 end;
Идея понятна? 1=1 это заглушка чтоб безпрепятственно ставить неконтроллируемые AND или OR в условие, и не париться верно или нет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.03.2012, 00:18   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

a_n_n_a, вычисляемое поле нельзя указывать в условии Filter. И очень сомневаюсь, что фокус в он FilterRecord с вычисляемым полем пройдет (а может Прик и прав, нужно проверить). Если в условии фильтра только простые сравнения полей записи, то формируйте строку Filter динамически, как Stilet подсказал (только без вычисляемых полей)

ADD если у вас есть поля типа даты-времени и по ним тоже фильтровать нужно, то лучше сразу фильтр делать через OnFilterRecord
И можно одновременно использовать условие в Filter и OnFilterRecord
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 21.03.2012 в 00:32.
Аватар вне форума Ответить с цитированием
Старый 21.03.2012, 04:09   #6
a_n_n_a
Форумчанин
 
Регистрация: 06.03.2009
Сообщений: 157
По умолчанию

Спасибо всем, буду пробовать))
a_n_n_a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание вычисляемого поля SQl Delphi detalik Помощь студентам 8 25.04.2011 14:48
Сохранить значение вычисляемого поля Nika03 БД в Delphi 8 10.05.2010 22:17
Сумма вычисляемого поля TTable Anton.sev Общие вопросы Delphi 1 10.05.2010 20:31
Изменение вычисляемого поля в коде Земляника БД в Delphi 5 04.06.2009 19:35
Изменение вычисляемого поля в коде Земляника SQL, базы данных 0 04.06.2009 10:02