Мәліметтер жиынын сұрыптау

Мәліметтер жиынының сұрыпталған жазбаларымен жұмыс істеу ыңғайлы болады. Сұрыптау жазбалардың анықталған өрістері бойынша өсі реті немесе кему реті бойынша сұрыпталады.

Сұрыптау бағыттаy ағымдағы индекстің ixDescending параметрі анықтайды, қалыпты жағдайда қосылмаған болады және сұрыптау мәндерініғ өсу реті бойынша орындалады. Егер ixDescending индексінің белгісі қосылған болса, онда сұрыптау мәндердің кему реті бойынша орындалады. Жазбаларды сұрыптауды орындалатын индексті қою, IndexName немесе IndexFieldNames қасиеттерінің көмегімен орындалады. IndexName қасиетінің мәні негізінде, оны құрғандағы индекс аты көрсетіледі. IndexFieldNames қасиетін пайдалану барысында сәйкес индекстердің өріс аттары көрсетіледі.

Paradox кестесінің басты индексінің (кілтінің) аты болмауына байланысты, бұл индекс бойынша сұрыптауды IndexFieldNames қасиетінің көмегімен орындауға болады.

Индекстің атын көрсетумен сұрыптауды мысалмен көрсетейік.

Procedure TForm1.Button4Click(Sender: Tobject);

Begin

Case Radiogroup1.ItemIndex of

0: Table1.IndexName:=’IndName’;

1: Table1.IndexName:=’indBirthday’;

end;

end;

Мәліметтер жиыны негізінде Table1 компоненті пайдалынады, ал сұрыптау екі тәсілмен орындалады: Name өрісі үшін құрылған IndName индексі бойынша, және Birthday өрісі үшін құрылған indBirthday индексі бойынша.

Индекстік өрістердің атын көрсетумен тағы бір сұрыптау мысалын көрсетейік.

Procedure TForm1.Button5Click(Sender: Tobject);

Begin

Case Radiogroup1.ItemIndex of

0: Table1.IndexFieldNames:=’Name’;

1: Table1.IndexFieldNames:=’Name;Birthday’;

2: Table1.IndexFieldNames:=’Code’;

end;

end;

Мұнда сұрыптау келесі өрістер бойынша орындалады: Name (IndName индексі), Name және Birthday (indNameBirthday индексі), Code (басты индекс).

Енді қиынырақ сұрыптау мысалын қарастырайық. Мәліметтер қоры ретінде Table1 компоненті қолданылады. Пайдаланушы жазбаларды сұрыптауды екі айырып-қосқыштың көмегімен басқара алады: бірінші сұрыптаудың түрі, ал екінші сұрыптаудың бағыты көрсетіледі. Сұрыптау Сортировать түймесін басқан соң орындалады. Форма түрі 21-суретте көрсетілген.

Мәліметтер жиынын сұрыптау - student2.ru

21-сурет. Сұрыптау формасының мысалы

Procedure TForm1.Button5Click(Sender: Tobject);

Begin

Case Radiogroup1.ItemIndex of

0: Table1.IndexName:=’IndName’;

1: Table1.IndexName:=’IndBirthday’;

2: Table1.IndexName:=’’;

end;

Case Radiogroup1.ItemIndex of

0: Table1.IndexDefs[Table1.IndexDefs.IndexOf(Table1.IndexName)].Options:=

Table1.Indexdefs[Table1.IndexDefs.IndexOf(Table1.IndexName)].Options+[ixdescending];

1: Table1.IndexDefs[Table1.IndexDefs.IndexOf(Table1.IndexName)].Options:=

Table1.Indexdefs[Table1.IndexDefs.IndexOf(Table1.IndexName)].Options-

[ixdescending];

End;

End;

Жазба сұрыпталатын өріс IndexName қасиеті арқылы қойылады.

Сұрыптау болмаған жағдайда бұл өріске бос жол меншіктеледі. Бұл Paradox кестесі үшін, бірінші өріс бойынша сұрыптауды білдіреді. dBase кестесі үшін кесте файлына жазбалардың енуіне байланысты орналастырылады.

Сұрыптау бағытын басқару ағымдағы индекстің ixDescending параметрінің көмегімен жүзеге асырылады. IndexDefs тізіміндегі ағымдағы индекс нөмерін анықтау үшін IndexOf әдісі қолданылады.

Жазбаларды іздеу

Жазбаны іздеу қандай да бір анықталған шартты қанағаттандыратын жазбаға ауысуды білдіреді. Фильтрациядан айырмашылығы іздеу нәтижесінде мәліметтер жиынындағы жазбалар санының өзгермейтіндігінде. Өріс бойынша жазбаны іздеу үшін Locate және Lookup әдістері қолданылады, өрістер индекстелмеген болуы да мүмкін.

Locate (const keyFields: String; const KeyValues: Variant; Options:TLocateOptions):Boolean функциясы өрістің берілген мәнімен іздейді. Егер жазба табылса, онда функция True мәнін, ал басқа жағдайда False қайтарады.

Іздеу жүргізілетін өріс тізімдері KeyFields параметрінде беріледі, өріс нүктелі үтірмен (;) бөлінеді. Variant типті KeyValues параметрі іздеу үшін өріс мәнін көрсетеді.

Options параметрі келісім бойынша символдық жолды іздеуге пайдалынады. Бұл параметр жиын типіне TLocateOptions жатады, және келесі

мәндерді қабылдайды:

• loCaseInsensitive (әріптердің регистрі ескерілмейді);

• loPartialKey (мәндердің кейбір бөлігі сәйкес болуды білдіреді);

Бір өріс бойынша іздеуге мысал:

Table1.Locate(‘Number’, 123, []);

Іздеу Number өрісі бойынша орындалады, және бұл өрістің мәні 123 саны болатын бірінші жазба ізделінеді.

Мысал ретінде мәліметтер жиынынан іздеуді қамтамасыз ететін оқиғаны өңдеуді қарастырамыз. Форма түрі 22-суретте келтірілген.

Мәліметтер жиынын сұрыптау - student2.ru

22-сурет.Іздеу формасының мысалы

Пайдаланушы товар аты (Name) және құны (Price) өрістері бойынша іздеуді жүзеге асырады. Іздеу процесі «Іздеу» түймесін шерткен соң басталады.

Төмендегі оқиғаны өңдеу модулінің мәтіні келтірілген.

procedure TForm1.Button1Click(Sender: TObject);

Var Keyfields: String;

KeyValues: Variant;

Options: TLocateOptions;

begin

if not (CheckBox1.Checked or CheckBox2.Checked) then begin

MessageDlg('yt pflfys eckjdbt gjbcrf', mtInformation, [mbOK],0);

exit;

end;

// Бір уақытта Name, Price екі өрісі бойынша іздеу

if CheckBox1.Checked and CheckBox2.Checked then begin

KeyFields:='Name;Price';

KeyValues:=VararrayOf([edit1.Text,edit2.Text]);

end

// Екі өрістің біреуі бойынша іздеу

else begin

// Name өрісі бойынша іздеу

if CheckBox1.checked then begin

Keyfields:='Name';

keyvalues:=edit1.Text;

end;

// Price өрісі бойынша іздеу

if CheckBox2.Checked then begin

KeyFields:='Price';

KeyValues:=edit2.Text;

end;

end;

// Іздеу әріптердің регистріне байланысты емес орындалады

// кейбірелері сәйкес болатын мүмкіндіктерімен іздеу

Options:=[loCaseInsensitive,loPartialKey];

// Жазба табылған жоқ

if not Table1.Locate(KeyFields,KeyValues,Options) then begin

Beep;

MessageDlg('Жазба табылмады, mtInformation, [mbOK],0);

exit;

end;

end;

Тізбектеп іздеуді, жазба өрістері мәні мен іздеу үшін берілген мәннің ұқсас сәйкестерін іздеуге арналған FindNearest, SetNearest, EditNearest және GotoNearest әдістерінің көмегімен ұйымдастыруға болады.

Жазбаларды тізбектеп іздеу үшін, қосымша форма оқиғасын өңдеуге мысал қарастырайық.

Мәліметтер жиынын сұрыптау - student2.ru

23-сурет. Тізбектеп іздеу формасына мысал

Қосымшаның форма компоненті үшін оқиғаны өңдеу программасы төменде келтірілген.

procedure TForm1.Edit1Change(Sender: TObject);

Var strField: String;

begin

// егер іздеу режимі қосырмаған болса, онда процедурадан шығу

if not CheckBox1.Checked then exit;

// іздеу үшін өрісті таңдау

case RadioGroup1.ItemIndex of

0:strField:= 'Name';

1:strField:= 'Firm';

2:strField:= 'City';

end;

// іздеуді орындау

Table1.Locate(strField,edit1.Text,

[loCaseInsensitive,loPartialKey]);

end;

procedure TForm1.CheckBox1Click(Sender: TObject);

begin

edit1Change(Sender);

end;

procedure TForm1.RadioGroup1Click(Sender: TObject);

begin

edit1Change(Sender);

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

Form1.Close;

end;

Наши рекомендации