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

Зертханалық жұмыс №9-10

Тақырыбы: Кестелер арасындағы қатынас. Қатынас жасалған кестелерді ұйымдастыру барысында ізделінді өрістерді пайдалану

Мақсаты:      Delphi ортасында мәліметтер қорын ұйымдастыру барысында кесте өрістерін байланыстыру және байланысқан кестелерді пайдалану жолын көрсету

 

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

Алдыңғы зертханалық жұмыста қарастырылған Анықтама кестесіндегі сандық типтегі Қала өрісіне тоқталайық. Бұл өрісте сандық типтегі мәлімет тұрғандықтан, онда қала туралы мәлімет жоқ. Алдымен біздің мәліметтер қорына 5 кестедегі құрылымды өрістері бар тағыда бір кесте құрайық:

5 кесте

Өріс атуы

Типі

Сипаттама

Key1

Счетчик

Бұл кілттік өріс. Өріс өлшемі – Длинное целое. Индекстелген өріс – Да (қайталану болмауы керек).

Қала атауы

Текстовый

Өріс өлшемі – 30 .

Кестені Қалалар анықтамасы атауымен сақта. Енді мәліметтер қорында екі кесте болды: Анықтама және Қалалар анықтамасы.

image

Енді алдыңғы зертханалық жұмыста дайындалған жобаны және DataModuleUnit модулін (11-сурет) ашайық. Осы модуль терезесіне тағы да DataSource компонентін (оны TownSource деп атайық) және де ADOTable компонентін (оны TownTable деп атайық) қосайық. Осыдан кейін TownSource компонентінің DataSet қасиетіне TownTable компонентін таңдайық.

Енді TownTable-ді қалалар анықтамасын бейнелеуге баптайық. Ол үшін:

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

§  TableName қасиетінде Қалалар анықтамасы кестесін көрсет;

§  Кестені белсендіру үшін Active қасиетіне True мәнін орнат.

TownTable компонентінің кесте өрістерін редактрлеу терезесіне кіріп, барлық өрістерді қос. Key1 өрісін көрінбейтіндей етіңіз, себебі оның пайдаланушыға қажеті жоқ.

Енді анықтаманы редактрлеу үшін жаңа форма құрайық және оны TownBookUnit атаулы модульде сақтайық. Форманың өзін TownBookForm деп атайық. Жаңа формаға бұл жерден мәліметтер қорымен жұмыс істеуге арналған компоненттерге қатынас жасай алатындай DataModuleUnit модулін қос (еске түсір: File|Use Unit).

Формаға DBGrid торын орналастыр және DataSource қасиетінде Қалалар анықтамасы кестесін көрсет – DataModule2.TownSource. Мұнда Жаңа жол қосу, Сақтау, Өшіру және Шығу батырмаларын қосайық. Жалпы форманың түрін 12-суреттегідей безендір.

image

Жаңа жол қосу батырмасының OnClick оқиғасы үшін келесі кодты жаз:

procedure TTownBookForm.AddBtnClick(Sender: TObject);

begin

DataModule2.TownTable.Insert;

DBGrid1.SetFocus;

end;

TownTable кестесінің Insert әдісі жаңа жол қосады. Екінші жолда біздің торымыздың SetFocus әдісі шақырылады, ол енгізу фокусын оған ауыстырады.

Сақтау батырмасының OnClick оқиғасы үшін келесі кодты жаз:

procedure TTownBookForm.SaveBtnClick(Sender: TObject);

begin

If DataModule2.TownTable.Modified then

DataModule2.TownTable.Post;

end;

Егер ағымдағы жолға өзгеріс енгізілген болса, онда Modifies қасиетінде True мәні, әйтпесе False мәні болады. Дегенмен егер өзгеріс енгізілген болса, онда оларды сақтау керек, әйтпесе пайдаланушы терезені жапқан кезде міліметтер сақталмай қалады. Өзгерістерді сақтау үшін Post әдісі қолданылады.

Бұл жерде де фокусты кері торға ауыстыруға болады, бірақ бұл жағдайда осы әрекет орындалмаған.

Өшіру батырмасының OnClick оқиғасы үшін келесі кодты жаз:

procedure TTownBookForm.DelBtnClick(Sender: TObject);

begin

DataModule2.TownTable.Delete;

end;

Delete әдісі кестеден ағымдағы жолды өшіреді.

Осымен Қалалар анықтамасы кестесінің сыртқы түрін дайындау аяқталды. Енді негізгі формаға өтіп, қалалар анықтамасын шақыру үшін мәзір құрайық (13-сурет).

image

Мәзірдің OnClick оқиғасы бойынша Қалалар анықтамасы терезесін шақыру кодын жазамыз:

procedure TForm1.TownBookMenuItemClick(Sender: TObject);

begin

TownBookForm.ShowModal;

end;

Егер Қалалар анықтамасы модулін басты формаға қоспаған болсаңыз (еске түсір: File|Use Unit), жобаны компиляциялау кезінде негізгі форма мен қалалар анықтамасы формасының арасында байланыс жоқтығы туралы хабарлама шығарылады. Сізге оны автоматты түрде қосу туралы ұсыныс жасалынады. Да батырмасын бассаңыз, онда модуль автоматты түрде қосылады, осыдан кейін жобаны компиляциялауға болады.

Енді жобаны жүктеп, программа жұмысын тексеріңіз. Жүктелген программада Қалалар анықтамасы терезесін шақырып, оған бірнеше жол қосыңыз.

Осымен, бізде қалалар анықтамасы бар және біз оның мәліметтерін негізгі кестемен байланыстыра аламыз. Бірақ алдымен форманы аздап жақсартайық. Негізгі формадан DBGrid1 торын ерекшелеңіз және  Options қасиетінде тордағы мәліметтерді өңдеу мүмкіндігін өшіріңіз - dgEditing қсаиетінде False мәнін орнат.

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

§  Жаңа мәлімет қосу;

§  Мәліметтерді өңдеу;

§  Мәліметтерді өшіру.

Формада осы командаларға жылдам қатынас жасауға болатындай бірнеше батырмалары бар тағы бір панель жасалған (14-суретте мәзірден кейін орналасқан батырмалар).

 

image

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

§  BorderStyle үшін - bsSingle;

§  Position үшін – poMainFormCenter.

Форманы ары қарай өз қалауыңызша безендіруге болады. Мұнда тек негізгілерін қарастырамыз. Алдымен, жаңа  формаға мәліметтері бар модульді қосайық, себебі бізге оларға қатынас жасауға тура келеді (Еске түсір: File| Use Unit). Енді мәліметтерді редактрлеуге арналған форманың түрін көріңіз (15-сурет).

image

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

Тегі, Аты, Телефон, e-mail, Туған күні,айы,жылы жазуларының қарсысында Data Controls қалташасынан алынған DBEdit компоненттері орналасқан. Бұл компоненттер TEdit типті қарапайым енгізу жолдары болып табылады, тек олар мәліметтер қорында көрсетілген өрістерді автоматты түрде өңдей алады. Компонент қажетті өрістің мәліметтерін көруі үшін, оның DataSource қасиетінде қажетті кестені көрсету керек (DataModule2.DataSource1), ал DataField қасиетінде редактрлеу қажет өрісті көрсету керек.

Ұялы телефон өрісінің мәнін көрсету үшін DBCheсkBox компонентін қолданған дұрыс, оған DBEdit компоненті сияқты кесте өрісін көрсету керек.

Қала өрісіне ерекше тоқталайық. Қала атаулары жеке анықтамада сақтаулы, ал негізгі кестеде тек сандар – қалалар анықтамасындағы жолдардың номерлері сақталуы керек. Осылайша әрбір жолда қалалрдың ұзақ атаулары емес, тек сандар сақталады. Айталық, сіздің бірнеше Семей қаласында тұрады. Бұл жағдайда олардың барлығы үшін, Қала өрісінде қаланың толық атауы тұрады. Ал бұл жадыны артық жұмсау болып табылады. Мұны болдырмас үшін қала атауы бір-ақ рет көрсетілетін анықтамалық жасап алып, содан кейін негізгі кестеден оған тек сілтеме жасауға болады.

Мысалы, ерекшеленген жазбада екінші номерде (қалалар анықтамасында бұл жол үшін key1 өрісінің мәні 2-ге тең) тұрған Алматы қаласын көрсету керек болсын. Бұл жағдайда негізгі анықтаманың Қала өрісінде тек 2 цифрын көрсетеміз, ал қала атауын кез келген уақытта Қалалар анықтамасынан key1 өрісі бойынша табуға болады. Бұл өріс бірегей (счетчик типті) болғандықтан мәселе туындамайды.

Осының бәрін жүзеге асыру үшін  Data Controls қалташасынан DBLookupComboBox компонентін қою керек. Енді DataSource қасиетінде өңделетін негізгі кестені көрсету керек (DataModule2.DataSource1), ал DataField қасиетінде редактрленетін Қала өрісін көрсету керек. DBLookupComboBox ашылатын тізім сияқты (ТcomboBox-ке ұқсас). Ашылатын тізім элементтері ретінде кесте мазмұнын көрсетуге болады. Ол үшін ListSource қасиетінде ашылатын тізімнің элементтері алынатын кестені көрсету керек. Яғни ListSource қасиетінде біз дайындаған Қалалар анықтамасын - DataModule2.TownSource көрсету керек. ListField қасиетінде осы кестенің Қала аты өрісін көрсетеміз. Бұл өріс ашылатын тізімді толтырады.  KeyField  қасиетінде мәні негізгі кестенің көрсетілген өрісіне енгізілетін өрісті (key1 өрісі) көрсетуіміз керек.

Сақтау батырмасының onclick оқиғасы үшін келесі кодты жазыңыз:

procedure TEditRecordForm.BitBtn1Click(Sender: TObject);

begin

if DataModule2.BookTable.Modified then

DataModule2.BookTable.Post;

EditRecordForm.Close;

end;

Бірінші жолда егер кесте өзгертілген болса (DataModule2.BookTable.Modified яғни True), онда өзгерісті сақтайды DataModule2.BookTable.Post.

Ал Қайтару батырмасының onclick оқиғасы үшін, тек бір жолдан тұратын код жазыңыз:

procedure TEditRecordForm.BitBtn2Click(Sender: TObject);

begin

DataModule2.BookTable.Cancel;

end;

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

DataModule2.BookTable.Insert;

EditRecordForm.ShowModal;

Мұнда бірінші жолда негізгі кестеге жаңа жол қосамыз, ал екінші жолда мәліметтерді редактрлеу терезесін бейнелейміз.

Осы мәзірдің Мәліметтерді өңдеу пункті үшін редактрлеу терезесін бейнелеу кодын ғана жазыңыз:

EditRecordForm.ShowModal;

Сонымен, программаны жүктеңіз. Жаңа мәлімет қосыңыз. Қала өрісінде анықтамалықтан қандайда бір мәнді таңдаңыз. Сақтау батырмасын басқаннан кейін терезе жабылады. Торға қараңыз. Жаңа жолдың Қала өрісінде біздің анықтамалығымыздан алынған қала кодын көресіз. Осы қала кодының мәнін 16-суреттегідей Access бағдарламасындағы ашылған кестеден салыстыр.

 

image

Осымен, зертханалық жұмыстың негізгі мақсаты аяқталды. Біз дайындалған Телефон анықтамасы мәліметтер қоры дайын десе де болады. Дегенмен әлі де жетілдіре түсейік.

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

procedure TForm1.N8Click(Sender: TObject);

begin

If Application.MessageBox(pchar('Сіз осындағы мәліметтерді өшіргіңіз келе ме?  '+#13+DataModule2.BookTableDSDesigner.AsString), 'Ескертпе!!!',MB_OKCANCEL)=id_OK then DataModule2.BookTable.Delete;

end;

Мұнда хабарламаны өзімізге таныс MessageBox функциясы арқылы шығарамыз. Бірінші параметрге (хабарлама мәтіні) ‘Сіз осындағы мәліметтерді өшіргіңіз келе ме?’ мәтінін көрсету және «+» таңбасы арқылы ерекшеленген жолдың Тегі өрісінің мәні - DataModule2.BookTableDSDesigner.AsString.

Осы DataModule2.BookTableDSDesigner.AsString жолының мағынасын түсіндіріп кетейік. Ол үшін DataModule-не өт, мұнда BookTable компонентіне тышқанды екі рет шерт. Бұл жерде негізгі Анықтама кестесінің тізімінен Аты деген өрісті таңдаңыз, оның Name деген қасиетінде осы өрістің аты біз жазған кодтағындай көрсетілген. Енді түсінсеңіздер мұнда бірінші модуль аты (DataModule2), екінші нүктеден кейін өріс аты (BookTableDSDesigner) және өріс мәнін  мәтін түрінді қайтаратын AsString әдісін қолданамыз.

Екінші жолда кестенің ағымдағы жолын өшіретін Delete  әдісін шақырамыз - DataModule2.BookTable.Delete.

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

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

DataModule2 модуліне өтіп, BookTable компонентін ерекшелейміз. Оның белсенділігін алып тастаңыз – Active қасиетінде False мәнін орнат. Енді осы компонентке екі рет шертсеңіз, алдыңызда өзіңізге таныс өрістер редакторы ашылады. Енді кесте жолдары үшін қаланың текстік атауынан тұратын жаңа өріс жасайық. Ол үшін, редактор терезесінің ішінде тышқанның оң жақ батырмасын шертіңіз және пайда болған мәзірден NewField пунктін таңдаңыз. Алдыңызда 17-суретте көрсетілгендей терезе ашылады.

 

image

Жаңа өрісті тек белсенді емес кестеге жасауға болады, сондықтан Active қасиетіне False мәнін орнаттық.

Осы терезенің өрістерін төмендегідей толырыңыз:

§  Name өрісіне Town деп жазыңыз;

§  Type өрісіне String – жол типін көрсетіңіз;

§  Field Type аумағында Lookup – іздеу өрістерін таңдаңыз;

§  Key Fields (кілттік өріс) тізімінен Қала өрісін таңдаңыз (бұл мән негізгі кестеден алынады, осы мән бойынша басқа кестеден мәтін іздеу керек);

§  DataSet тізімінде TownTable-ді көрсету керек – бұл іздеу жүргізілуге тиіс анықтамалық-кесте;

§  Lookup Keys тізімінде key1-ді көрсетіңіз – бұл іздеу жүргізілуге тиіс анықтамалық-кестедегі өріс;

§  Result Field тізімінде Қала атауы өрісін көрсетіңіз – бұл мәтіні алынатын өріс.

Енді Ok батырмасын басыңыз.

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

BookTable кестесін қайтадан белсендіріңіз. Енді программаны жүктеп көріңіз. Town өрісіне қараңыз, енді онда қаланың мәтіндік атауын көресіз (18-сурет).

Енді программа әлдеқайда әдемірек және қызықтырақ көрінеді. Дегенмен Қала өрісін көрінбейтіндей етіп, ал Town өрісінің атауын Қала деп өзгертейік.

 

image

Ол үшін BookTable компонентін екі рет шертіп, Қала өрісін ерекшелеңіз және Visible қасиетінің мәнін False мәніне өзгертіңіз. Енді Town өрісін ерекшелеп, DisplayLabel қасиетіне Қала деп жазыңыз.

 

Тапсырма:

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

Осы мәліметтер қорында тағы да Ұлты атауымен 6 кестеде (Ұлты  кестесі) көрсетілген құрылымға сәйкес жаңа кесте құр:

6 кесте

Өріс атуы

Типі

Сипаттама

Key1

Счетчик

Бұл кілттік өріс. Өріс өлшемі – Длинное целое. Индекстелген өріс – Да (қайталану болмауы керек).

Ұлты

 

Текстовый

Өріс өлшемі – 10 . Индекстелген өріс – Да (қайталану бола береді).

 

            Ұлты кестесін пайдаланып, осы студенттер жобасын нұсқаулықта көрсетілгендей жетілдір (жоғарыдағы нұсқауға қара):

§  Формаға жоғарғы мәзір қос;

§  Ұлты қосымша формасын дайында;

§  Мәліметтерді өңдеу формасын дайында;

§  Осы формалардың барлығын тиісті батырмалармен безендір;

§  Олардың арасындағы байланыстар нұсқаулықта көрсетілгендей орындалсын.

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

 

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

1.    Зертханалық жұмыста DBLookupComboBox компоненті не үшін қолданылды?

2.    Жаңа өріс енгізу терезесінің маңызын түсіндір және зертханалық жұмыста не үшін қолдандық?

3.    Lookup сөзі қандай мағына береді?

4.    Lookup Keys өрісіне нені көрсетуіміз керек?

5.    Result Field өрісіне нені көрсетуіміз керек?

 


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

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