| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Фильтр по калькулируемому полю |
| Автор: docjohn 17.10.2005, 09:26 |
| Привет всем. Помогите новичку. Есть компонент DBGrid. В нем два поля - одно формируется из SQL-запроса, а второе калькулируемое. Нужно после завершения работы SQL запроса фильтровать строки (накладывать фильтр) по калькулируемому полю. Пробовал рыть через свойство filter и событие onfilterrecord у компонента dataset, но безуспешно: filter работает только на data-полях sql запроса. А событие onfilterrecord так и не вызвал. Пробовал также через DBGrid->Fields[1]->Visible=false; - тоже ничего. HELP |
| Автор: Vyacheslav 17.10.2005, 18:55 |
| Для вызова события OnFilteredRecord нужно уставновить Filtered в truе и все будет работать |
| Автор: docjohn 18.10.2005, 03:04 |
| Ставил устанавливал фильтр на поле данных - он работает. Filtered=true и запрос фильтуется нормально. Значение в поле данных - это имя файла, которое берется из таблицы. Калькулируемое поле у меня вне SQL запроса. Значение в калькулируемом поле - это размер файла, который берется из директории по имени файла из поля данных и формируется по событию OnCalсFields. Пробовал устанавливать фильтр на это вычисляемое поле и вызывать событие OnFilterRecord. Значение фильтра накладывал самое простое: DataSet->Filter="ИМЯ_КАЛЬК_ПОЛЯ='111'"; DataSet->Filtered=true; Но либо все отфильтровывается (нет ни одной строки) либо фильтр не срабатывает. Уже не знаю куда рыть дальше. Или где-то ошибка? |
| Автор: Vyacheslav 18.10.2005, 09:01 | ||
| Вы хелпом пользоваться умеете? Там даже примеры есть. 1. Устанавливаешь Filtered в true сразу и можно в дизайне. Больше не трогаешь 2. Задаешь обработчик OnFilterRecord.
|
| Автор: docjohn 19.10.2005, 01:34 |
| И все равно не получается. Для примера делаю так: 1. Формирую таблицу из двух полей, первое с именем dt и значениями из базы, второе калькулируемое с именем klk и типом Integer и со значениями =100 2. Свойство Filtered у Dataset устанавливается по нажатию кнопки в true. 3. В обработчике события Onfilterrecord пишу: Accept = DataSet->FieldByName("klk")->AsInteger == 100 Запускаю. В таблице как и положено все значения в кальк поле =100 Нажимаю кнопку - и все отфильтровывается (не остается ни одной строки). В то же время Accept = DataSet->FieldByName("dt")->AsInteger == 100 - отфильтровывает правильно строки со значениями =100. Вопрос не в том умею ли я читать Help или нет. Перед созданием этой темы пример по использованию Onfilterrecord я видел и проверял и он не сработал на кальк поле. |
| Автор: Vyacheslav 19.10.2005, 11:53 |
| Во-первых, насчет пользованием хелпа - Вы нигде ранее не показали правильный код для OnFilterRecord, в связи с чем я предположил, что Вы не сотрели сам хелп Во-вторых, Вы скорее всего работаете через BDE. А у него кажется имеются траблы с калькулируемыми полями Используете по крайней мере ADO и все будет работать |