Мәліметтер жиынын өрнек бойынша фильтрациялауды қолдану барысында, жазбаларды таңдау шартымен берілген фильтрдің өрнегін қанағаттандыратын жазбалармен шектеледі. Фильтрдің өрнегін беру үшін String типті Filter қасиеті қолданылады.
Фильтрация шартын көрсетуге мысал ретінде келесі өрнекті келтірейік.
Oklad <= 20000
Post = ‘Инженер’ OR Post = ‘лаборант’
Бірінші өрнек оклад өрісінің мәні 20000 аспайтын барлық жазбаларды іріктеп алады. Екінші өрнек мамандық өрісі инженер немесе лаборант мәнінен тұратын жазбаларды іріктеуді қамтамасыз етеді.
Фильтрді екпінді етуге және оны алып тастауға Boolean типті Filter қасиеті қолданылады. Қалыпты жағдайда бұл қасиеттің мәні False, және фильтрация өшірілген болады. Filtered қасиетіне True мәнін қойғанда фильтрация қосылады, және Filter қасиетінде жазылған фильтрді қанағаттандыратын мәліметтер жиынында жазбалар іріктелінеді.
Фильтрация параметрі TFilterOptions типті FilterOptions қасиетінің көмегімен беріледі. Бұл қасиет жиын типіне жатады, және екі мәннің комбинациясын қабылдайды:
• foCaseInsensitive – әріптердің регистрі ескерілмейді, яғни Post =
‘преподаватель’ фильтр өрнегіндегі преподаватель, ПРЕПОДАВАТЕЛЬ немесе Преподаватель бірдей мағынада қабылдана береді.
• foNoPartialCompare – іріктеу үшін, өріс және мәндерінің толық сәйкес болуын тексеруді орындайды. әдетте символдар жолы үшін қолданылады.
Мысалы, Post = ‘П*’ фильтрі үшін foNoPartialCompare мәні қосылғанда Post өрісінде Преподаватель, Преп-ль, немесе Профессор мәндерінен тұратын
жазбалар іріктелініп алынады.
Өрнек бойынша мәліметтер жиынын фильтрациялау үшін, форма оқиғасын өңдеу мысалын қарастырайық. Форма 24-суретте келтірілген.
24-сурет. Өрнек бойынша електен өткізу формасының мысалы
Мәліметтер жиынын фильтрациялау екі түйменің және редакциялау өрісінің көмегімен орындалады. Фильтровать (btnFilter) түймесін басу барысында мәліметтер жиынының Filtered қасиетіне True мәні меншіктелу жолымен фильтр орындалады. edtFilter редакторы фильтр өрнегін қоюға арналған. Фильтрдің орындалуында өрнектегі шартты қанағаттандыратын жазбаларды іріктеу орындалады. Все записи (btnAllrecord) түймесін басқанда фильтр ажыратылады, барлық жазбалар көрсетіледі.
Төменде Form1 форма қосымшасының үш оқиғаны өңдеу модулі келтірілген.
procedure TForm1.FormCreate(Sender: TObject);
begin
Table1.FilterOptions:=[foCaseInsensitive];
Table1.Filtered:=False;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Table1.Filtered:=True;
Table1.Filter:=edit1.Text;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Filtered:=False;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Form1.Close;
end;
end.
Жазбаларды таңдау үшін дайын өрнектердің тізімін пайдаланған да ыңғайлы болады. Мұндай режим ComboBox және Memo компоненттерінің көмегімен жасалынады. Егер фильтрация шарты белгілі және өзгермейтін болса, онда пайдаланушы жазбаларды іріктеуді CheckBox жалаушасының және R adioButton айырып-қосқышының көмегімен басқара алады.
Форма қосымшасы оқиғасын өңдеуге мысалы ретінде, пайдаланушы фильтрацияны екі өріс бойынша немесе өрнегі бойынша басқару мүмкіндігін қолданатын, әйтпесе фильтрацияны алып тастайтын қарастырайық.
25-сурет. Бірнеше өріс бойынша електен өткізу формасына мысал
procedure TForm1.FormCreate(Sender: TObject);
begin
Table1.Filter:='';
Table1.FilterOptions:=[foCaseInsensitive];
Table1.Filtered:=True;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Filtered:=True;
// оклад бойынша фильтрациялау
if Radiobutton1.Checked then table1.Filter:='Salary >'+
Edit1.Text+ 'AND Salary <'+Edit2.Text;
// туған күні бойынша
if Radiobutton2.Checked then table1.Filter:='Birthday >'+
DateToStr(DateTimePicker1.Date)+'AND Brithday <
'+DateToStr(DateTimePicker2.Date);
// өрнек бойынша фильтрациялау
if Radiobutton3.Checked then Table1.filter:=edit3.Text;
if Radiobutton4.Checked then Table1.Filter:='';
end;
Ең кіші және ең үлкен датаның мәнін енгізу үшін екі TdateTimePicker (DateTimePicker1.Date және DateTimePicker2.Date) типті компоненттер қолданылады. Окладтың мәндеріне шек қою үшін Edit1.Text және Edit2.Text бір жолды редакторлары қолданылды.