Зертханалық жұмыс

Зертханалық жұмыс №15

Тақырыбы: Байланысқан кестелер

Мақсаты:      Байланысқан кестелердің қолданылу мәнін түсіндіру. Delphi ортасында байланысқан кестелерді ұйымдастыру. Field Link Designer сұхбат терезесі жұмыс істеу

 

Теориялық түсініктеме

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

Енді мынадай жағдайды елестетейік: айталық, бір адамда екі телефон бар. Оның біреуі - үй телефоны, екіншісі – ұялы телефон. Мұндай ақпаратты біздің мәліметтер қорына қалай енгізуге болады? Бұл жағдайда екі жазба енгізу керек, оларда Тегі, Аты, Қала, e-mail, Туған күні өрістері бірдей болады. Бірақ бұл өте қолайсыз және дискідегі орынды артық жұмсау болып табылады. Сондықтан алдыңғы зертханалық жұмыстарда кестенің Қала өрісін жеке  кестеге орналастырған болатынбыз (еске түсір). Осы жағдайда байланысқан кестелерді қолданамыз.

Ол үшін төмендегі 24-суретте көрсетілгендей құрылымы бар екі кесте керек. Алдымен Анықтама кестесінде Тегі, Аты, Қала, e-mail, Туған күні өрістері қалсын. Телефон атты жаңа кесте құрып, оған Key1, LinkKey, Телефон және Ұялы телефон өрістерін қос.

image

Жаңа Телефон кестесіндегі LinkKey өрісі не үшін қажет және онымен Анықтама кестесіндегі key1 өрісі арасында неліктен байланыс сызығы жүргізілген? Key1 – бірегей өріс, ал LinkKey – байланыстыратын өріс және онда key1 өрісіне сілтеме сақталынады. 25-суреттегі кестелерге қара.

 Суреттің жоғарғы бөлігінде Анықтама кестесі, ал төменгі жағында Телефондар кестесі көрсетілген. Егер мәліметтерге қарайтын болсақ, онда key1 өрісінің мәндері үнемі бірге өсіп отыратынын көреміз, себебі бұл счетчик өрісі. Осы мысалдан Анықтама кестесінің key1 өрісі мен Телефондар кестесінің LinkKey өрісі арасында қалай байланыс орнатылатынын көруге болады.

 

image

Жоғарғы кестедегі бірінші жазба Алпысбаевтікі, екінші кестеден LinkKey өрісінің мәні 1-ге тең болатын жазбаны іздейміз. Мұндай жазба үшеу, олар алғашқы үш орында тұр. Яғни, Алпысбаевтың үш телефоны бар.

Жоғарғы кестедегі екінші жазба Жексенбаевтікі, екінші кестеден LinkKey өрісінің мәні 2-ге тең болатын жазбаны іздейміз. Мұндай жазба екеу, олар 4-ші және 6-шы орында тұр. Яғни Жексенбаевтың екі телефоны бар. Және т.с.с.

Осылайша, екі кестені кілттері арқылы байланыстырамыз.  Біз ізделінді өрістерді құрған кезде (Зертханалық жұмыс №3) біз осыған ұқсас байланыс жасаған болатынбыз, тек ол кезде басты кестенің  Қалалар анықтамасының басты кілтімен байланысқан Қала өрісі болған.

 

Жұмысты орындауға нұсқау

Алдымен Access мәліметтер қорын ашып, Анықтама кестесінің өрістерін өңдеңіз, яғни Телефон және Ұялы өрістерін алып тастаңыз.

Енді конструктор режимінде келесі өрістері бар жаңа кесте құрыңыз:

§  Key1 – счетчик, кілттік өріс;

§  LinkKey – сандық өріс, индекстелген өріс қасиетіне Да (Допускаются совпадения) мәнін көрсет;

§  Телефон – мәтіндік өріс, өлшемі – 10;

§  Ұялы телефон – логикалық.

Енді Delphi-ді жүктеңіз. Мәліметтерге қатынас жасау компоненттері бар модульді ашып, BookTable компонентіне екі рет шертіңіз. Өріс редакторынан Телефон және Ұялы телефон өрістерін бірінен соң бірін ерекшелеп, <Del> пернесінің көмегімен өшіріңіз, себебі, бұл өрістерді кестеден алып тастаған болатынбыз. Сол сияқты осы өрістерді FindQuery компонентінен де өшіріңіз. Және де осы жерден key1 өрісін де өшіріңіз (себебі, іздеу сұранысы бірден екі кестеге жүргізіледі, ал key1 атаулы өріс екеуінде де бар). Қазір жобадағы SQL сұраныс дұрыс болмағандықтан онда іздеу орындалмайды.

Енді осы модульге Телефондар кестесіне қатынас жасау үшін DataSource  компонентін (оны TelephoneSource деп ата) және ADOTable компонентін (оны TelephoneTable деп ата) қосыңыз. TelephoneSource компонентінің DataSet қасиетінің мәніне TelephoneTable-ді орнат.

Енді TelephoneTable компонентінің келесі қасиеттерін орнат:

§  Connection – біздің мәліметтер қорына байланысу компонентіміз ADOConnection1-ді көрсет;

§  TableName – бұл жерге Телефондар кестесінің атауын көрсет;

§  Active – кестені ашу үшін True мәнін орнат;

§  MasterSource – бұл жердегі ашылатын тізімнен BookSource мәнін таңдаңыз (мұнынмен сіз Телефондар кестесі үшін негізгі кестені көрсетесіз);

§  MasterFields – бұл жерде байланысатын өрістерді көрсетуіміз керек.

Байланысатын өрістерді көрсету үшін MasterFields қасиетіне екі рет шертіңіз, сіздің алдыңызда 26-суретте көрсетілген терезе ашылады. DetailFields (бағынышты кестенің өрістері) тізімінен Link өрісін таңдаңыз, ал MasterFields тізімінен Key1 өрісін таңдаңыз. Add батырмасын бассаңыз JoinedFields (Байланысқан өрістер) тізімінде орнатылған байланысты көрсететін жол пайда болады.  Көрсетілген байланысты сақтау үшін ОК батырмасын басып, терезені жабыңыз.

image

Енді нысан инспекторы терезесінен   IndexFieldNames қасиетіне қараңыз. Онда LinkKey өрісінің (байланыс орнатылатын өріс) атауы пайда болған көресіз. Байланысқан кестелерде бұл өрісті сұрыптау жүргізу үшін қолдануға болмайды, әйтпесе байланыс бұзылады.

Енді өріс қасиеттерін редактрлеу терезесін көру үшін TelephoneTable компонентіне екі рет шертіңіз. Мұнда барлық өрістерді қосып, key1 және LinkKey өрістерінің Visible қасиетіне False мәнін орнату керек.

Ең соңында программалауға кірісеміз. Негізгі форманы ашып, мұнда тағы бір DBGrid торын қосыңыз. Ол 27-суретте көрсетілгендей терезенің оң жақ бөлігінде орналасу керек. Тордың тек DataSource қасиетін өзгерту керек, оған DataModule1.TelephoneSource телефондар кестесін көрсетейік. Сонымен қатар BorderStyle қасиетіне bsNone қасиетін орнатайық. Осылай тор көрнекі болады.

Мысал жүктеуге дайын. Сіз сол жақ тордан кез-келген адамды таңдап, оң жақ торға осы жазба үшін бірнеше телефон номерлерін енгізуіңізге болады. Жаңа жазбаны енгізу үшін <Ins> пернесін, ал өшіру үшін <Ctrl>+<Del> пернелер комбинациясын қолдана аласыз. Өзгертулерді сақтау үшін курсормен басқа жазбаға өту керек. Жазбаларды өңдеуді қайтару үшін <Esc> пернесі қолданылады.

 

image

Енгізілген өзгертулерге қатысты төмендегіні есте сақтаған дұрыс:

Пайдаланушылар көбінесе енгізілген өзгертулерді сақтау үшін келесі жазбаға өту керектігін ұмытып кетеді. Сондықтан, негізгі форма үшін OnClose оқиғасы бойынша, программаның барлық кестелері үшін келесі кодты жазу керек:    If Table1.Modified then Table1.Post;

Бұл жерде егер программаны жабу кезінде Table1 кестесі өзгертілген болса, онда өзгертулердің сақталатындығы тексеріледі.

Өзгерістерді бақылаудың тағы бір тәсілі – DBGrid торының Option қасиетіндегі dgCancelOnExit параметріне false мәнін орнату. Осы екі тәсілді де бірден қолданған дұрыс.

Енді Телефон номері бойынша іздеуге арналған сұранысты жазайық. Мәліметтер модулін ашып, FindQuery компонентіне келесі сұранысты енгізіңіз:

Select *

From Анықтама, Телефондар

Where Телефон Like :Telephone

And Анықтама.key1=Телефондар.LinkKey

Бұл жерде көрсетілген телефон мәнімен жазбалары бар екі кестенің де  барлық өрістерін таңдаймыз. Сол сияқты осы жерде кестелер арасындағы байланыс та көрсетілген.

SQL сұраныс редакторын жабыңыз және FindQuery компонентіне екі рет шертіңіз. Өрістер қасиеттері редакторында тышқанның оң батырмасын шертіп, Add All Fields пунктін таңдаңыз. Осылайша редакторға онда болмаған жаңа барлық өрістер қосылады (оған Телефондар кесте өрістері және Анықтама кестесінің кілттік өрісі). Байқасаңыздар key1 өрісі жоқ. Бізде екі кестеде де, екеуінде де key1 өрістері бар, сондықтан оларды ажырату үшін өріс аттары келесідей өзгертілген:

Кесте атауы      Өріс атауы

Жұмыс істеуге ыңғайлы болу үшін, кілттік өрістің бейнеленуін алып тастаңыз, яғни Visible қасиетін false мәнін орнатыңыз. Енді программаны жүктеп, SQL сұраныс жұмысын тексеріп көріңіз. Бізде телефондар туралы ақпараттар үш кестеде орналасқан болса да, оны SQL сұранысы арқылы бір кестеде көре аламыз.

Іздеу нәтижесі көрсетілген терезеде осы мәліметтерді өңдеуге болатындығына назар аударыңыз және осы өзгертулер өз кестелерінде дұрыс бейнеленеді ме, бейнеленбейді ме соны тексеру үшін мәндерін өзгертіп көріңіз. Егер өзгеріс енгізілген осы терезені жауып, негізгі кестеден қарасақ, ол жерде сіз өзгерткен мән көрінбейді, себебі, ол бейнелену торы жаңартылмаған (яғни, сіздің өзгертпелеріңіз мәліметтер қорында сақталған, бірақ  негізгі формадағы торда өзгертілген кестені бейнелеп тұрған жоқ), ол үшін Refresh әдісі қолданылады. Егер бұл әдісті қолданбасаңыз оны тек программаны өшіріп қайта қосу арқылы көре аласыз.

Енді осы әдісті қолданайық. Ол үшін Іздеу батырмасына екі рет шертіп, ішінде жазылған кодтардың төменгі жағына мына кодты жазыңыз:

DataModule2.BookTable.Refresh;

DataModule2.TelephoneTable.Refresh;

Программадағы сұрыптауды өшіру керек, оны сол күйінде қолдануға болмайды, өйткені, біз сұрыптауды индекс көмегімен жүргіздік, ал байланысқан кестелерде индекстер байланыс қызметін атқарады. Егер индекстелген өріс мәнін өзгертсек, онда кесте арасындағы байланыс бұзылады.

Бұл жағдайда кестенің Sort қасиетін қолдануға болады. Бірақ осы қасиет арқылы телефондарға сұраптау жасай алмаймыз, себебі ол басқа кестеде орналасқан. Бірақ жазбаларды негізгі кестенің кез келген өрісі бойынша реттей аламыз. Сұрыптау мәзірінің Тегі боынша пункті үшін келесі кодты жазыңыз:

DataModule2.BookTable.Sort:='Тегі ASC';

Сұрыптау мәзірінің Телефон боынша пунктін алып тастауға болады, ал оның орнына Қала бойынша сұрыптауды жасайық. Бұл жағдайда мәзірдің сәйкес пункті үшін келесі кодты жазыңыз:

DataModule2.BookTable.Sort:='Қала ASC'; 

Ең соңында Мәліметтерді өңдеу терезесін Анықтама кестесінде жүргізілген өзгерістерге сәйкес түзет. Ол үшін EditRecordForm формасына өтіп, қажет емес компоненттерді өшір.

 

Тапсырма:

1.    Алдыңғы зертханалық жұмыста дайындалған Student кестесіндегі құрылымға сәйкес мәліметтер қорымен  жұмысты жоғарыдағы нұсқауға қарап жалғастыр;

2.    Өз бетіңмен дайындаған Кітапханадағы кітап қоры туралы мәліметтер қорында жоғарыдағы нұсқауды пайдаланып жетілдір және түсіндіріп бер.

 

Бақылау сұрақтары:

1.    Байланысқан кестелер не үшін қолданылады?

2.    TelephoneTable компонентінің MasterFields қасиеті не үшін керек?

3.    Field Link Designer терезесі қандай қызмет атқарады?

4.    Осы зертханалық жұмыста қандай екі кестені байланыстырдық?

5.    Осы зертханалық жұмыста қандай SQL сұраныс дайындадық?

 

 


Ұқсас жұмыстар

Зертханалық жұмыстарды ұйымдастыру
Физикалық зертханалық жұмыстардың міндеттері
Биологиядан зертханалық жұмыстар
Биология пәнінен зертханалық және практикалық жұмыстардың айырмашылығы
Биология сабақтарындағы оқыту технологиясы
Оқушылардың өзіндік жұмыс істеу дағдыларын қалыптастырудың педагогикалық негіздері
Биологиядан зертханалық жұмыстарды өткізу әдістемесі
Химияны оқытуда зертханалық жұмыстарды жүргізу әдістемесі
Виртуалды зертханалық жұмыстар
Зертханалық жануарларды күтіп - бағу, өсіру, көбейту