Мліметтер жиынын срыптау
Мліметтер жиыныны срыпталан жазбаларымен жмыс істеу ыайлы болады. Срыптау жазбаларды аныталан рістері бойынша сі реті немесе кему реті бойынша срыпталады.
Срыптау баытта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-суретте крсетілген.
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-суретте келтірілген.
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 дістеріні кмегімен йымдастыруа болады.
Жазбаларды тізбектеп іздеу шін, осымша форма оиасын деуге мысал арастырайы.
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;