1 зертханалық жұмыс(1 сағ) Тақырыбы: ms access ортасында алғашқы деректер қорын құру Мақсаты



бет2/2
Дата20.01.2020
өлшемі1.26 Mb.
#447843
1   2
ЛЖ-MS Access ортасында алғашқы деректер қорын құру


Максимальная длина поля(Өрістің максималды ұзындығы). Текстік өрістің ұзындығы 255 тен ұзын болмайды. Егер текст 255 тен ұзын болса, онда Memo компонентін қолдану керек болады.

  • Формат поля(Өріс форматы). Мұнда сіз деректердің сыртқы көрнісін көрсете аласыз. Мысалы, логикалық өрістер үшін Yes / NO немесе мерзім үшін – mm yyyy деп форматын қоюған болады.

  • Маска ввода(Енгізу маскасы). Деректерді өңдеу барысындағы өрістердің түр сипатына жауап беретін масканы осы жерде көрсетеміз. Егер Маска ввода жолындағы (...) көп нүкте батырмасын шертсеңіз, онда маска құру шебері ашылады.

  • Значение по умолчанию(Үнсіз келісім мағынасы). Егер қолданушы қандай да бір деректерді өріске енгізбеген болса,үнсіз келісім жағдайы қолданылады.

  • Обязательное поле(Міндетті өріс). Егерде қолданушы бұл өріске мағынасын көрсетпесе, онда қате хабарламасы шығады. Мұндай өрістер толтырылмай қалуы мүмкін емес.

  • Пустые строки(Бос жолдар). Бұнда да алдыңғы өрістегідей бос болмауы тиіс.

  • Индексированное поле(Индекстелген өріс). Негізгі индексте сәйкестік болмауы тиіс (ал басқада жағдайларда екі мағынаны қабылдауға рұқсат беріледі). Болуы мүмкін жағдайлар:

  • Неиндексированным(индекстелмеген);

  • Индексированным с допуском совпадений(сәйкестендірілуге рұқсат индекстелген);

  • Индексированным без допуском совпадений(сәйкестендірілуге рұқсат берілмей индекстелген);

  • Сжатие Юникод(Юникод сығу). Юникодқа сәйкес деректерді сығымдау.

    Ендігі кезекте алты өріс құрыңыз:



    • Өріс атауыKey1. Типсчетчик. Бұл кілттік өріс болады. Өріс өлшемі- Длинноецелое. Индекстелген өрісИә(сәйкестендірілуге рұқсат берілмей индекстелген).

    • Өріс атауыФамилия. Типтекстовый. Өріс өлшемі- 50. Индекстелген өрісИә(сәйкестендірілуге рұқсат индекстелген).

    • Өріс атауыИмя. Типтекстовый. Өріс өлшемі- 50. Индекстелген өрісИә(сәйкестендірілуге рұқсат индекстелген).

    • Өріс атауы Телефон. Типтекстовый. Өріс өлшемі - 10. Индекстелген өрісИә(сәйкестендірілуге рұқсат индекстелген).

    • Өріс атауыemail. Типтекстовый. Өріс өлшемі- 20. Индекстелген өрісИә(сәйкестендірілуге рұқсат индекстелген).

    • Өріс атауыГород. Типчисловой. Өріс өлшемі- Длинное целое. Индекстелген өрісНет.


    Ескертпе: Бұл жерде город(қала) өрісі неге текстовый емес? деген сұрақ туындауы мүмкін. Әзірше мұндай таңдау жасалынғандығын түсіндіруді кейінге қалдырамыз. Неге город өрісінің типін числовой етіп таңдауымызды кейінірек байқайтын боламыз.

    Бұдан өзге, барлық өрістердің Обязательное поле қасиетінде Нет таңдалынған және Пустые строки қасиетінде Да таңдалынған. Егер сіз өріс қасиетін обязательное поле етіп таңдасаңыз, онда осы өрістің барлық жолдарын сәйкесінше толтырып шығуыңыз керек. Егер сіз бос жолдарды(пустые строки) пайдалануға шектеу қойсаңыз(значение Нет), онда көрсетілген өрісте міндетті түрде дерек енгізілуі керек, әйтпесе қате деген хабарлама шығарылады. Шынайы жағдайда өрісте міндетті түрде дерек енгізілуі тиіс болса, онда өрісті міндетті етіп таңдаңыз. Деректер қорының пайдаланушысына арқа сүйеп, оның ұқыптылығына сеніп қалуға болмайды, себебі олар көп жағдайда сенімді ақтамайды(подводят вас). Оданда сіз үшін деректер қоры, деректердің дұрыстығын тексеріп отырғандығы жөн болады.

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

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

    Енді кестені сақтап жабуға болады. Кестені сақтайсызба? деген сұраққа Иә деп жауап беріп және оның атауы Справочникболуы керек.

    Біздің алғашқы деректер қорымыз дайын. Құрылған деректер қорындағы кестемен алғашқы мысалды қарастыру үшін, келесі бөлімге өтуімізге болады.
    2 зертханалық жұмыс(1 сағ)

    Тақырыбы: Деректер қорымен жұмыс

    Мақсаты: Деректер қорымен Delphi ортасын байланыстыруды үйрену

    Қажетті құралдар мен материалдар: ДК, Delphi интегралдық ортасы, МҚБЖ MS Access.

    Мазмұны мен жұмысты орындау реті

    I. Теориялық мағлұматты қайталау;

    II. Өз бетінше тапсырманы орындау және нәтижесін талдау;

    III. Зертханалық жұмысты тапсыру.


    MSAccess тегі деректер қорымен жұмыс жасайтын бағдарламаны құрастырамыз. Жоғарыда айтылғандай, мұндай жағдай үшін ADOтехнологиясын пайдаланған дұрыс болады. Ендеше деректер қорымен жұмысқа арналған бірінші бағдарламамызды жасауға кірісейік.

    Жаңадан жоба(проект) құрайық. Формаға ADO палитрасынан ADOConnection компонентін орналастырыңыз. ConnectionString қасиеті арқылы, сервермен байланыс орнатамыз. Ол үшін обьект инспекторы терезесіндегі ConnectionString жолына барып екі рет шертуге(немесе компоненттің өзіне барып екі рет шертуге) болады. Төмендегідей терезе ашылады.



    Сурет-3

    Бұл жерде біздің алдымызда екі таңдау болады, олар:

    Арнайы файлды таңдау(Use Data Link File);

    Қосылу жолын таңдау(Use Connection String);

    Екінші жағдай тиімдісі деп ұйғарып, деректер қорына осы бағытпен қосылуды ұйымдастырамыз. Локалды жағдайда қосылуды қолмен ұйымдастыруға болады, бірақта мұндай қадамға бармаған жөн, себебі оңай қателесіп кету мүмкін. Шебердің қызметін пайдалану ең қарапайым қадам болып есептелінеді. Шебердің қызметін іске қосу үшін Build батырмасын шертеміз. Алдымыздан келесі терезе ашылады. Сурет

    Поставщик данных(Provider) вкладкасында барлық қол жетімді ADOдрайверлері көрсетілген. Егерде қандайда бір драйвер жоқ болып шықса, онда үнсіз келісім бойынша таңдап алынған Microsoft OLE DB Provider for ODBC Driversді таңдауға болады. Бұл драйвер деректер қорына ODBC драйвері арқылы байланыс орнатуға мүмкіндік туғызады, ал мұны барлықдеректер қорының көпшілігіне жатқызуға болады. Ескере кететін жағдай, аталған драйвер компьютеріңізде орнатылмаған болуы мүмкін. Мұндайда жағдайлар болып тұрады.

    Біздің жағдайымызда MS Access тегі деректер қорымен байланыс орнату үшін Microsoft Jet 4.0 OLE DB Providerдрайвер пайдаланылады. Мұндай драйвер компьютерге MS Officeофистік бағдарламалар пакетімен бірге орнатылады, ал Windows тың соңғы нұсқаларында ол үнсіз келісім бойынша орнатылады.

    Кей жағдайларда драйверлердің екі нұсқасы орнатылуы мүмкін, сол себепті біздер Microsoft Jet 4.0 OLE DB Providerді таңдаймыз. Осыдан кейін Далее(Next)немесе Подключение(Connection) вкладкасына көшіңіз.

    Подключение вкладкасының түрі таңдаған драйверге байланысты. Біздің жағдайымызда суреттегідей. Сурет

    Біріші болып, Выберите или введите имя базы данных (Select or enter a database name) жолына деректер қорының атын енгізу керек (қажетіне орай жолды да енгізу керек). Ал егер деректер қоры бағдарламамен бірге бір папкада орналасқан болса, жолды көрсету міндетті емес.


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

    • Пользователь(User name).MS Access те құрылған деректер қорында басқа мән берілмесе, онда үнсіз келісім бойынша қалдыра беріге болады.

    • Пароль(Password). Егерде құпия сөздеректер қорында болса, онда міндетті түрде көрсету керек.

    • Пустой пароль(Blank password). Егерде құпия сөз керек болмаса, онда осы жерде жалаушаны(поставить флажок) белгілеп қою керек.

    • Разрешить сохранение пароля(Allowsavingpassword). Егерде осы жерде жалауша белгісін белгілеп қойсақ, онда құпия сөз енгізгенде сақталып қалуы мүмкін. Ал егерде, жалауша белгісін белгілемесек онда, бағдарламаны әрбір қосқан сайын құпия сөзді енгізуді талап етіледі.

    Деректер қорына байланысты анықтау үшін тестілеу мақсатында, деректер қорын таңдап болған соң, проверить подключение(Test Connection) батырмасын шертеміз. Егерде барлығы дұрыс қосылған болса, Test connection succeeded (байланысуды тестілеу сәтті өтті) хабарламасы шығады. Енді Ок батырмасын басқан соң, байланысу жолын құрушы терезесі жабылады. Осыдан кейін, Ок батырмасын шерткен соң, байланысу жолының редакторы терезесі жабылады.сурет

    Жұмысымызды одан әрі жалғастырамыз. Ендігі кезекте ADOConnection компонентінің LoginPrompt қасиетін false етіп өзгертеміз. Себебі, деректер қорына қосылған сайын, құпия сөзді енгізу терезесі шақырылмауы үшін қажет, тіпті біздер құпия сөз қойған жоқпыз соны ескерген жөн болар. Келесі қадам деректер қорымен байланыс орнауы үшін Connected қасиетіне true мәнін қоямыз.

    Осымен деректер қорына байланыс орнатылды. Ендігі кезекте Справочник кестесіне байланыс орнату керек. Ол үшін формаға ADOTable компонентін ADO вкладкасынан алып орналастыру керек. Name қасиетін BookTable атауымен өзгертіңіз.

    Бұл компоненттеде ConnectionString қасиеті бар оныда баптауға болады. Неге болады? Себебі, мұндай іс-әрекетті жасамау үшін ADOConnection компонентін формаға орналастырған болатынбыз. BookTable компонентінің Connection қасиетіне деректер қорымен байланысуға құрылған компоненттімізді көрсетуге болады. Connection қасиетінің төгілмелі тізімін шертіп және ол жердегі жалғыз ADOConnection1 пунктін таңдаңыз. Енді ConnectionString қасиетін толтырмауға болады.



    TableName қасиетінде біздің кестеміз таңдалыну тиіс (Справочник). Кесте және байланыс көрсетілді, байланысты орнатуға болады. Ол үшін Active қасиетінің мәнін true етіп өзгертеміз.

    Кестедегі деректерді бейнелеу үшін DataAccess вкладкасындағы DataSource компонентін формаға орналастырамыз. Енді бұл компонентке қай кестені бейнелейтіндігін анықтауымыз керек. Ол үшін DataSetқасиетіне BookTable компонентін таңдауымыз қажет, яғни Справочник кестесімен байланысқан.

    Міне барлық дайын жұмыстары бітті, ендігі кезекте шынайы кестені бейнелеуге болады. Кестені бейнелеудің ең қарапайым жолы ол формаға DBGridкомпонентін орналастыру. Бұл компонент тор секілді және мұның көмегімен кестені бейнелей аламыз. Осы компонентте кестенің жолдарына деректерді жаңадан енгізе де, өшіре де, сонымен қатар өңдейде аламыз.

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

    Міне бағдарлама дайын сурет. Байқасаңыз ешқандайда код жазбай-ақ бағдарламаны жасап шықтық. Жұмыс барысында Delphi ортасыдқ-ын бағдарламалауды қаншалықты қысқартып отырғандығын байқайсыз, тіпті бағдарламалаудыда қажет етпейді.

    Осы мысалды іске қосып көріңіз, жаңадан бірнеше жол қосыңыз, оларды өңдеп көріңіз және бірнешеуін өшіріңіз. Жаңдан жол қосу үшін <Ins>батырмасы, ал өшіру үшін <Ctrl>+<Del>батырмалар комбинациясы.

    Енді қысқаша қорытынды жасап көрсек, формаға қандай компоненттерді орналастырдық және олардың атқаратын қызметі.


    • TADOConnection – компоненті дқ-мен байланыс орнатуға мүмкіндіктер туғызады. Байланыстың арқасында деректермен жұмыс жасайтын TADOTable немесеTADOQuery компоненттері жұмыс жасай алады.

    • TADOTable – компоненті дқ-дағы кестелермен жұмыс функциясын қамтамасыз етеді. Сіз бұл деректерді көре аласыз, оқи аласыз және тіпті өңдей аласыз.

    • TDataSource– бұл компонент TADOTable компонентімен немесе TADOQuery компонентімен байланыс орнатады және VCL компоненттерінің көмегімен кестенің деректері формада бейнеленуі керек кезінде де қолданылады. Визуалды компоненттермен деректердің арасындағы делдалдық қызметті атқарушы. Біздің жағдайымызда справочник кестесімен ТDBGrid компоненттерінің арасындағы байланыс.

    3 зертханалық жұмыс(1 сағ)



    Тақырыбы: TADOTable компонентінің қасиеті

    Мақсаты: Delphi-де кесте компоненттінің қызметімен қасиеттерін үйрену.

    Қажетті құралдар мен материалдар: ДК, Delphi интегралдық ортасы, МҚБЖ MS Access.

    Мазмұны мен жұмысты орындау реті

    I. Теориялық мағлұматты қайталау;

    II. Өз бетінше тапсырманы орындау және нәтижесін талдау;

    III. Зертханалық жұмысты тапсыру.


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

    • MasterSource – бұл қасиетте пайдаланып отырған кестеге қатысты басты кестені анықтайды. Байланысқан кестелерді қарастырған кезде, осы қасиетке толығырақ тоқталамыз.

    • ReaddyOnly – егерде осы қасиеттің мәні true болса, онда кестенің деректерін өңдеуге болмайды. Бұл жағдайда кесте тек қана формада бейнеледі. Қолданушы деректерді өзгертуге болмайтын кестелерге осы қасиетті пайдаланыңыз

    • TableDirect – бұл қасиетте кестеге байланыс қалай орнатылатындығы көрсетіледі. Егерде trueмәні қойылған болса, онда кестеге тікелей байланыс орнатылады. Ал егерде falseмәні таңдалынып қойылса, онда деректер қорына байқалмай арнайы SQL сұранысы жасалынады. Кез келген дқ тікелей байланыс жасап, жұмыс жасай алмайды, сондықтанда үнсіз келісім бойынша falseмәні таңдалынып қойылады.

    • TableName – өңдеу жүргізгіміз келетін кестенің атауы.

    • CacheSize –кеш жадының өлшемі. Егерде осы жерге 50 мәнін қоятын болсақ, онда дқ-на алғаш қосылғанда компонент алғашқы орналасқан 50 жолды локалды жадыға орналастырады және мұндай таңдау дқ-ның жұмысын әлде қайда жылдамдатады. Ал қалған жазбалар серверден қажетінше жүктелініп отырады.

    • CommandTimeOut – команданың орындалуын күту уақыты. Компонент дқ-на команда бергеннен кейін, ол таймерді іске қосады, берілген уақыттың соңына жеткен соң(егерде команда орындалмаса) қате туралы хабарлама шығады.

    • Connection – бұл жерге байланыс орнатушы TADOConnection компоненті көрсетіледі.

    • ConnectionString – дқ-на байланыс орнатушы жол.

    • CursorLocation –деректерді оқып және кестедеорналасқан позициясыны көрсететін меңзер(курсор). Меңзер серверде немесе клиенттің машинасында орналасқан болуы мүмкін.

    • CursorType –меңзердің типі. Меңзер мынадай типтергебөлінеді, олар төмендегідей:

        • ctUnspecified – меңзердің орналасқан жері көрсетілмейді;

        • ctOpenForwardOnly – меңзер тек қана алға қарай жылжый алады;

        • ctKeyset – бір қолданушымен енгізілген өзгерту және осы кестеге қосылған өзге қолданушыларға енгізілген өзгеріс көрінбейді.


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


    • CtDinamic – Динамикалық менгер, яғни бір қолданушыда болған өзгерісті басқалары көріп отырады.

    • CtStatic – статикалық меңгер, яғни бір қолданушыда болған өзгерісті, басқалары көрмейді.


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


    • Filter – фильтр жолы

    • Filtered – кесте фильтрленетін болып табылама соны анықтайды. Егерде мұнда false мәні таңдалынса, онда фильтр (filter) жолын мойындамайды.

    • IndexFieldNames – индекстелген бағанның атауы. Индекс деректерді сорттау және кестелер арасындағы байланысты ұйымдастыруға қолданылады.

    • RecNo – белгіленген ағымдағы жолдың нөмері.

    • RecordCount – кестедегі жолдар саны.

    • Sort – сорттаудың типі корсетілген жол. Мысалы: Телефон өрісі бойынша сорттауды ұйымдастыру үшін мынадай код жазылуы тиіс: ADOQuery1.Sort:'Телефон Asc'. Asc оператор деректерді өсу реттілігімен сорттайды, ал осы операторға қарсы Desc операторы бар, оның кызметі деректерді кему реттілігімен сорттайды.

    • Active – егерде осы қасиетте true мәні тандалынса, онда кесте ашық болады (пайдалануға).

    • AggFields – мұнда барлық агрегатты өрістер сақталынады.

    • AutoCalcFields – егер мұнда true болса, онда өрістерді автоматты түрде қайта санау керек.

    • Bof – бұл қасиетіне әсер етпегеніміз абзал, ал егерде true мәнін қоятын болсақ, онда біздер файлдың басында боламыз.

    • FieldСount – мұнда кестедегі барлық өрістер саны сақталынады.

    • Fields – осы өріс арқылы басқада өрістердің мәндеріне қол жеткізуге болады. Мысалы: төртінші өрісте қандай мән сақталынғандығын анықтау керек. Ол үшін Table.Filds.Filds[4].AsString – деп жазу керек. AsString әдісі алынған мәнді жазбаға айналдырады.

    • FieldValues – осы қызметтің көмегімен көрсетілген өрістің кез-келген мәніне оңай қол жеткізуге болады. Өрістің атын тік жақша ішінде көрсету керек. Мысалы, TableFieldValues [‘Телефон’]: ='3346598';

    • FielterOption – фильтрдің баптаулары. Бұл жерде төмендегі мәндердің біреуін таңдауға болады.

    • FoCaseInsensitive – фильтр регистрге сезімтал болмайды.

    • foNoPartialCompare – егерде осы мән таңдалынса, онда фильтрге берілген мәнмен ұқсасы ғана салыстырылынады, яғни фильтр регистрге сезімтал.


    Ескертпе: Егерде foNoPartialCompare мәні таңдалынатын болса, онда фильтрге, фильтрлеуге бернілген мәнге ұқсас бірақ нақты сәйкес копиясы емес жолдар келіп түседі. Мысалы: фильтрге «са» деген сөзді көрсет десек, онда «са» – әріптері бар барлық сөздер фильтрге түседі(самолет, самокот).


    • Modified – егерде осы қасиет true мәніне тең болса, онда кестеге өзгертулер жүргізілген.

    • RecNo – қандай жол белгілендігін анықтайды.

    • RecordCount – кестедегі жолдар саны.

    4 зертханалық жұмыс(1 сағ)



    Тақырыбы: TADOTable компонентінің әдісі

    Мақсаты: Delphi-де кесте компоненттінің қызметімен әдістерін үйрену.

    Қажетті құралдар мен материалдар: ДК, Delphi интегралдық ортасы, МҚБЖ MS Access.

    Мазмұны мен жұмысты орындау реті

    I. Теориялық мағлұматты қайталау;

    II. Өз бетінше тапсырманы орындау және нәтижесін талдау;

    III. Зертханалық жұмысты тапсыру.


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

    • BookmarkValid – бұл әдіс закладкалардың дұрыстығын тексереді. Оның жалғыз параметрі бар және ол Tbookmark, егер ол іске жарамды болса, онда нәтижесі true болады.

    • CancelUpdates – кеш жадында сақталып тұрған жаңаруды (обновление) болдырмау.

    • Comparebookmarks – екі вкладканы салыстыру. Әдістің Tbookmark типіндей екі параметрі бар. Осы екі вкладкалар салыстырылады. Егер екі вкладка теңесетін болса, онда нәтиже нөлге тең. Егер біріншісі кіші болатын болса, екіншісінен онда нәтиже – 1 болады. Ал егер екіншісі кіші болса біріншісінен, онда нәтиже 1-ге теңеседі.

    • DeleteRecords – жазбаларды өшіру. Әдістің қандай жазбаны өшіретіндігін анықтайтын бір ғана параметрі бар. Оның төмендегідей мәндерін таңдауызға болады.

    • ArCurrent – тек қана ағымдағы жазбаны өшіру;

    • ArFiltered – фильтірді қанағаттандыратын жазбаларды өшіру;

    • ArAU – жазбалардың барлығын өшіру;

    • arAUChaptersАDО бөлімдегі барлық жазбаларды өшіру;

    • Append – кестесінің соңына жаңадан жазба қосу;

    • Cancel – ағымдағы жолда болған өзгерісті болдырмау, егерде өзгерту Post әдісімен сақталынбаған болса.

    • Close – кестені жабу.

    • Delete – ағымдағы сөзді өшіру.

    • Edit – өңдеу режиміне көшу. Осыдан кейін өрістің мәнін өзгертуге болады.

    • FieldByName – аты бойынша өрісті табу. Жалғыз мән ретінде өрістің атын жазба түрінде көрсету керек және нәтижесінде TField объектісі ретінде өріске сілтеме аламыз.

    • First –кестенің бірінші жолына өту.

    • Insert – кестеге жаңадан жол қосу.

    • IsEmpty – егерде әдіс true мәнін қайтарса, онда кестеде жазба жоқ.

    • Last – кестенің соңғы жазбасына өту.

    • Next – келесі жазбаға өту.

    • Post – барлық өзгерістерді қабылдау.

    • Prior – кестенің алдыңғы жазбасына өту.

    • Refresh – деректер туралы ақпаратты жаңарту.

    • UpdateRecord – ағымдағы жазбаны жаңарту.

    5 зертханалық жұмыс(1 сағ)



    Тақырыбы: Деректерді бейнелеуді басқару

    Мақсаты:Delphi-де деректер қорының кестелерін бейнелеуге арналған компоненттермен жұмыс жасап үйрену.

    Қажетті құралдар мен материалдар: ДК, Delphi интегралдық ортасы, МҚБЖ MS Access.

    Мазмұны мен жұмысты орындау реті

    I. Теориялық мағлұматты қайталау;

    II. Өз бетінше тапсырманы орындау және нәтижесін талдау;

    III. Зертханалық жұмысты тапсыру.


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

    Қолдаушыға керек емес өрістерді жасыру және қажеттерін ғана бейнелеу сонымен қатар біз қалаған түрде болуы үшін, деректерді бейнелеуді басқарып үйренуіміз керек. Бұл сұраққа кіріспестен бұрын Дата және Мобильник атты өрістерді декертер қорына жаңадан енгізейік. Деректер қорын Аccess-те жүктеңіз және Справчник кестесін конструктор режимінде ашыңыз. Келесі қадамдар орындаңыз:

    1)Дата атты өріс енгізіңіз және типі-Дата/время;

    2)Мобильник атты өріс енгізіңіз және типі-Логический. Егер жолда мобильді телефон болса онда true мәнін қоямыз, ал керсінше жағдайда false қоямыз;

    3)Кестені жабыңыз;

    Егерде МDB - файл қолданылып жатса(программада ашылып тұрса, немесе Delphi-мен байланыс орнатылған болса) құрылымын өзгертуге болмайды. Егерде есеп мысалы кезінде кесте Delphi ортасында ашылып тұрса, онда кестенің кұрлымын өзерте алмайсыз.

    Ендігі кезекте Delphi-ге көшейік және дайын тұрған мысалға өзгерістер енгізейік.

    Алдымен декертер қорына байланысу компоненттерін бөлек арнайы терезеге көшірейік. АDОCоnnection1, DataSource1, BookTable компоненттерін белгілеңіз, меню қатарынан Edit | Cut командасын орындаңыз яғни бұл кезде осы компоненттер формадан жоғалтып алмасу буферінде көшіріледі.



    File | New | Dаta Module командасын орындаңыз. Мұнымен сіздер декертер қорына байланысу компоненттерін сақтауға арналған ыңғайлы Dаta Module терезесін құрасыз.

    Менюден Edit | Paste командасын орындаңыз, яғни қиылып алынған компоненттерді Dаta Module-ге орналастырыңыз. Компоненттерді қажеттілігіне орналастыруға болады.

    Енді ыңғайлы болу үшін декертер қорына байланыс орнатуға арналған компоненттердің барлығын осы терезеге орналастырыңыз. Жаңа модулді (Unit-ті) DataModuleUnit атымен сақтаңыз. Ол үшін модуль терезесін ашып тұрып, яғни код жазу терезесі File | Save As командасын орындаңыз және атын DateModuleUnit деп сақтаңыз.

    Жоба менеджерін ашып алыңыз, егерде ашылмаған болса, жоба менджерін (Project Manager, View вкладкасында) жұмыс жасау ыңғайлы. Жұмыс барысында формалар мен модульдерге көшуді ұйымдастыру барысында таптырмас құрал. Жоба менеджерінен керекті форманы немесе модульді ашу үшін үстіне барып 2-рет шертуіңізге болады.

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

    Қажетті компоненттердің ешқайда жоғалып кетпегендігін түсіндіру үшін модульдің uses болігіне DateModuleUnit деп жазуымыз керек. Оны қолмен жасауға болады немесе осы ұйымдастырудың келесі бір нұсқасы File | Use Unit (осы сәтте басты терезе белгіленуі керек, себебі біздер жаңа модульді басты терезеге қосып жатырмыз). Пайда болған терезеден қажетті модульдің аты таңдалынады және ол - DateModuleUnit, болғасын Ок батырмасын шертіңіз. Тексеруді ұмытпаңыз код редакторында Implementation кілттік сөзінен кейін Uses DateModuleUnit жазбасы пайда болуы тиіс.



    DBGrid1 белгілеп алып және DataSourse қасиетіне DataSource1 мәнін қоямыз, яғни деректер тор көздің ішінде бейнеленеуі үшін(DataModule1, DataSource1).

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

    Әзірше терезе бос күйінде. Бұл бос күйді, яғни деректер қорының барлық өрістерін толтыру керек. Осы терезеге барып тышқанның оң жақ батырмасын шертіп Add All Field (барлық өрісті қосу) бөлімін таңдаймыз. Терезе өрістердің атауымен автоматты түрде толтырылады.

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

    Сонымен қатар жеке өрістерді де белгілей аласыз және объект инспектрінде олардың қасиеттерін өзгерте аласыз. Өрістердің қасиеттері әртүрлі болуы мүмкін, себебі өрістердің типтеріне байланысты.

    Деректер қорын құрастыруды жалғастырамыз. Бірінші жасау керек, счетчикті (Кеу өрісін) көзге көрінуден алып тастау керек. Біздер келіскен болатынбыз, қолданушыға керек емес және бұл өрісті қолданушы көрмеуі керек. Объект инспектрі терезесінен белгілеп алып, Visible қасиетін false етіп өзгертеміз. Осыдан кейін бағдарламаны жүктейміз және Кеу1 өрісінің көзден ғайып болғандығына көз жеткіземіз.

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

    Бағандардың еніне жауап беретін DisplayWidth қасиеті (бұл қасиет барлық бағанда болады) мұнда үнсіз келісім бойынша баған енінің физикалық өлшемі көрсетіледі, бірақта біздер 15 мәнін көрсетеміз. Қайталап айтатын болсақ, деректер қорында бағанның ұзындығына 50 символ берілген және бұл өлшемге еш әсер етпейді, бірақта бізге көрінетін бағанның өлшемі 15-ге теңеседі. Дәл осылай «Имя» яғни кісі атының бағанында 15-ке кішірейтеміз.



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

    • Alignment – тор көз ішінде бейнелеуді тегістеу.

    • AsBoolean – ағымдағы өріс мәнін бульдік (логикалық) мәнге айналдырып қайтарады.

    • AsCurrency – өрістің мәнін Currency (ақша мәнін сақтайтын тип) типіне айналдырып қайтарады.

    • AsDataTime – өріс мәнін мерзім және уақыт түріне айналдырып қайтарады.

    • Asfloat – өзістің мәнін нақтыт типке айналдырып қайтарады.

    • AsInteger – өзістің мәнін бүтін типке айналдырып қайтарады.

    • AsString – болған мәнін жазба түрінде қайтарады.

    • AsVariant – өзістің мәнін Variant әмбебап типіне айналдырып қайтарады.

    • Value – өріс мәндерін деректер қорында берілген мәнге сәйкес немесе ұқсас типке айналдырады. Деректер қорларында айырмашылықтар болуы мүмкін, мысалы, берілген деректер қорында Number типінде сипатталуы мүмкін, ал Delphi ортасында дәл осындай типі жоқ, нәтижесінде Double типіне айналдыру.

    • CanModify – өрісті өңдеуге болатындығын анықтайды.

    • CurValue – өзге қолданушымен енгізілген өңдеуді де қоса, ағымдағы өрістің мәнін бейнелейді.

    • DataSet DataSet деректер жиыны кіретін өріс.

    • DataSize – сақтауға арналған деректер қорындағы белгіленген деректердің өлшемі.

    • DisplayLabel – торға арналған өрістің тақырыбы.

    • DisplayWidth – торды бейнелеудегім өрістің ені.

    • EditMask – өрістің мәнін өңдеуде қолданылатын маска.

    • FieldNo – кестедегі немесе сұраныс нәтижесіндегі өріс номері\индексі, егер TAdoTable деректер жиыны болса,

    • Index – бейнелеудегі өріс номері\индексі.

    • IsNull – eгер өрістің мәні нөл болса true деп қайтарады.

    • IsIndexField – eгер өріс индекстелген болса, деп қайтарады.

    • LookupDataset – iздеу (іздестіру өрісі) яғни іздестіру жұмысы өзге кесте жүргізіледі.

    • NewValue – өзгертілген мән, бірақ әлі деректер қорында сақталмаған;

    • OldValue – өзгерту енгізуге дейінгі көне мән, яғни деректер қорынан оқылғанды айтамыз;

    • DefaultExpression – бұл жерде мәнді үнсіз келісім бойынша қалдыруға болады. Алдағы уақытта жаңадан жолдар құрыла бастағанда, осында көрсетілген мәндер өрістерге бірден енгізіле бастайды.

    • MaxValue – максималды рұқсат етілген мән. Егер де бұл өріс сандық болса, және ол белгілі бір шектеулер бойынша өзгеруі тиіс (мысалы, 0-ден 100-ге дейін), қолданушы түзетулерін енгізуді қысқарту мақсатында, шектеуді осы жерде көрсеткен абзал. Барлық адамдар қателіктер жіберуге бейім, ал ендеше бағдарлама осындай қателік кетулерді автоматты түрде қысқартады.

    • MinValue – минималды рұқсат етілген мән.

    • ReadOnly – тек қана оқуға арналған өріс. Егерде қандайда бір өріс өзгермеуі үшін, ReadOnly қасиетіне true мәнін қоямыз. Осы жағдайда қолданушы тарапынан байқаусызда енгізіліп кетуі мүмкін өзгерістерден бағдарламаны сақтандырасыз.

    • Required – егер мұнда true мәні болса, онда өріс міндетті болып табылады және міндетті түрде бір мәнге ие болуы керек. Егер қолданушы ештеңе көрсетпесе, онда бағдарлама қате туралы хабарлайды. Белгілі бір өріс есептеу жүргізуге қатысты дейік. Егер осы өрісте мән болмай шықса, онда бағдарлама қатып қалуы мүмкін. Осы есепті шығарудың екі жолы бар. Бірінші жолы - есептеу барысында өрісте мәннің барлығын анықтау немесе талап ету, яғни қолданушының мәнде енгізуді талап ету. Екінші жол қолайлы, егер осы өріс мағызды болса. Бұл жағдайда телефон анықтамасында телефон нөмірлерінің жазбалары жоқ деп ойлаңыз. Бұл жазба неге керек деп сұралынады, егер телефон көрсетілмесе. Осылайша телефон нөмірі өрісін міндетті етуге болады.

    • Tag – өзіннің қажетіне қарай қолдануға арналған жай сандық өріс.

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

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

    Бағдарламаны іске қосыңыз және Дата өрісінің барлық жолдарын кез келген мәнмен толтырыңыз. Толтыру барысында сақ болыңыз және шынайы мерзімді қойыңыз. Егер сіз тиісті емес мәнді енгізсеңіз, бағдарлама қате туралы хабарлама шығарады.
    Назар аударыңыз. Мәнді енгізу барысында сандардың айырғыштарына (разделитель чисел) мән беріңіз. Орыс тіліне арналған Windows операциялық жүйелерінің көбінде сандардың айырғышы ретінде нүкте немесе қисық сызықша (/) таңбасы пайдаланылады. Осы орайда бірінші күн, сосын ай және содан кейін жыл (ал ағылшын нұсқасында бірінші болып ай жүруі мүмкін). Бос орын (пробел) қоюға қатаң тыйым салынады. Бұл реттілік және сандарды айырғыш операциялық жүйенің баптауында (в настройках ОС) бапталынады. Басқару панеліне кіріңіз және Тіл жіне стандарттар терезесін іске қосыңыз. Сурет Осы жерде сіз мерзім, уақыт және сандардың барлық баптауларын өзгерте аласыз.
    Delphi-ге ораламыз. Дата өрісін ерекшелеңіз. Бұл жерге қандай мерзімді енгіземіз соны анықтауымыз керек. Бұл телефон анықтамасы болғандықтан, осы жерге телефон иесінің туылған мерзімін көрсетеміз. Сондықтанда өрістің тақырында Дата (Мерзім)емес, Дата рождения (Туылған мерзімі) атауының болғаны өте орынды және солай етіп өзгертейік. Ол үшін екі әдіс қолдануға болады:


    • Деректер қорындағы өріс атауын өзгертуге болады(толығымен ақылға қонымды емес)

    • Delphi-де өріс атауына қажетті тексті шығаруға мәжбірлеу

    Өрістің тақырыбына жауапты DisplayLabel (бұл қасиет барлық өрістерде бар). Ал ендеше, осы тақырыпшаға "Дата рождения" текстін шығарайық. Өріс тақырыбында берілген атау шыққандығын тексеріп көруіңізге болады.

    Енді мерзімді бейнелеуді баптайық. Ол үшін жауапты DisplayFormat қасиеті жауапты. Бұл жерде мерзімді бейнелеуге арналған тексттік форматты көрсетуге болады. Қалай бейнелейміз? Көптеген бағдарламалаушылар толық бейнелеу форматын қолданады ал ол – "dddddd".

    Ал енді соңынан мерзімді енгізудің маскасын анықтауымыз керек. Оны EditMask қасиетінде көрсетеміз, сондай-ақ TMaskEdit компонентінде жасағанымыздай.

    Кеңес. Мерзім үшін – 99/99/9999 енгізу маскасын қолданған абзал.

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

    Соңынан қалғаны ол мобильник өрісін өңдеу жұмысы. Әзірше мұнда true және false мәндері таңдалынып тұр. Ал біздер осы ағылшын сөздерінің орысша баламасына, яғни Да және Нет сөздеріне ауыстырамыз. Осы өрісті белгілеңіз, обьект инспехторы терезесінен DisplayValues қасиетін тауып алыңыз. Бульдік(логикалық ) өрістер үшін true, false форматындағы екі мән көрсетілуі керек, яғни бірінші жағымды мән жазылып сосын нүктелі үтірден кейін жағымсыз мән жазылады. Іс жүзінде былай- Да; Нет.

    Енді мобильник өрісінде Да және Нет мәні көрінеді, өрісті өңдеуде де осы мәндер мен жұмыс жасайтын боламыз.


    6 зертханалық жұмыс(1 сағ)

    Тақырыбы: Іздестіру өрістері

    Мақсаты:Деректер қорына жаңадан деректерді қосуды, өңдеу және деректерді өшіруді үйрену.

    Қажетті құралдар мен материалдар: ДК, Delphi интегралдық ортасы, МҚБЖ MS Access.

    Мазмұны мен жұмысты орындау реті

    I. Теориялық мағлұматты қайталау;

    II. Өз бетінше тапсырманы орындау және нәтижесін талдау;

    III. Зертханалық жұмысты тапсыру.


    Сандық типке жататын, қалалар туралы ақпаратын сақтай алмайтын, Город өрісін толығырақ қарастыратын уақыт жетті. Алдымен жеке дара кесте құрамыз және оның өрістері:

    • Key1 – счетчик(кілттік өріс)

    • Название города – 30 символдан тұратын текстік өріс.

    Access- тегі кестенің құрылымын мына суреттен көруге болады. Кестені Справочник городов атымен сақтаңыз. Енді деректер қоры екі кестеден тұрады:

    • Справочник;

    • Справочник городов;

    Алдыңғы бөлімдерде жасаған жобамызды және DataModuleUnit-ті ашайық. Жаңадан кампонентерді қосыңыз. Олар DataSource(TownSource деп атаймыз) және ADOTable(біз оны TownTable деп атаймыз). Осыдан кейін TownSource компонентінің DataSet қасиетінде TownTable кестесін көрсетеміз. Справочник городов кестесін бейнелеу үшін, TownTable-ді баптаймыз. Ол үшін:

    • Connection қасиетінде ADOConnection1 компонентін көрсетіңіз, яғни бұл компонент біздің деректер қорымызға байланысты орнатушытушы;

    • TableName қасиетінде Справочник городов кестесін көрсетіңіз;

    • Кестені іске қосу үшін немесе ашу үшін Active қасиетіне true мәнін қойыңыз;

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

    Енді анықтаманы (справочника) өңдеуге арналған жаңа форма құрыңыз және модулін (Unit-ті айтып отырмыз) TownBookUnit атымен сақтаңыз. Ал форманы TownBookUnit атымен сақтаймыз.

    Деректер қорымен жұмыс жасаушы компоненттерге байланысу үшін жаңа формаға DataModuleUnit модулін іске қосыңыз. Ол үшін меню қатарынан File бөлімін таңдаңыз және осының ішінен UseUnit (модульді қолдану) тандап алыңыз. Ал ашылған терезеден DataModuleUnit модулін тандаңыз және Ok батырмасын басыңыз.

    Формаға DBGrid тор көз компонентін орналастырыңыз және DataSource қасиетіне Справочник городовDataModule1 кестесін таңдап қойыңыз. Әдемілеп әрлеп болғасын Ok батырмасын шертіңіз. Телефон анықтамасын өңдеуші терезесін суреттен көруіңізге болады. Әсемдік үшін формаға үш батырма қосамыз. Олар Добавить, Сохранить және Удалить батырмалары.

    Добавить батырмасының Onclick оқиғасы үшін төмендегі кодты жазамыз:

    procedure TTownBookForm. AddBtnClick
    (Sender: TObject)
    begin
    DataModule1.TownTable.Insert;
    DBGrid1.SetFocus;
    end;


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

    Добавить батырмасын шерткеннен кейін фокус жаңа жолға түседі, яғни қолданушы осы жерге қала атауын енгізеді. Сохранить батырмасының Onclick әдісіне жазылатын код:

    Procedure TTownBookForm.SaveBtnClick (Sender:TObject);
    Begin


    if

    DataModule1.TownTable.Modified

    then
    DataModule1.TownTable.Post;
    end;

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

    Бұл жерде фокусты артқа тор көзге қайтаруға болады, бірақ бұл жағдайда олай жасалынбайды. Удалить батырмасы үшін Onclick оқиғасына жазылатын код:

    Procedure TTownBookForm.DelBtnClick (Sender:TObject);

    Legin Data Module1. TownTable.Delete.

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

    Мінекей, Справочник городов кестесінің сыртқы сипаты келістіруді аяқтадық. Басты формаға өтіп, справочник городовты шақыру үшін менюді ұйымдастырыныз.

    Менюдің справочник городов терезесін шақырушы боліміне жазылатын код. TownBookForm.Showmodal.

    Егер сіз справочник город модулін басты формаға коспасаныз және қазір бағдарламаны компиляциадан өткізуге әрекететіңіз,онда Delphi сізге ескертеді TownBookUnit модуліндегі формасы жарияланғандығын және сіздің форманызды оған ешқандай сілтеме жасалынбағандығы туралы ескертеді. Сізге автоматты түрде қосуды ұсынады. Yes бөлімін таңданыз және автоматты түрде қосылады, осыдан кейін ешқандай өзгнріссіз қайтадан комплитацияланадан өткізуінізге болады. Осыдан кейін бәрі сәтті болуы тиіс. Жобаны іске қосыныз және бағдарламаның жумысын тексеріңіз.

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

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

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


    • Добавить запись

    • Редоктировать запись

    • Удалить запись

    Сонымен қатар командалардың қызыметін жылдамдату үшін формаға батырмаларымен панель құрылды.

    Енді деректердің әрбір жазбасын өңдеу үшін жаңадан форма құрамыз. Форма құрыңыз және оны EditFormUnit атымен сақтаңыз (модуль атауы). Ал форманы EditRecordForm атымен сақтаңыз. Ал енді форманың келесі қасиеттерін өзгертіңіз.



    • BorderStyle үшін – bsSingle;

    • Position үшін – poMainFormCenter;

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

    Ал енді деректерді өңдеуге арналған форманың сыртқы көрнісін көріңіз. Сыртқы келбетін әдемілеу үшін мұнда бірнеше компоненттер бар (сурет және ақ түсті панель), бірақта бұл бастысы емес. Сіз осы әрекеттерді қайталап және дәл осындай форма жасауға әрекеттенуіңізге болады немесе негізгі компоненттерді ғана пайдаланумен шектелуге болады. Мұнда негізгісі Сохранить батырмасы.

    Фамилия, Имя, Телефон, email және Дата рожения жазбаларына қарама-қарсы DataControls вкладкасынан алынған TDBEdit компоненттері орналасады. Бұл компоненттер қарапайым жолды енгізуге арналған TEdit компоненттеріне ұқсас, бірақ олар деректер қорындағы көрсетілген өрісті автоматты түрде өңдей алады. Компоненттің қажетті өрістен деректерді көруі үшін, оның DataSource қасиетінде қажетті кестені көрсету керек (DataModule1.DataSource1 өңдеуге арналған тор көзде жасағанымыздай), ал DataField қасиетінде қажетті өрісті көрсету керек. Міндетті түрде жасап көріңіз.

    Мобильник өрісі үшін CheckBox компонентіне ұқсас DBCheckBox компонентін пайдаланған дұрыс. Мұндада DBEdit компонентіне жасағанымыздай кестедегі қажетті өрісті көрсетуіміз керек.

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

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

    Мұның бәрін іске асыру үшін DataControls вкладкасынан DBLookupComboBox компонентін қойсаңыз жарайды. Оның DataSource қасиетіне негізгі кестені көрсету керек (DataModule1.DataSource1), яғни өңделетін, DataField өрісіне өңдеуші Город өрісін көрсетеміз.

    DBLookupComboBox компоненті төгілмелі тізім секілді. (Ол ComboBox компонентіне ұқсас) кестедегі деректерді осы төгілмелі тізімнің элементтері ретінде көрсетілетін кестені ListSource қасиетінде көрсетеміз. DataModule1.TownSource – справочник городов – ты көрсетейік. Осы кестенің қажетті өрісін, яғни Название города өрісін төгілмелі тізімі үшін қолданылатын өрісті ListField қасиетінде көрсетуіміз керек. Негізгі кестенің көрсетілген өрісіне енгізілетін мәнді KeyField қасиетінде көрсету керек, яғни Key1 өрісі.



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

    Сохранить батырмасын Onclick оқиғасына төмендегі кодты жазыңыз:

    Procedure TeditRecordFormBtnClick

    begin

    if

    DataModule1.BookTable.Modified

    then

    DataModule1.BookTable.Post;

    close;

    end.

    Бірінші жолда біздер тексеріп өтеміз, егер кесте өзгертілген болса(DataModule1.BookTable.Modified мәні true болса), онда DataModule1.BookTable.Post; өзгертулерді қабылдаймыз.

    Отмена батырмасы үшін Onclick оқиғасына төмендегі кодты жазыңыз:

    DataModule1.BookTable.Cancel;

    Кестеге ешқандай өзгертулер енгізбей өңдеу режимінен шығуды қамтамасыз ететін әдіс. Енді басты формаға өтіп, менюдің Добавить запись пунктіне төмендегідей кодты жазыңыз:



    DataModule1.BookTable.Insert;

    EditRecordForm.ShowModal;

    Мұнда кестенің бірінші жолына жаңадан жол қосамыз. Кодтың екінші жолында деректерді өңдеу терезесін шақырамыз. Менюдің Редактировать запись пункті үшін жәй ғана - EditRecordForm.ShowModal кодын жазыңыз.

    Енді бағдарламаны іске қосыңыз. Жаңадан жазба құрыңыз. Справочник ішіндегі Город өрісінен қандайда бір мәнді таңдаңыз. Сохранить батырмасын басқан соң терезе жабылады. Тор көзге қараңыз. Город өрісінің жаңа жолында біздің анықтамамыздағы қала кодын тере аламыз. (Мысалы ретінде 3 саны болсын). Справочник городов кестесінде жазба бар, ол жазба Key1 өрісінің мәні, ол 3-ке тең, Название города өрісінде біз таңдаған атау көрсетіледі. Ал ендеше, Access-ті ашып, кесте құрамында не барына көз жеткізейік. Сурет

    Шыныменде қала атауы (мысалы: Ростов-на-Дону) 3 деген мәнге ие. Осыған орай негізгі справочник кестесінде толық қалалардың атауларын көрсету керек емес.

    Алдымыздағы кезеңде мысалымызды одан әрі дамытамыз, ал әзірше өзіңіздің қалауыңыз бойынша қолда бар мысалды өзгертіп көріңіз. Бірнеше жолды құрыңыз және өңдеп көріңіз. Өңдеу терезесін ашып жұмыс жасағаныңызда DBLookupCombobox компонентінде көрсетілген жазбаға сәйкес дұрыс қала атауы көрсетілген бе? Осыған назар аударыңыз.
    7 зертханалық жұмыс(1 сағ)

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

    Қажетті құралдар мен материалдар: ДК, Delphi интегралдық ортасы, МҚБЖ MS Access.

    Мазмұны мен жұмысты орындау реті

    I. Теориялық мағлұматты қайталау;

    II. Өз бетінше тапсырманы орындау және нәтижесін талдау;

    III. Зертханалық жұмысты тапсыру.


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

    If Аpplication.MessageBox(PChar(’Сіз шынымен өшіргіңіз келе ме?’ + DataModule1.BookTable.DsDisigner.AsString), 'Назар аударыңыз!!!' , MB_OKCancel)=id_Ok then DataModule1.BookTable.Delete;

    Мұнда біздер MessageBox функциясымен хабарлама шығарамыз. Кодтың бірінші параметрінде (хабарлама тексті) «Сіз шынымен өшіргіңіз келе ме?» - деген тексті жазылған, ал оған қоса Фамилия өрісінде белгіленген жолдың мәні - DataModule1.BookTable.DsDisigner.AsString көрсетілген. Бұл жерде ең қиыны ол - DataModule1.BookTable.DsDisigner.AsString. Бұл құрлымды түсіну үшін DataModule-ге өтіңіз. Негізгі анықтамаға қосылған BookTable компонентін екі рет шертіңіз және сосын Фамилия өрісінде шертіңіз Обьект инспектрі терезесінен осы өрістің атауын қараңыз және оның аты BookTable.DsDisigner болуы тиіс. Енді түсінікті болған шығар. Біз жазамыз бірінші деректер модулі атауын (DataModule1) сосын нүктеден кейін өріс атын (BookTable.DsDisigner) және содан соң өрістің мәнін жазба ретінде қайтаратын AsString әдісін жазамыз.

    DataModule1 модулінің type бөліміне өтіп көзімізді жеткізуімізге болады, яғни онда BookTable.DsDisigner қасиетінде TWideStringField типі көрсетілген.

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

    Ал жоғарыда айтылған кодтың екінші жолында Delete әдісі бойынша ағымдағы жолды өшіреді - DataModule1.BookTable.Delete.

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



    DataModule1 модуліне өтіңіз және BookTable компонентін белгілеңіз. Оның Active қасиетіне false мәнін қойыңыз. Енді осы комплнентті екі рет шертіңіз және осыдан кейін бәрімізге белгілі өріс редакторы терезесі ашылады. Кесте жолына арналған мәтіндік қала атаулары бар жаңа өріс құрайық. Ол үшін редактор терезесіне барып шертіңіз және пайда болған менюден New Field пунктін таңдаңыз. Сіздің алдыңызда төмендегідей терезе пайда болады. Сурет

    Жаңа өріс құру тек қана белсенді емес (неактивный) кестеде ғана мүмкін болады, осыған байланысты біздер Active қасиетіне false мәнін қойдық. Осы терезенің өрістерінің мәнін төмендегідей толтырыңыз:



    Name өрісіне Town мәнін енгізіңіз;

    Type өрісіне жолдық тип - String көрсетіңіз;

    FieldType өрісіне іздестіру өрісі- LookUp таңдаңыз;

    KeyField(кілттік өріс) өрісіне Город(бұл негізгі кестенің өрісі, яғни көрсетілген мәні бойынша өзге кестедегі мәтінді іздестіреді) өрісін таңдаңыз;

    DataSet өрісіне TownTable – ді көрсету керек (бұл іздеуге арналған Справочник городов кестесі);

    LookUp Keys өрісіне Key1-ді көрсетіңіз(справочник кестесіндегі іздестіру жүргізілетін өріс);

    Result field өрісіне Название города (мәтіні қойылып отыратын өріс) өрісін көрсетіңіз;

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

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

    Қайтадан BookTable кестесін белсенді(активный) етіңіз және бағдарламаны іске қосыңыз. Town өрісіне қараңыз және сіз онда қала атауының тестілік баламасын көресіз.

    Енді бағдарлама ажарлы және қызықты көрінеді. Осы жерде Город өрісін көрінбейтін етуге болады, яғни қолданушы осы түсініксіз сандарды көрмеуі үшін, ал Town өрісінің үстіне қала атауын жазып қойса болады. Осы үшін BookTable компонентін екі рет шертіңіз, Город өрісін белгілеңіз және Visible қасиетіне false мәнін қойыңыз. Ендігі кезекте Town өрісін белгілеңіз және DisplayLabel қасиетіне город деп жазыңыз.
    8 зертханалық жұмыс(1 сағ)

    Тақырыбы: Сұрыптау

    Мақсаты:Деректерді сұрыптауды үйрену.

    Қажетті құралдар мен материалдар: ДК, Delphi интегралдық ортасы, МҚБЖ MS Access.

    Мазмұны мен жұмысты орындау реті

    I. Теориялық мағлұматты қайталау;

    II. Өз бетінше тапсырманы орындау және нәтижесін талдау;

    III. Зертханалық жұмысты тапсыру.


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

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

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

    Қандай өрістерді индекстеуіміз керек? Іздестіру жұмыстары жиі жүретін өрістер үшін индекстеуді пайдаланған дұрыс деп ойлаймын. Телефон анықтамаларында көбіне іздестіру жұмыстары телефон номері немесе фамилия бойынша жүргізіліп отырады. Үйдегі анықтамаларда көбіне фамилия бойынша іздестірілу жұмыстары жүргізіліп отырады. Егер сізде бүкіл қаланың анықтамасы болса, онда іздестіру жұмыстары телефон бойынша немесе мекен жайы бойынша жүргізілуі мүмкін. Өзіңізге достарыңыздың телефон номері жазылған кітапшаны елестетіңіз, мұнда досыңыздың номерін қандай параметр бойынша іздейсіз? Досыңыздың фамилиясын білетін болатындықтан, фамилия бойынша іздестіресіз, ал телефон номерін ұмытып қалуыңыз мүмкін. Сондықтанда біздің анықтамамызда Фамилия өрісі индекстелген болғаны дұрыс.

    Индекстер іздестіру жылдамдығын арттырады және барлық жазбаларды сұрыптауға мүмкіндік туғызады. Егер іздестіру жылдамдығын аса бір байқай қоймасақ, ал сұрыптау жұмысын аңғаратындығымыз анық. Деректер қорын Access-те ашыңыз, Справочник кестесін белгілеп конструктор режиміне өтіңіз. Сіздің алдыңызда өрістерді өңдеуге арналған редактор терезесі ашылады. Фамилия өрісін белгілеңіз, осында Индексированное поле қасиетін қараңыз. Қасиеттің төменге қарай төгілмелі тізімі бар. Мұнда нұсқа көрсетілген. Олар:


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

    • Да (допускаются совпадения) – өріс индекстелген және екі немесе оданда көп жазба бір мәнге ие болуы мүмкін.

    Мысалы, Нет (индекстелмеген өріс) нұсқасын қарастырайық, Фамилия өрісінде екі жол Сидоров деген мәнге ие болуы мүмкін. Біздің жағдайымызда дәл осындай сәттер болып тұрады, себебі белгілі бір фамилияны екі немесе одан көп адам иелену мүмкін, яғни бір рет болсада қайталануы мүмкін.

    Да (совпадение не допускаются) – егерде осы параметр таңдалынса, онда әртүрлі жолдарда бірдей мән сақталынбайды. Өрістердің қайталанбауын деректер қорының өзі қадағалап отырады. Егер Фамилия өріс үшін осы параметрді таңдасақ , онда екі немесе одан да көп жылдарда Сидорова деген бір мәнді қабылдай алмайды. Шыныменде өрістің қайталанбауы қажет болса, онда бұл параметр ыңғайлы. Құжат нөмірлері қайталанбауды қажет ететін офистік жүйелерде жиі қолданылады.

    Ал енді Телефон, Фамилия өрістерін индекстелген өріс етіп өзгертейік. Екі жағдайда да Индексированное поле қасиеттеріне Да (допускаются совпадение) параметрлері таңдалынады.

    Деректер қорын жауып, бағдарламалауға өтеміз. Сұрыптау қызметімен толықтыру үшін Delphi ортасында дайындаған анықтамалық мысалымызды жүктейміз.

    Алдымен біздің формамызды жақсартып алайық. Ол үшін бағдарламамыздың менюіне Сортировка пунктін қосайық және оның ішінде По фамилий және По телефону подпункттерін қосайық.

    По фамилий пункті үшін төмендегі кодтарды жазайық.

    DataModule1.BookTable.IndexFieldNames: = `фамилия`;

    По телефону пункті үшін төмендегі кодты жазыңыз:



    DataModule1.BookTable.IndexFieldNames: = `телефон`;

    Екі жағдайда да біздер BookTable кестесінің IndexFieldNames қасиетіне жазбаларын сұрыптайтын өрісті меншіктейміз.



    Сурет
    9 зертханалық жұмыс(1 сағ)

    Тақырыбы: Деректерді сүзгіден өткізу

    Мақсаты: Деректерді сүзгіден өткізу арқылы қажетті ақпаратқа қол жеткізуді үйрену

    Қажетті құралдар мен материалдар: ДК, Delphi интегралдық ортасы, МҚБЖ MS Access.

    Мазмұны мен жұмысты орындау реті

    I. Теориялық мағлұматты қайталау;

    II. Өз бетінше тапсырманы орындау және нәтижесін талдау;

    III. Зертханалық жұмысты тапсыру.


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

    Іздестіруді ұйымдастыру үшін TADOTable компонентінде Filter қасиеті бар. Мұнда деректерді бейнелеудін шарттарын көрсетуге болады. Мысалы сіз тек қана жазбаларды бейнелеуді көрсетуінізге болады, яғни Фамилия өрісіндегі Сидоров мәні. Бірақ сүзгіміз жұмыс жасау үшін біздің кестеміздің Filtered қасиетіне true мәнін қоюыңыз қажет. Осыдан кейін Filter қасиетін өзгертуімізге болады және барлық өзгерістер бірден күшіне енеді.

    Осы жолдың – Filter қасиеті. Мұндағы кодтын жазылу мағынасы төмендегендей.

    Өріс [Салыстыру операторы] ‘Мән’

    Егерде сіз Фамилия өрісінің барлық Сидоров мәніне тең жазбаларды бейнелегіңіз келсе, онда төмендегі кодты жазасыз.



    ADOTable1.Filter:= ‘Фамилия’’Сидоров’’’;

    Мәнді жалғыз тырнақша ішінде көрсету керектігіне көңіл бөлініз (апостроф). Delphi-де жалғыз тырнақша жолдардың шегін көрсетуге қолданылса, бұл жерде шамалы ойлану қажет. Жолдың ішінде жалғыз тырнақшаны қою үшін оны екі рет қоямыз, мысалы:

    Осы мәтіннен кейін жалғыз тырнақша болады'’бұл мәтіннін жалғасы'

    Дәл осындай әдіспен мәннің алдына жалғыз тырнақшаны қоямыз. Мәннен кейін жалғыз тырнақшаны қоямыз және жолды жабу керек, мінекей осылай үш жалғыз тырнақша белгісін қоямыз (екеуі мән үшін арналса және біреуі жолдың соңына арналады). Егер сіз мұндай тырнақшамен жұмыс жасағыңыз келмесе, онда QuotedStr функциясын қолдана аласыз. Оған жолды беру керек, ал ол оны тырнақша түрінде қайтарады. Сонымен сіздің кодыңыз келесідегідей қысқарады:

    AdoTable1.Filter:='Фамилия='+ QuotedStr(Сидоров);

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

    AdoTable1.Filter:= 'Фамилия=' 'Сидоров' ' or Телефон=' '3326523' ' ';

    Бұл мысалда барлық жазбаларды іздеу жүргізіледі, мұнда Фамилия өрісі Сидоров мәнге және Телефон өрісі 3326523 мәнге тең. Екі шартты біріктіру үшін or операторы қолданылады. Сонымен қатар логикалық типті - and операторында қолдануға болады.



    Кеңес. Сүзгілеуді программалауда тырнақшаларды ескеріңіз. Есте сақтаңыз, мәндер жалғыз тырнақшамен ерекшеленеді және жол ішінде екі жалғыз тырнақша қойылады, екі тырнақша қоюға болмайды.
    Назар аударыңыз. Есте сақтаңыз, егер өріс аты екі сөзден тұрса, онда оның арасын квадрат жақшалармен ([]) жабу керек.

    Город өрісі екі сөзден тұрсын делік - Название города өрісіндегі сүзгі келесідей болады:

    AdoTable1.Filter:=' [Название города]= ' 'Москва' ' ';
    Енді бағдарламалауға көшеміз. Алдыңғы бөлімдегі мысалды ашыңыз. Бұған іздеу мүмкіндіктерін қосамыз.

    Сурет

    Біздің формамызды жақсартамыз. Бұл үшін панель қосамыз, мұнда "Найти" (Іздеу) мәтіні және FindEdit атты TEdit енгізу жолы жатады. Қолданушы мәтінді енгізу жолында өзгерткен болса, біз сүзгіні де өзгертуіміз керек. келесі кодты өңдеушіде жазыңыз:

    procedure TForm1.FindEditChange(Sender:TObject);

    begin


    if Length (FindEdit.Text)>0 then

    DataModule1.BookTable.Filtered:=true

    else

    DataModule1.BookTable.Filtered:=false;



    DataModule1.BookTable.Filter:='Фамилия> ' ' '+ FindEdit.Text+ ' ' ' ';

    end;


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

    'Фамилия> ' ' '+ FindEdit.Text+ ' ' '. Бұл жерде үлкен белгісі енгізілген мәтіннің барлық ұқсас жазбаларын көрсету үшін қолданылады.



    Назар аударыңыз. Егер тең белгісін қойсақ және қолданушы 'с' әріпін енгізсе, онда кестеде ештене көрінбейді, себебі мұндай фамилия жоқ. Ал 'үлкен' салыстыру белгісі қойылса, барлық 'с-дан' басталатын фамилиялар көрінеді.
    Ескерту. "Үлкен" салыстыру белгісі Access мәліметтер қорында жақсы жұмыс жасамайды. MS Access тек тең белгісімен жақсы және тез жұмыс жасайды(қатаң іздеу). Қатаң іздеу керек емес жағдайда біз SQL сұранысын қолданамыз, онымен кейінірек таңысамыз.
    Windows операциялық жүйесінде сүзгі соңына төрт жалғыз тырнақшалар қосылады. Неліктен төртеу? Себебі мәннен кейін біз бір тырнақша қосуымыз керек. Сондықтан бізде екі бірдей тырнақша тұр, себебі бұл жолды ашуға және жабуға арналған. Жол ішіне біз осы тырнақшаны қоямыз, сіздер білетіндей бұл үшін екі тырнақша қоюмыз керек және нәтижесінде біреу болады.

    Айтылғандай сүзгі ADO-да нашар жұмыс жасайды. Бірақ Delphi бізге жақсы мүмкіндікті береді, ол сүзгілеудің мүмкіндіктерін кеңейту және оларды қайталанбас және мықты етеді.

    (DataModuleUnit) мәліметтер модуліне өтіңіз және BookTable компонентіне OnFilterRecord қасиеті өңдеушісін құрамыз. Ол сүзгілеуді қосқан сайын шақырылады, бағдарламада жол сүзгілеуге жатама соны анықтап отырады. Бұл жерде біз сүзгілеу логикасымен басқара аламыз. Құрылған өңдеушіде келесі кодты жазыңыз:
    procedure TDataModule1.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 айнымалысына жалған мән береміз. Осыдан кейін ағымдағы жол сүзгіге сәйкес келетіндігі тексеріледі. Бұл үшін екінші жолда не болатынын түсінуіміз керек. Мұны бөліп қарастырайық:

    copy(BookTableDSDesigner.AsString,1,Length(Form1.FindEdit.Text))

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

    Сонымен, copy функциясы жолдан бірінші өлшем ретінде көрсетілген символдарды, екінші өлшем ретінде көрсетілген реттіліктерден бастап қайтарады және қайтарылған символдар саны үшінші өлшемге тең болады. Негізгі формадағы сүзгілеу үшін енгізу жолында қанша символ болса, бізге бірінші символдан бастап, сонша фамилия символдары қайтарылады.

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

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

    Ауқымды деректер қорымен SQL сұраныстары жылдам жұмыс жасайды. Мәселе мынада, алдымен бағдарламада сүзгінің жұмысы үшін барлық деректерді алады, содан соң клиент тарпынан тексеру жүргізіледі. Осылайша, желіде тым көп деректер легі жүреді және ол клиентке артық жүктеме тудырады. SQL сұранысын қолданғанда клиент серверге шарт жазылған шағын мәтінді бағыттайды, сервер оны тексереді және тек қажетті деректі қайтарады. Егер кесте миллион жазбалардан тұрып, ал шектеу арқылы тек бір жазба алу керек болса, онда желі үшін де, клиенттік компьютер процессоры үшін де үнемдеу жүргізу айдан анық.


    Кеңес. Егер сізде тым үлкен деректер қоры болса, онда міндетті түрде SQL сұранысын қолданған абзал.
    Осылайша біздер іздеудің жәй мүмкіндігін жасадық. Деректер қорына сұраныс жасаушы SQL тілін қолдану арқылы, әсерлі мүмкіндіктерге қол жеткізе аласыз. Бұл бөлек тақырып және оны жеке дара қарастырамыз.
    10 зертханалық жұмыс(1 сағ)

    Тақырыбы: SQL сұранымдар тілі

    Мақсаты:Деректер қорымен жұмыс барысында SQL сұранымдар тілін пайдалануды үйрену.

    Қажетті құралдар мен материалдар: ДК, Delphi интегралдық ортасы, МҚБЖ MS Access.

    Мазмұны мен жұмысты орындау реті

    I. Теориялық мағлұматты қайталау;

    II. Өз бетінше тапсырманы орындау және нәтижесін талдау;

    III. Зертханалық жұмысты тапсыру.


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

    SQL Американың ұлттық стандарттар институтымен және ISO халықаралық стандарттау ұйыммен анықталған. Осыған қарамастан кейбір деректер қорын құрастырушылар өзгертулер мен толықтырулар енгізіп отырады. Өзгертулер аса бір маңызды емес және негізгісі стандартпен сәйкес болып қалады, бірақ та өзгертулерді енгізу қажет. SQL тілі стандартталған және оған қандайда бір функционалдық мүмкіндіктерді күшейту үшін, өзгертулер енгізу керек болса, онда стандарттау үшін қабылдаған келісім шарттардың барлығын қарастыру керек, яғни атқарылар шаруалар өте көп.

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

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

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

    Стандарттысына жақыны интерактивті SQL тілі, ал енгізілген түрінде ауытқушылықтар пен толықтырулар көптеп кездеседі. Мысалы, стандартты SQL-де деректер екі типке бөлінеді: жолдар және сандар, бірақ кейбір өндірушілер өздерінің типтерін қосады (Date, Time, Binary және т.б.).

    SQL-де сандар екі типке бөлінеді:


    • бүтін – integer (int);

    • бөлшек – decimal (dec).

    Жолдар 254 символ ұзындығымен шектелген.

    Біздер мысалдарымызды қарастыруға қажетті осы тілдің негізгі

    мүмкіндіктеріне тоқталамыз. Қажет болған жағдайда SQL тілі туралы толық ақпаратты арнайы әдебиеттерден таба аласыз.

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

    Деректер қорына сұраныс жасау үшін компоненттер палитрасында орналасқан ADO вкладкасындағы TADOQuery компонентін қолданамыз. Бұл компоненттің қызметі TADOTable кестесімен ұқсас және олардың ұқсас өрістері көп. TADOQuery компонентінде де байланысу жолын таңдауыңыз қажет (Connection String қасиетінде ) немесе TADO Connection қасиеті арқылы байланыс орнатыңыз. Сұранымдардың сүзгілерді құру мүмкіндігі бар(Fittered және Fitter қасиеттері). Бұл сүзгінің қасиетін қарастырмаймыз, себебі TadoTable кестесінен еш айырмашылығы жоқ. Біздер ол сүзгіні қарастырып өткенбіз.

    Біздер телефон анықтамамызды ашайық және жаңа мүмкіндіктермен толықтырайық. Деректерге байланыс орнатушы компонентердің барлығы орналасқан деректер модулі DataModule-ді ашыңыз. Мұнда TADOQuery(FindQuery деп атаңыз) компонентін және DataSource (FindSource деп атаңыз) компонентін орналастырамыз. FindSource компонентінің DataSet қасиетінде FindQuery компонентін көрсетіңіз және осы арқылы компоненттерді байланыстырамыз.

    Ескерту. Кестедегі деректердің бейнеленуіне жауап беретін компонент ол DataSource . TADOQuery компоненті деректер қорына SQL сұранымдарын жасауға арналған.Сұранымдардың жауабы бізге кесте түрінде қайтарылады және нәтижені бейнелеу үшін DataSource компоненті қажет .Осыған байланысты біз оларды формаға орналастырдық, яғни бейнелеу компоненті бейнелеуге қажетті деректерді көріп отыру үшін.

    Енді FindQuery компонентін белгілеңіз.Осы компоненттің Connection қасиетінде. ADO Connection1 деректер қорымен байланыс орнатушы компонентін көрсетіңіз. Мұнымен біздер компонентке қандай деректер қорына сұраным жасайтынымыздыжәне қандай деректер қорына сұраным жасайтынымызды және қандай байланыс арқылы екенін көрсетеміз.

    Енді сұранымды жазайық. Ол үшін SQL қасиетін екі рет шертіңіз және сіздің алдыңызда сұранымдар редакторы терезесі ашылады.

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



    Select*From Справочник

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

    Негізгі тереземіздің модуліне өтіңіз. DBGrid1 тор көз компонентін белгілеңіз, яғни BookTable кестесіндегі деректерді бейнелеуші компонент. Сұраныс нәтежиесінде кестені көру үшін обьект инспекторы терезесіне өтіп, DataSource қасиетіне DataModule1.FindSource мәнін қойыныз.

    Дайын болған кесте түріндегі нәтежиені қарайтын болсақ, TADOTable компонентімен жұмыс жасағанымыздай ұқсас болып келеді. Әзірше сіз тек барлық өрісті көре аласыз және өрістерді бейнелеу бапталмаған. Бірақ бұның барлығын реттеуіңізге болады, егер FindQuery компонентін екі рет шертсеңіз ғана болады. Осыдан кейін сол баяғы өріс қасиеттерін баптау терезесі ашылады. Тап қазір оны жасамастан бұрын, басты терезедегі DBGrid1 компонентін қайтадан шертіңіз. Бастапқы мәнді қайтару үшін обьект инспекторы терезесіне өтіп DataSource қасиетіне DataModule1.DataSource1 мәнін тандап қойыңыз.

    Ал енді DataModule деректер модуліне өтініз. FindQuery компонентін екі рет шертіңіз. Пайда болған терезеге тышқанның оң жақ батырмасын шертіп менюдегі Add all fields пунктін таңданыз. Редактор терезесіндегі барлық өрістер пайда болады. Енді баптаған кестеміздің қасиетін көру үшін BookTable компонентін екі рет шертіңіз. Көріп отыру үшін терезелердің екеуінде қатар орналастырып қойыңыз. Енді BookTable кестесінің қасиеттер редакторындағы бірінші қасиетті белгілеңіз және оны есте сақтап қалыңыз, сосын өрістер сұранымы қасиеттер редакторына өтіп және дәл есте сақтаған баптауларды қойыңыз.

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

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


    • Caption – Результат поиска деп өзгертіңіз;

    • Position poMainFormCenter мәнін қойыңыз, яғни тереземіз негізгі терезенің қақ ортасында бейнелеуі үшін;

    Тереземіз кестелерді көруі үшін DataModuleUnit деректер модуліне қосылуымыз қажет. Ол үшін File | Use | Unit әрекетін жасаймыз. Формаға компоненттер плитасынан DataControls вкладкасындағы DBGrid компонентін орналастырыңыз және оның барлық формаға созыңыз. Обьект индикаторы терезесіне өтіңіз және DataSource қасиетіне DataModule1.FindSource мәнін қойыңыз.

    Форманы FindResultUnit атауымен сақтауыңызға болады. Басты формаға өтіңіз және осында іздеу панеліне телефон іздеу үшін енгізу жолын және мандайша (надпись) жазбасын қосыңыз. Іздестіруді жүзеге асыратын батырма кірістіңіз. Суреттен Негізгі терезенің жақсартылған нұсқасын көруіңізге болады.

    Найти батырмасын Onclick оқиғасының коды:

    Begin

    DataModule1.FindQuery.Active:=false;

    DataModule1.FindQuery.SQL.Clear;

    DataModule1.FindQuery.SQL.Add (`Select*`);

    DataModule1.FindQuery.SQL.Add(`From Справочник`);

    DataModule1.FindQuery.SQL.Add(`Where Телефон Like``` + FindTelephoneEdit.Text + ````);

    DataModule1.FindQuery.Active:=true;

    FindResultForm.ShowModal;

    end;
    Кодтың алғашқы жолында сұранысты белсенді етпейміз. Осыдан кейін SQL қасиетіне деректерді іздеу сұранысы жазылады. Бұл қасиет TStrings типімен жұмыс жасайды. Жаңадан суранымдар жасамастан бұрын алдыңғы шақыру жұмысынан қалып қойған көне сұранымдар болуы мүмкін. ( Егер қолданушы бұдан бұрын Найти батырмасын шерткен болса, онда бағдарлама бойында көне сұраныс болады). Тазалау үшін Clear әдісін шақырамыз.

    Ал одан SQL ұраныстары жазылады, сұраныс коды:



    Select * From Справочник Where Телефон like ‘’’+FindTelephoneEdit.Text+‘’’’

    Мұнда FindTelephoneEdit компонентіне енгізілген мәтініне ұқсас, Справочник кестесінің Телефон өрісіндегі барлық жазбалар таңдалынады.



    Назар аударыңыз. Салыстыруға арналған параметр тырнақша ішінде болуы тиіс, осыған көңіл бөліңіз (біздің жағдайымызда FindTelephoneEdit ішіндегі мәтін). Сондықтанда сүзгімен жүмыс жасағанда көптеген жалғыз тырнақшаларды пайдаланамыз.

    SQL қасиетіне сұраныс мәтін енгізе салысымен оны жүзеге асыруға болады. Ол үшін компонентті белсенді етсеңіз болды. Ал нәтижені бейнелеу үшін FindResultForm терезесі пайдаланылады.

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

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

    Осымен мысалымыз дайын. Дегенмен динамикалық сұраныстың тағыда біреуін қарастырайық.

    Динамикалық деген сөзден не түсінеміз?

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

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



    FindQuery компонентін белгіленіз және SQL қасиетіне екі рет шертіңіз. Сұраныс редаркторына төмендегі кодты еңгізініз:

    Select * from Справочник Where Телефон Like : Telephone

    Негізгі мұндағы сұраныс алдындағы сұранысқа ұқсас. Тек жалғыз айырмашылық FindTelephoneEdit.Text мәні орнына :Telephone тұр. Бұл не? Мәтіннің алдындағы қос нүкте айнымалы екенін түсіндіреді. SQL сұранысындағы айнымалылар Delphi –де былай жазылады:



    :Айнымалы Атауы

    Сұраныс редакторы терезесін жабыңыз және Parameters қасиетін екі рет шертіңіз . Сіздің алдынызда параметр редакторы терезесі ашылады. Сұраныста жазылған параметр автоматты түрде осында түседі. Telephone параметрін белгілеңіз және обьект инспекторында оның қасиеттерін қараңыз.



    DataType қасиетінде айнымалы типі көрсетіледі. Біздің жағдайымызда телефон номері жолы болғандықтан , тип тізімінен ftstring типін таңдаймыз. Value қасиетінде мәнді үнсіз келісім бойынша деп көрсетуіңізге болады. Деректер қорынан кез-келген телефон нөмерін көрсетіңіз және FindQuery компонентін белсенді етініз.

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

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

    DataModule1.FindQuery.Active:=false;

    DataModule1.FindQuery.Parameters.ParamByName(‘Telephone’).Value:=FindTelephoneEdit.Text;

    DataModule1.FindQuery.Active:=true;

    FindResultForm.ShowModal;
    Бұл кодтың ең басында сұраныс компонентін белсенді етпейміз. Одан кейін параметр мәнін өзгертеміз, ол үшін DataModule1.FindQuery.Parameters.ParamByName(‘Telephone’).Value мәнін қоямыз. Қиынба? бірақ ыңғайлы.

    Сұраныс компонентінің Parametеrs қасиетінде барлық параметр сақталады. Осы қасиетте қажетті параметрді пайдалану үшін ParamByName әдісін қолданамыз. Жалғыз параметр ретінде осы әдіске параметр атын беру керек. Value қасиетінде табылған параметрге мән жазамыз. Сұраныс орындалуы үшін және нәтижені көру үшін сұранысты белсенді етуге болады. Динамикалық сұраныстармен жұмыс істеу әлде қайда жеңіл , егер қандай да бір мән ғана өзгертілетін үлкен сұраныстар болатын болса. Айнымалыны пайдалану қарапайым әрі жеңіл. Бұл деректер қорына және бағдарлама үшінде қолайлы. Деректер қорының жаңадан сұраныс жасамастан бұрын оны компиляциялайды, яғни бұл дегеніміз артық уақыт алу. Егер сұраныс ішінде жоқ дегенде бір сан ғана өзгертілсе, онда компиляция жүреді. Енді сұраныс жасау барысында айнымалыларды қолданатын болсақ, онда сұраныс еш өзгермейді, себебі айнымалының мәні ғана өзгертіледі және қайта компиляция жасау үшін ешқандай шығын шықпайды. Осымен сұраныстар туралы ойымызды түйіндеуге болады. Сөз соңында ADOQuery мен ADOTable компоненттері бір-біріне өте ұқсас. Осы себепті деректер қорымен байланыс орнату үшін ADOQuery компоненттерін пайдаланамыз. Біздің жағдайымызда да дәл осылай жасауға болар еді, яғни біздің телефон анықтамамызда қажетті ақпарат ізделінеді, ал қосымша анықтамалар үшін (мысалы Справочник городов) ADOTable компонентін пайдалансақта болар еді.

    ADOTable компонентінде қарастырып өткеніміздей ADOQuery компоненті деректер қорымен жұмыс жасауға арналған қажетті барлық әдістермен жарақталған. Мысалы: Insert, Delete, Edit, Post, First, Next, Prew, Last және т.б.

    11 зертханалық жұмыс(1 сағ)



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

    Мақсаты: Деректер қорының кестелері арасында байланысты құрып үйрену.

    Қажетті құралдар мен материалдар: ДК, Delphi интегралдық ортасы, МҚБЖ MS Access.

    Мазмұны мен жұмысты орындау реті

    I. Теориялық мағлұматты қайталау;

    II. Өз бетінше тапсырманы орындау және нәтижесін талдау;

    III. Зертханалық жұмысты тапсыру.


    Біздің жасаған анықтамамыз толығымен талаптарға сай күрделі деректермен жұмыс жасауымызға болады. Анықтамамызға тағыда бір өзгерістер енгізсек. Ал енді бір адамның екі телефоны бар делік және оны көз алдымызға елестетейік. Біреуі қарапайым, екіншісі ұялы телефон. Ал енді мұндай ақпаратты деректер қорына қалай енгіземіз? Ол үшін екі жазба жүргізіп отыруымыз қажет, яғни: Фамилия, Имя, Город, Email, Дата рождения өрістері екі жерге жазылып қайталанылады. Екі бірдей ұқсас жазбаларды қайта көшіріп жазу дискіден артық орын алады, сондықтанда мұндай таңдау тиімсіз екені айдан анық.

    Кесте жолдарында бірдей екі ақпараттың аз болуын қадағалап отыруымыз қажет. Город өрісін негізгі кестеден алып тастауымыздың мақсаты осы еді, яғни дискідегі орынды үнемдеу және деректер қорының жұмысын тиімділігін арттыру. Осындай жағдайда біз үшін байланысқан кестелер көмекке келеді. Мұндағы байланыс құрылымы Справочникпен байланысқандай ұқсас. Бірақ мұнда ара қатынас өзгешелеу.

    Бір кестеде Фамилия, Имя, Город, email және Дата өрістері сақталынса, ал екіншісінде Телефон және Мобильник өрістері сақталынады. Екі кесте суретте көрсетілгендей байланысады. Сурет

    Мұнда екі кесте көрсетілген. Справочник кестесінде телефон қожайыны туралы ақпараттар сақталынады. Ал екінші телефоны кестесінде Key1 (санағыш), LinkKey, Телефон және Мобильник атты төрт өріс сақталынады. Телефон өрісі (жолдық өріс, шынайы телефон номері сақталынады) және Мобильник (логикалық өріс) бұрынғыша өз қызметін атқара береді (Справочник кестесіндегідей қызметін атқарады). Негізгі кестеде енді мұндай өрістер жоқ. Неге LinkKey және Key1 өрістерінің арасында сызықша жүргізіліп байланыс орнатылған деген сұрақ туындайды. Key1 – қайталанбайтын өріс, ал ол біз үшін нақты табуға көмектеседі. LinkKey өрісі Key1 өрісіне сілтеме болып табылады. Мысалы ретінде суретке көңіл аударайық.

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

    Кестенің бірініші жолында Иванов Сергейге қатысты мәлімет жазылған. Ал енді екінші кестеде LinkKey өрісінде бір мәні бар жолды іздейміз. Мұндай мән бар және ол бірінші.

    Жоғарғы кестенің екінші жазбаға мән берсек, мұнда Петров Иванға тиесілі мағұлматтар жазылған. Ал төменгі кестеде LinkKey өрісінде екі мәніне ие жолды қарайтын болсақ, мұндай жазбалар бар және олардың саны екеу (2-ші және 3-ші жолдар).

    Ал жоғарғы кестенің 3-ші жолында Иванов Алексейге тиесілі мәлеметтер жазылған. Төменгі кестенің Link өрісінде яғни 3 мәніне тең 2 жазбына кездестіреміз. Ал бұл Ивановта 2 телефон бар дегенді білдіреді.

    Мінекей осылайша келттер арқылы екі кестені байланыстырамыз. Теория жүзінде айтылып өтті, ал енді тәжербиеге кірсейік. Деректер қорын MS Access-те ашайық және Справочник кестесіндегі Телефон және Мобильник өрістерін алып тастаймыз.

    Жаңадан кесте құрыныз және конструктор режимінде төмендегідей өрістерді кірістіріңіз;



    • Key1 – санағыш, кілттік өріс;

    • LinkKey – сандық өріс, Индексированные поле қасиетіне Да допускаются совпадение мәнін таңдап қойыңыз;

    • Телефон – мәтіндік өріс, өріс ұзындығы 10;

    • Мобильник – логикалық өріс;

    Кестені Телефоны атымен сақтаңыз.

    Delphi-ді жүктеңіз. Деректер қорымен байланысушы компоненттер орналасқан модульді ашыңыз және BookTable компоненттін екі рет шертіңіз. Өрістер редакторынан Телефоны өрісін белгіленіз. , батырмасының көмегімен өшіріңіз. Осыдан кейін Мобильник өрісінде өшіріңіз, себебі осы өрістерді кестеден өшіріп тастадық. FindQuery компонентінен осы өрістерде қайтадан өшіріңіз. Осы жерде тағы Key1 өрісін өшіріңіз (Өшірмеген жағдайда сұраныс екі кесте бойынша жүреді, ал ол бағдарлама үшін артық күш түседі). Кілттік өрісті неге өшіргенімізге көз жеткіземіз. Есте сақтаңыз SQL сұранысымыз дұрыс болмағандықтан әзірше іздеу жұмыс жасалады. Ал оны кейінірек дұрыстаймыз.

    Енді Телефон кестесіне байланыс орнату үшін осы жерге DataSource (TelephoneSource атауына өзгертіңіз) компонеттерін орналастырыңыз. TelephoneTable компонеттінің қасиеттерін басыңыз:


    • Connection – қасиетіне AdoConnection1 мәнін қойыңыз;

    • TableName – Телефоны кесте атауын көрсетіңіз;

    • Active – кестесін ашу үшін true мәнін қойыңыз;

    • MasterSourceBookSourse (мұнымен телефон кестесі үшін негізгі кестені көрсетесіз)

    • MasterFields – мұнда байланыс орнатушы өрістерді көрсетуіміз керек;

    Байланыс орнатушы өрістерді көрсету үшін оны екі рет шертіңіз және сіз үшін терезе ашылады. Суретке назар аударыңыз.Detail Fields (бағыныңқы деректер қорының өрістері) Key1 өрісін таңдаңыз, ал Master Fields (негізгі деректер қорының өрістері) LinkKey өрісін таңдаңыз. Add батырмасын шертіңіз. Joined Fields (байланысқан өрістер) тізімінен таңдалған байланысты бейнелейтін жол пайда болады. Ок батырмасын шерту арқылы осы терезені жабыңыз.Терезе жабылғасын байланыс сақталынады.

    Обьект инспекторынан IndexFieldsNames қасиетін аңғарып қараңыз. Ал онда байланыс орнатылған LinkKey өрісінің атауы пайда болады.


    12 зертханалық жұмыс(1 сағ)

    Тақырыбы: TTableкомпоненті. Индекстік өрісті құру. Мәліметтерді сұрыптау.

    Мақсаты: Индекстік өрісті құруды үйрену және қызметін білу.

    Қажетті құралдар мен материалдар: ДК, Delphi интегралдық ортасы, DatabaseDesktop утилатасы, BDE Administrator.

    Мазмұны мен жұмысты орындау реті

    I. Теориялық мағлұматты қайталау;

    II. Өз бетінше тапсырманы орындау және нәтижесін талдау;

    III. Зертханалық жұмысты тапсыру.

    І. Қысқаша теориялық мағлұмат.

    Индекс ұғымы. Әрбіркестеде бірдей мәнді теңестіретін жазба алғашқы кілт – өріс немесе өрістердің жиыны болуы мүмкін. Алғашқы кілттің мәні өзгеше болуы керек, яғни кестеде алғашқы кілттің мәнімен бірдей болатын жазбалар болмауы керек. Алғашқы кілттер кестелер арасындағы байланыстарды орнатуды қамтамасызетеді. Қайталанатын кілттер сұрыптау және берілгендерді іздеу кезінде өрістер бойынша орнатылады. Алғашқы кілттен айырмашылығы бірегей емес мәндерден тұруы мүмкін.

    МҚБЖ кілттері анықтама бойынша автоматы түрде индекстерді құрады, яғни

    Солардың көмегімен кестеде сақталынған мәліметтерге тез көшуге болады.

    Индекстердің маңызы олар индекстік өрістердегі сұрыпталған мәндерді сақтайды (яғни, индекс құрылғанөрістер) және кестедегі жазбаға көрсеткішті орнатады. Мынадай кесте бар болсын (1-кесте)


    Логикалық жағынан қарағанда оның индекстері 2- кестеде көрсетілгендей

    көрінеді


    Назар аударыңыз: Индекстегі өрістердің мәні өсу реті бойынша сұрыпталады («Келу уақыты», «Тауар аты», «Саны»), қажетті мәнді іздеуді жеңілдетеді. Егер, мысалға, «Қызылша» атымен берілген тауарды таңдау қажет болса, онда барлық кестені қараудың қажеті жоқ. Индекстен «Тауар аты» бағаны бойынша құрылған жазбадағы «Қызылша» тауарындағы алғашқы көрсеткішті тапса жеткілікті, және бұл жазбаны кестеден оқукерек, содан соң индекстегі басқа «Қызылша» тауарымен берілген жазбада басқа көрсеткіштер үшін қайталау керек. Өрістердің мәндері сұрыпталған болғандықтан, алғашқы көрсеткішті іздеу тез табудың арнайы әдісімен жүргізіледі және кестенің сұрыпталмаған өрістеріне қарағанда тез жұмыс жасайды. Индекстегі жолдар табылған бірінші жазбадан бастап тізбектеле қаралады.

    ІІ. Өзбетіншетапсырма:

    1. DatabaseDesktopпрограммасынжүктеңіз.

    2. №1 лабораториялық жұмыста құрылған dan.db МҚ-ын ашыңыз.

    3. fio, adres өрістері бойынша индекстік өріс құрайық. Ол үшін TableProperties біріктірілген тізімінен SecondaryIndexes элементін таңдаңыз.

    4. Жаңа индексті анықтау үшін Define батырмасына шертіңіз.

    5. Пайда болған терезенің Fields бөлімінде dan.db кестесінің өрістері

    орналасқан. IndexFields бөлімінде жаңадан құрылатын индекстік өрістер сақталады.



    2.1-сурет. Индекстік өрісті құру терезесі
    Сол жақ бөліктен fio өрісін таңдап алыңыз.

    6. Оңға қарай бағытталған бағдаршаны шертіңіз.

    7. ОК батырмасын шертіңіз.

    8. Пайда болған терезеде индекске indfio атын беріңіз де, ОКбатырмасын

    шертіңіз.(Индекстік өрісті жоюға және өзгертуге(EraseжәнеModify) болады)

    9. Delphiпрограммасынжүктеп, ats_pr.dprқосымшасынашыңыз.

    10.File->New->Formкомандаларыменжаңа форма қосыңыз.

    11.Форманың түрі:


    2.2-сурет. Кестедегі мәліметті сұрыптау формасы

    12.Индекстік өрістер бойынша сұрыптауды жүзеге асырайық. Сұрыптау

    Батырмасыныңкоды:

    procedure TForm2.Button1Click(Sender: TObject);

    begin

    case radiogroup1.ItemIndex of

    0:table1.IndexName:='indfio';

    1:table1.IndexName:='indadres';

    end;

    case radiogroup2.ItemIndex of

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

    table1.IndexDefs[table1.IndexDefs.IndexOf(table1.IndexName)].Options+[ixD

    escending];

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

    table1.IndexDefs[table1.IndexDefs.IndexOf(table1.IndexName)].Options-

    [ixDescending];

    end;

    end;

    13.Форманы Sort_un.pas дегенатпенсақтаңыз.

    14. Form1-ге Maimenu1 компонентінорналастырыңыз.

    15. Mainmenu1 компонентінің Items қасиетіндегіүшнүктелібатырмаға

    шертіңіз. Пайдаболғантерезеніңалғашқыменюбөлімінбелгілепалып,

    Caption қасиетінеСұрыптаумәніненгізіңізде, терезеніжауыптастаңыз.

    16.Сұрыптауменюі біріншіформаныекіншіформаменбайланыстырады.

    Сұрыптауменюініңкоды:

    procedure TForm1.N1Click(Sender: TObject);

    begin

    form2.show;

    end;

    17.Қосымшаныорындауғажіберіңіз.
    13 зертханалық жұмыс(1 сағ)

    Тақырыбы:Ttable компоненті. Мәліметтерді електен өткізу.

    Мақсаты:Мәліметтерді електен өткізу әдістерінің қызметін білу.

    Қажетті құралдар мен материалдар: ДК, Delphi интегралдық ортасы, Database Desktop утилатасы, BDE Administrator.

    Мазмұны мен жұмысты орында уреті

    I. Теориялық мағлұматты қайталау;

    II. Өз бетінше тапсырманы орындау және нәтижесін талдау;

    III. Зертханалық жұмысты тапсыру.



    І. Қысқаша теориялық мағлұмат.

    Мәліметтер жиынында таңдалынатын жазбалар үшін шеек қою-фильтрация деп аталады. Delphi жүйесі жазбаларды фильтрациялау мүмкіндігін өрнек бойынша және аралық бойынша жүзеге асырады.



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

    Фильтрді екпінді етуге немесе оны алып тастауға Boolean типті Filtered қасиеті қолданылады. Қалыпты жағдайда бұл қасиеттің мәні False, және фильтрация өшірілген болады. Filtered қасиетіне True мәнін қойғанда фильтрация қосылады.

    Фильтрация параметрі TFilterOptions типті FilterOptions қасиетінің көмегімен беріледі. Мәндері:

    • foCaseInsensitive-әріптердің регистрі ескерілмейді. Яғни Fio=Петров,ПЕТРОВ немесе петров бірдей мағынад ақабылдана береді.



    • foNoPartialCompare-іріктеуүшін, өріс және мәндерінің толық сәйкес болуын тексеруді орындайды. Әдетте символдар жолы үшін қолданылады. Мысалы, Fio=‘П*’ фильтрі үшін foNoPartial Compare мәні қосылғанда fio өрісінде Петров, Петрова, Попова мәндерінен тұратын жазбалар іріктелініп алынады.

    Аралық бойынша фильтрациялау. Аралық бойынша фильтрацияда мәліметтер жиынына өрістерінің мәндері көрсетілген аралықта болатын жазбалар енеді, яғни фильтрация шарты мәні>төменгішекара andм әні<жоғарғы шекара түріндегі өрнек болып табылады. Өрнек бойынша фильтрациядан айырмашылығы кестенің барлық жазбалары тізбектеліп қарап шыққанда, аралық бойынша фильтрациялау индекстік-тізбектелген әдіспен жүргізіледі, сондықтан фильтрацияның бұл тәсіліне тек индекстік өрістер ғана қолданылады. Индекстік өріс аты IndexName, IndexFieldNamesқасиеттерінің көмегімен ағымдағы секілді қойылуы керек. Егер ағымдағы индекс қойылмаса, онда келісім бойынша басты индекс қолданылады. Аралық бойынша фильтрацияны қосу және ажырату үшін қолданылатын әдістер:

    ApplyRange- аралық бойынша фильтрацияны қосу

    CancelRange- аралық бойынша фильтрацияны ажырату

    SetRangeStart-аралықтың төменгі шекарасын беру

    SetRangeEnd-аралықтың жоғарғы шекарасын беру

    EditRangeStart SetRangeStart әдісімен берілген аралықтың төменгі шекарасын өзгерту

    EdtrRangeEnd- SetRangeEnd әдісімен берілген аралықтың жоғарғы шекарасын өзгерту

    SetRange (constStartValues, EndValues: arrayofconst) – МҚ-да индекстік өрістер тек қана [StartValues..EndValues] диапазонынд ажататын жазбаны көрсетеді.

    ІІ. Өз бетінше тапсырма:

    1. Форманыңтүрі:


    3.1-сурет. Фильтрация жүргізу формасы


    2. indfio индекстік өрісі бойынша електен өткізуді жүзеге асырайық. CheckBox1 компонентінің оқиғасы:

    procedure TForm3.CheckBox1Click(Sender: TObject);

    var N:string;

    begin


    if checkbox1.Checked then

    begin


    N:=edit1.text;

    with table1 do begin

    IndexName:='indfio';

    CancelRange;

    SetRange([N],[N]);

    end;


    end else

    Table1.CancelRange;

    end;

    3. Форманы filtr_un.pas деген атпен сақтаңыз.



    4. Form1-дегі Mainmenu1 компонентіне жаңа Електен өткізу менюін қосыңыз да, оны үшінші формамен байланыстырыңыз.

    5. Қосымшаныорындауғажіберіңіз.


    14 зертханалық жұмыс(1 сағ)

    Тақырыбы: TTable компоненті. Мәліметті іздеу.

    Мақсаты: Мәліметтерді іздеу әдістерінің қызметін үйрену.

    Қажетті құралдар мен материалдар: ДК, Delphi интегралдық ортасы,

    DatabaseDesktop утилатасы, BDE Administrator.



    Мазмұныменжұмыстыорындауреті

    I. Теориялықмағлұматтықайталау;

    II. Өзбетіншетапсырманыорындаужәненәтижесінталдау;

    III. Лабораториялықжұмыстытапсыру.

    І. Қысқашатеориялықмағлұмат.

    Жазбаныіздеуқандайдабіранықталғаншарттықанағаттандыратын

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

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

    keyFields- іздеужүргізілетінөрістізімдері;

    keyValues- іздеуүшінөрісмәнінкөрсетеді;

    options- символдықжолдыіздеуүшінқолданылады.

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

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

    Lookup(const keyFields:String; const KeyValues:Variant; constResultFields:String):VariantФункциясыныңқызметіде Locate функциясыныңқызметінеұқсас.

    Айырмашылығы:

    •Lookup функциясыөзініңпараметрлеріндекөрсетілгенмәндерге

    Нақтысәйкескелетінжазбаныіздейді;

    •Lookup функциясытабылғанжазбағакурсордыкөшірмейді,керісіншетабылғанжазбаныңөрістерініңмәнінесептейді.

    Тізбектепіздеудіжазбаөрістерімәніменіздеуүшінберілгенмәннің

    ұқсассәйкестерініздеугеарналған FindNearst, SetNearst, EditNearst жәнеGotoNearst әдістерініңкөмегіменұйымдастыруғаболады.



    ІІ. Өзбетіншетапсырма:

    1. Delphi программасын жүктеп, ats_pr.dpr қосымшасын ашыңыз.



    2. Қосымшаға жаңа форма қосыңыз. Форманың түрі:



    4.1-сурет. Мәліметті іздеу формасы

    6. Іздеу батырмасының коды:

    procedure TForm4.Button1Click(Sender: TObject);

    begin


    table1.IndexName:='indfio';

    table1.FindNearest([edit1.text]);

    end;

    7. Форманы Poisk_un.pas дегенатпенсақтаңыз.



    8. Form1-дегі Mainmenu1 компонентінежаңаІздеуменюінқосыңызда, онытөртіншіформаменбайланыстырыңыз.

    9. Қосымшаныорындауғажіберіңіз.

    15 зертханалықжұмыс(1 сағ)

    Тақырыбы: TTable компоненті. МҚ кестелерінің арасында байланыс орнату.

    Мақсаты: МҚ кестелерінің арасында байланыс орнатуды үйрену.

    Қажетті құралдар мен материалдар: ДК, Delphi интегралдық ортасы, DatabaseDesktop утилитасы, BDE Administrator.

    Мазмұны мен жұмысты орындау реті

    I. Теориялық мағлұматты қайталау;

    II. Өз бетінше тапсырманы орындау және нәтижесін талдау;

    III. Зертханалық жұмысты тапсыру.



    І. Қысқаша теориялық мағлұмат.

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

    • Master Source- негізгі кестенің мәліметтер көзі;

    • Index Name-бағынышты кестенің ағымдағы индексі;

    • Index FieldNames бағынышты кестенің ағымдағы индексінің өрісі немесе байланыс өрісі

    • Master Fields-негізгі кесте индексінің өрісі немесе байланыс өрісі.


    ІІ. Өз бетінше тапсырма:

    1. DataBase Desktop программасын ашып, құрылымы төмендегідей болатын Oplata.db кестесін құрыңыз.

    Өрістіңаты

    Типі

    Өлшемі

    Кілттік өріс

    Қызметі


    Number

    +




    *




    Kod

    N







    Негізгі кестемен байланыстыратын код

    Mesiaz

    A

    10




    Ай аты


    Ab_oplata

    N







    Айына төленетін абоненттік сома

    Minut_mezh_razg

    N







    Халықаралық байланысқа кеткен минут көлемі

    Oplacheno

    N







    Осы айға төленген сома

    2. Dan.db кестесімен Oplata.db кестесін Kodөрісі бойынша байланыстырыңыз. Кестелер арасындағы байланыс “мастер-детальды”.



    Мұндағы Dan.db негізгі кесте де, ал Oplata.db бағыныңқы кесте. Dan.dbOplata.db



    5.1-сурет. Екікестенібайланыстыру
    БайланыстыруүшінБағыныңқыкестенің(Oplata.db) құрылымынашыңыз.

    3. Table Properties біріктірілгентізімінен Referential Integrity элементінтаңдаңыз.



    4. Пайдаболғантерезенің Fields бөлімінде Oplata.db кестесініңөрістері, Table бөліміндекестелертізімікөрсетілген.



    5.2-сурет. Кестелер арасында байланыс орнату терезесі

    5. Fields бөлімінен Kod өрісін, Table бөлімінен негізгі кестен і(байланыстырылатын кестені-dan.db) таңдаңыз, ОК батырмасын шертіңіз.

    6. Пайда болған терезеде байланысқа dan_opl атын беріңіз де, ОК батырмасын шертіңіз.

    7. Delphi программасын жүктеп, ats_pr.dpr қосымшасын ашыңыз.



    8. Қосымшаға жаңа форма қосыңыз. Форманың түрі:



    5.3-сурет. Байланысқан кестелердің мазмұнын көрсету формасы
    9. Table1 компонентімен Table2 компонентінбайланыстырыңыз.Ол үшін Table2 компонентінің MasterSource қасиетіне Datasource1 мәнін меншіктеңіз.

    10. Masterfields қасиетінің оң жағындағы үш нүктелі батырманы шертіңіз.



    11.Пайда болған терезенің AvailableIndexes төгілмелі тізімінен Kod индексін таңдаңыз. DetailFields ,MasterFields бөліктерінен Kod өрісін таңдап, ОК батырмасын шертіңіз.


    5.4-сурет.Бағынышты кестеден негізгі кестемен байланыс орнату
    12.Форманы Sviaz_tab_un.pas деген атпен сақтаңыз.

    13.Form1-дегі Mainmenu1 компонентіне жаңа Кестелерді байланыстырыңыз менюін қосыңыз да, оны бесінші формамен байланыстырыңыз.



    14. Қосымшаны орындауға жіберіп, кестені толтырыңыз.

    Достарыңызбен бөлісу:
  • 1   2




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

        Басты бет