Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не удается отфильтровать записи в связке Firebird1.0+IBX+EhLib. [D7]


Страницы:   1 2

miwa ©   (2004-11-14 16:34:00) 

Делаю так:

procedure TfrmMain.btnFilterClick(Sender: TObject);
begin
 frmFilter.ShowModal;
 if frmFilter.ModalResult = mrOK then
   ApplyMyFilter;
end;

procedure TfrmMain.ApplyMyFilter;
begin
 dtmIBase.IBDataSet1.Filter:=frmFilter.ResultFilter;
 dtmIBase.IBDataSet1.Filtered:=true;
end;
{***********************}
procedure TfrmFilter.btnOKClick(Sender: TObject);
begin
 ResultFilter:=ChangeFilter;
 lblResult.Caption:=ResultFilter;
end;

function TfrmFilter.ChangeFilter:string;
begin
 Result:=cmbField.Text + cmbOperation.Text + edtValue.Text;
end;

После выполнения всего этого записи не фильтруются, хотя набор данных переоткрывается. Но все же остается неизменным.


ЮЮ   (2004-11-15 09:46:00) [21]

Или хотя бы
 Accept:=DataSet.Fields[COUNT_IDX].AsInteger=1;

где COUNT_IDX глобальная константа, если религия не позволяет использовать persistent fields


Johnmen   (2004-11-15 09:40:00) [22]

Ну естественно, будет идти в коллекции полей.
И что с того ? В чём твоя печаль ?


Fay   (2004-11-15 09:34:00) [23]

FieldByName('const') - инвариант (не всегда, но это лечится).
Если я всё правильно понимаю, то метод выполнится на каждой записи. И каждуй раз будет идти поиск поля по имени. А в то же время Коран не запрещает сделать что-нибудь типа

Accept := IBQuery1COUNT.AsInteger = 1;


Johnmen   (2004-11-15 09:27:00) [24]

>Fay ©   (15.11.04 09:19) [8]
>Или находить поле по имени для каждой записи считается круто?

А как считается, отстойно ? Почему ? Основания.


kostan   (2004-11-15 09:22:00) [25]

я использую фильтрацию на
уровне серверного запроса SelectSql в DataSet_е  
(так вроде быстрее - возни правда больше с запоминанием
предыдущего состояния SQL)


Fay   (2004-11-15 09:19:00) [26]

2 Johnmen ©   (15.11.04 09:15) [7]
Если ты не понял "Получить нудное поле", то имелось ввиду "нужное". А если нет... Ты же не хочешь сказать, что FieldByName выполнится 1 раз для всего НД? Или находить поле по имени для каждой записи считается круто?

P.S.
Мне иногда кажется, что я задаю вопросов больше, чем все остальные 8)


Johnmen   (2004-11-15 09:15:00) [27]

Не понял...


Fay   (2004-11-15 09:08:00) [28]

Получить нудное поле (хоть тем же FieldByName) лучше заранее. Инвариант как-никак.


Johnmen   (2004-11-15 09:04:00) [29]

>Fay ©   (15.11.04 08:43) [4]
>FieldByName в OnFilterRecord - это сильно!

А что не так ?


Fay   (2004-11-15 08:43:00) [30]

FieldByName в OnFilterRecord - это сильно! Можно ещё Sleep(0) туда поставить - тоже прикольно получится 8)


Johnmen   (2004-11-14 17:18:00) [31]

Да-да, именно фича, а не баг.

>Это будет выглядеть примерно так?

Ну да. Примерно.
Accept:=DataSet.FieldByName('COUNT').AsInteger=1;


miwa   (2004-11-14 17:09:00) [32]


> Это известная фича IBX, существо которой состоит в нереализованности
> свойства

Круто. Типа, "это не баг - это фича"? Мне понравилось :о))


> Поэтому пользуйся OnFilterRecord.

Блин, а ведь когда-то на форуме уже читал об этом. Не запомнилось :о((

Это будет выглядеть примерно так?

procedure TdtmIBase.IBDataSet1FilterRecord(DataSet: TDataSet;
 var Accept: Boolean);
begin
 if DataSet.FieldByName('COUNT').AsInteger = 1
   then Accept:=true
   else Accept:=false;
end;


Спасибо.


Johnmen   (2004-11-14 16:58:00) [33]

Это известная фича IBX, существо которой состоит в нереализованности свойства Filter.
Поэтому пользуйся OnFilterRecord.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо