Шығыс Қазақстан облысының білім басқармасы


§  Нет – индекстелмеген өріс



Pdf көрінісі
бет100/180
Дата06.01.2022
өлшемі4,77 Mb.
#15026
1   ...   96   97   98   99   100   101   102   103   ...   180

§  Нет – индекстелмеген өріс; 
§  Да (доспускается совпадения) - өріс индекстелген және екі (немесе одан да көп) 
жазба бірдей мәнге ие бола алады. Бұл, мысалы, Тегі өрісінде бірдей екі Асанов бола алады 
дегенді білдіреді. Бұл біздің жағдайымызға келетін нұсқа. Себебі, тектері бірдей адамдар өте 
көп. 
§  Да (совпадения не допускается) – егер бұл параметр таңдалынған болса, онда 
индекстелген өрісте әртүрлі жазбаларда бірдей мән сақтауға болмайды. Өрістің бірегейлігін 
мәліметтер қорының өзі бақылайды. 
Енді Тегі, Телефон өрістерін индекстейік. Екеуінде де индекстелген өріс қасиетінде 
Да (доспускается совпадения) параметрін таңдаңыз. Осымен мәліметтер қорын жауып, 
жобаға көшейік. Енді біздің алдыңғы зертханалық жұмыста дайындалған жобамызды Delphi 
ортасында ашып, оған сұрыптауды қосайық. 
Алдымен біздің формамызды жаңартайық. Ол үшін жоғарғы 
мәзірге Сұрыптау пунктін және оған Тегі бойынша және Телефоны бойынша деген ішкі 
пунктер қосу керек (19-сурет). 
Тегі бойынша пункті үшін келесі кодты жаз: 
procedure TForm1.N11Click(Sender: TObject); 
begin 
DataModule2.BookTable.IndexFieldNames:='Тегі'; 
end; 
Телефоны бойынша пункті үшін келесі кодты жаз: 
procedure TForm1.N12Click(Sender: TObject); 
begin 
DataModule2.BookTable.IndexFieldNames:='Телефон'; 
end; 
 


101 
 
Екі  жағдайда  да BookTable кестесінің IndexFieldNames қасиетіне  жазбасын  сұрыптау 
қажет өрісті көрсетеміз. 
  
Мәліметтерді сүзу 
Телефон  анықтамалығы  жаңа  мүмкіндіктермен  толықтырылуда,  дегенмен  онда  ең 
бастысы – Іздеу жоқ. Мысалы, мәліметтер қорында мыңдаған мәлімет болса, белгілі адамның 
телефонын қалай жылдам табуға болады? Әрине, мұнда мүмкіндігін қосу керек. 
Іздеу үшін TADOTable компонентінің Filter қасиеті бар. Онда мәліметтерді  бейнелеу 
шартын көрсетуге болады. Мысалы, онда Тегі өрісінің Асанов мәнін қамтитын жазбаларды 
бейнелеу  шартын  көрсетуге  болады.  Сүзгі  жұмыс  істеуі  үшін  біздің  кестенің  Filtered 
қасиетіне  True  мәнін  орнату  керек.  Осыдан  кейін  қасиетін  өзгертуге  болады,  содан  кейін 
барлық өзгерістер өз күшіне енеді. 
Filter қасиеті – бұл жол. Онда шарт мәтінін төмендегі түрде жазу керек. 
Өріс [салыстыру операторы] ‘Мән’ 
Мысалы,  егер  сіз  Тегі  өрісіндегі  мәні  Асанов  болатын  барлық  жазбаларды 
бейнелегіңіз келсе, онда былай жазу керек: 
AdoTable1.Filter:=’Тегі=’’Асанов’’’; 
Егер  тырнақшаларды  қолданғыңыз  келмесе,  онда  QuotedStr  функциясын  қолдануға 
болады.  Оған  жолды  көрсетсеңіз  сізге  оны  тырнақшаға  алып,  қайтарады.  Осылайша  код 
келесі түрде болуы мүмкін: 
AdoTable1.Filter:=’Тегі=’+QuotedStr(Асанов); 
Бұл  теңдікке  тексерудің  қарапайым  мысалы  болған.  Сіз  басқа  кез-келген  салыстыру 
операторын қолдана аласыз. Бірден екі немесе одан да көп мән тексерілетін салыстырудың 
құрама операторларын жасай аласыз. 
AdoTable1.Filter:=’Тегі=’ ’Асанов’’’ or Телефон=’’355335’’’; 
Бұл  мысалда,  Тегі  өрісінің  мәні  Асанов  болатын  және  Телефон  өрісі  мәні  355335 
болатын  барлық жазбаларды  іздеу  қарастырылған.  Екі  шартты  біріктіру  үшін  or  операторы 
қолданылады. Сол сияқты логикалық типті AND операторында қолдануға болады. 
Ескерту: 
Сүзгіні  программалау  кезінде  тырнақшаларға  мұқият  болу  керек.  Мәндердің  бірегей 
тырнақшамен  ерекшеленетінін  есте  ұстаңыз,  яғни  жол  ішінде  бірегей  тырнақшадан  екеу 
қоюға тура келеді (екі тырнақшалы қолданылмайды). 
Егер өріс атауы екі сөзден тұратын болса, онда оны тік жақшаға алу керек. Мысалы, 
Қала атауы өрісіне қойылатын сүзгі төмендегідей болады: 
ADOTable1.Filter:=’[Қала атауы]=’’Астана’’’; 
Енді алдыңғы мысалға келейік. Қазір оған іздеу мүмкіндігін қосайық. 
Алдымен форманың түрін жаңартайық. Ол үшін формаға «Іздеу» мәтіні орналасатын 
панель және FindEdit атаулы Tedit енгізу жолы компонентін қосайық (20-сурет). 
Енді енгізу жолы үшін OnChange оқиғасын өңдейік. Пайдаланушы енгізу жолындағы 
мәтінді  өзгерткен  кезде  біз  сүзгіні  де  өзгертуіміз  керек.  Бұл  өңдеушіде  келесі  кодты 
жазыңыз: 
procedure TForm1.FindEditChange(Sender: TObject); 
begin 
If Length(FindEdit.Text)>0 then 
DataModule2.BookTable.Filtered:=true else DataModule2.BookTable.Filtered:=false; 
DataModule2.BookTable.Filter:='Тегі>'''+FindEdit.Text+''''; 
end; 
Алдымен жолды тексереміз. Егер іздеу жолында бір мән болса, онда сүзгіні қосамыз, 
әйтпесе бүкіл кестені көрсету үшін өшіріп тастаймыз. Осыдан кейін сүзгі шарты жасалады: 
'Тегі>'''+FindEdit.Text+'''';  Мұнда  енгізілген  мәтінге  ұқсас  барлық  жазбалар  бейнеленуі  үшін 
«үлкен» (>) белгісі қолданылады. 
  


102 
 
 
Ескерту: 
Егер  теңдік  белгісін  қойсақ  және  пайдаланушы  «С»  әріпін  енгізсе,  онда  кестеде 
ештеңе бейнеленбейді, себебі тегі «С» болатын адам жоқ. Ал үлкен белгісін қойсақ, онда «С» 
әріпінен басталатын барлық тектер бейнеленеді. 
Сүзгі  соңында  төрт  бірегей  тырнақша  жазылды.  Неліктен  төртеу?  Себебі,  мәннен 
кейін  бір  тырнақша  жазуымыз  керек.  Ол  үшін  тырнақшасы  бар  жол  қосуымыз  керек. 
Сондықтан осы жолды ашу және жабу үшін екі бірегей тырнақша тұр. Бұл тырнақшаны жол 
ішіне  қоямыз,  ол  үшін  бірегей  тырнақшадан  екеу  қоямыз,  нәтижесінде  ол  бір  бірегей 
тырнақша болады. 
Жоғарыда айтылғандай ADO-да сүзгі нашар жұмыс істейді. Бірақ сүзгілеу мүмкіндігін 
кеңейтуге  жақсы  мүмкіндік  береді.  DataModuleUnit  мәліметтер  модуліне  өтіңіз  және 
BookTable  компоненті  үшін  OnFilterRecord  оқиғасын  өңдейік.  Ол  қосылған  сүзгі  кезінде 
және  программаның  жолдың  сүзгіге  сәйкестігін  әрбір  анықтау  кезінде  шақырылады.  Бұл 
жерде біз өз бетімізбен сүзгілеу логикасын басқаруымызға болады. Дайындалған өңдеушіде 
келесі кодты жазыңыз: 
procedure TDataModule2.BookTableFilterRecord(DataSet: TDataSet; 
  var Accept: Boolean); 
begin 
Accept:=false; 
If 
Copy(BookTableDSDesigner.AsString,1,Length(Form1.FindEdit.Text))=Form1.FindEdit.Text  then 
Accept:=true; 
end; 
Өңдеушіге екінші параметр ретінде  Accept  бульдік айнымалы беріледі. Егер біз  оған 
False  мәнін  енгізсек,  онда  ағымдағы  жол  сүзгіге  сәйкес  келмейді.  Егер  true  болса,  онда  жол 
сәйкес келеді және оны бейнелеуге болады. 
Ең  басында  Accept  айнымалысына  false  мәнін  береміз.  Осыдан  кейін  ағымдағы 
жолдың сүзгіге сәйкестігі тексеріледі. Ол үшін екінші жолда не жазылғанын ұғу керек. Оны 
бөліктерге бөліп қарастырайық. 
Copy(BookTableDSDesigner.AsString,1,Length(Form1.FindEdit.Text)) 
Мұндағы  BookTableDSDesigner  –  тегі  жазылған  өріс  атауы.  Егер  BookTable 
компонентіне екі рет шертіп пайда болған өріс редакторындағы Тегі өрісінің Name қасиетіне 
қарайтын болсаңыз осы атауды көресіз. 
Сонымен,  Copy  функциясы  бірінші  параметр  ретінде  көрсетілген  жолдан,  екінші 
параметр  ретінде  көрсетілген  орыннан  бастап,  үшінші  параметрге  тең  символдар  санын 
қайтарады. 
Нәтижені  сүзгіге  арналған  енгізу  жолының  мазмұнымен  салыстырамыз.  Егер 
ағымдағы жолдағы адамның тегі сүзгі  ретінде көрсетілген мәтіннен басталса, онда бұл жол 
бейнеленеді. 
Енді мысалды жүктеп, оның дұрыс жұмыс істейтініне көз жеткізейік. 
 Тапсырма: 
1.    Осы  нұсқаулықты  пайдаланып,  алдыңғы  зертханалық  жұмыста  дайындалған 
Студент жобасына Сұрыптау және Сүзгілеу мүмкіндіктерін қос. 
2.  Өз  бетіңмен  дайындаған  Кітапханадағы  кітап  қоры  туралы  мәліметтер  қорын  да 
жоғарыдағы нұсқауды пайдаланып жетілдір және түсіндіріп бер. 


Достарыңызбен бөлісу:
1   ...   96   97   98   99   100   101   102   103   ...   180




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет