Жоспар №5568

Borland Delphi7 ортасында мәліметтер қорын жобалау және ақпараттық жүйелерді әзірлеу

Сұрақ-жауап

Сұрағыңызға жасанды интеллект жауап береді

МАЗМҰНЫ Кіріспе 3 1 Мәліметтер қорын жобалау және ақпараттық жүйелер 4 1.1 Деректердің шамадан тыс қайталануы және аномалиялар 4 1.2 Ақпараттық жүйелерді жобалау 6 2 Delphi ортасында мәліметтер қорына рұқсат алу механизмдері 14 2.1 ADO провайдерлері 17 3 Мәліметтер қорын құру және басқару 20 3.1 Мәліметтер қоры кестелерін құру және басқару 20 3.2 Мәліметтер қоры кестесімен жұмыс 30 3.3 Клиенттік қосымшада жоғарғы мәзір құру 36 3.4 Мемо-өрістер, бағандарды жөндеу және деректерді іздеуді ұйымдастыру 40 3.5 Сұраныс құру 44 3.6 Есеп құру 52 4 Delphi7 ортасында локальды деректер қорын қолданып ақпараттық жүйелер 4.1 «Кадрлар бөлімі» ақпараттық жүйесінің жобасы 65 4.2 Мәліметтер қоры өзгерісін журналға тіркеу 89 5 Серверлік мәліметтер қоры және interbase серверімен танысу 95 5.1 INTERBASE локальды сервері 95 5.2 Индекс құру 99 5.3 Delphi7 және мәліметтер қоры серверлері 100 5.4 Генераторлар мен триггерлер 106 Қортынды 109 Әдебиеттер тізімі 110 Қосымша А 111 КІРІСПЕ Оқу құралы 5В011100-«Информатика» мамандығының студенттеріне жүргізілетін «Мәліметтер қоры және Қазіргі қолданбалы программаларды дайындау технологияларының өте мықтылығына қарамастан, егер 1 Мәселенің қойылымы 2 Мәселелердің шешілу тәртібін анықтау 3 Алғашқы мәліметтерді таңдау 4 Мәліметтер құрылымын анықтау 5 Қолданбалы программа дайындау 6 Программаның дұрыстығын бақылау, жетілдіру. Бұл кезеңдерді локальды мәліметтер қорын қолданып BorlandDelphi7 ортасында орындау Оқу құралында келтірілген әр мысалдың Дельфи тілінде жобалық 1 МӘЛІМЕТТЕР ҚОРЫН ЖОБАЛАУ ЖӘНЕ АҚПАРАТТЫҚ ЖҮЙЕЛЕР Мәліметтер қоры қандай да бір пәндік аумақ, яғни адам Мәліметтер қорын жобалау келесі пункттерден тұрады: 1 Мәліметтер қорының ақпараттық қажеттілігін анықтау 2 Мәліметтер қорында үлгілейтін шынайы әлемнің объектілерін – пәндік аумақты 3 Мағыналар мен мінездемелер арасында сәйкестік жасау – таңдалынған МҚБЖ-не 4 Әрбір объектіні ерекше-уникалды түрде анықтайтын атрибуттарды анықтау 5 Мәліметтердің толықтылығын қамтамасыз ететін ережелерді құрастыру. 6 Объектілер арасында байланыс орнату. Кестені қалыптандыру. 7 Мәліметтердің қауіпсіздігін қамтамасыз ететін сұрақтарды жоспарлау Мәліметтер қорын құру кезінде басты назар аударатын нәрсе – 1.1 Деректердің шамадан тыс қайталануы және аномалиялар Деректердің шамалы (қарапайым) және шамадан тыс қайталануы болады. Қарапайым 1-кесте- Қызметкерлер және Телефон қатынасы Қызметкер есімі Телефоны Алия 525458 Ғалия 525458 Берік 525458 Серік 562651 Мұндағы 525458 нөмірінің бірнеше адам үшін қайталануы қарапайым қайталану ҚТБ-қатынасы (Қызметкер, телефон, бөлме) бар болсын. 2-кесте- Қызметкер, телефон, бөлме қатынасы Қызметкер есімі Бөлме Телефоны Алия 111 525458 Ғалия 111 525458 Берік 111 525458 Серік 112 562651 3-кесте - Қызметкер, телефон, бөлме қатынасы Қызметкер есімі Бөлме Телефоны Алия 111 525458 Ғалия - - Берік - - Серік 112 562651 2-кестеде деректердің шамадан тыс қайталануы бар. Одан құтылу үшін 4-кесте - Телефон-Бөлме қатынасы Телефоны Бөлме 525458 111 562651 112 5-кесте - Қызметкер-Бөлме қатынасы Қызметкер есімі Бөлме Алия 111 Ғалия 111 Берік 111 Серік 112 Әр бөлменің телефоны МҚ-на бөлек жазылады да басқа қатынасқа Деректердің шамадан тыс қайталануы картеждерді өңдеу кезінде қиындықтар туындатады, Аномалия дегеніміз МҚ-да деректерді өңдеуді қиындататын, қайшылықтар туындадатын процестер. Аномалияның 3 түрі болады: 1 жөндеу 2 өшіру 3 жаңадан қосу Жөндеу аномалиясында деректің бір мәнін жөндеу үшін барлық қатынас Өшіру аномалиясы қатынастан қандай да бір деректі өшірген уақытта Жаңадан қосу аномалиясы қатынас толық толтырылғанға дейін жаңа деректерді 1.2 Ақпараттық жүйелерді жобалау Ақпараттық жүйелерді үйренген кезде мәліметтер қорының алатын орны ерекше. Концептуалдық жобалау - программада қарастырылатын негізгі мәселелер мен Логикалық жобалау - ER–диаграмма негізінде реляциялық жүйелердің мүмкіндігі ескерілген Физикалық жобалау - мәліметтер қорын басқару жүйелері Пәндік аймақты модельдеу төмендегідей кезеңдерден тұрады: инфологиялық модельді Ақпараттық жүйелерді жобалау жұмысы барысында құрылған инфологиялық модель негізінде Оның инфологиялық модельден айырмашылығы жүйедегі құбылыстар уақыт мерзімі бойынша 1-cурет - Инфологиялық модельдің негізгі бөлшектері Мәліметтер қорының концептуалды жобалануы. Мәліметтер қорын жобалаудағы үрдістің бірінші фазасы кәсіпорынның талданатын бөлігі Осы орайда келесі мысалды қарастырайық. «ШҚМУ студенттері» мәліметтер қорын 1-кезең. Концептуальды жобалау кезеңі. Бұл кезең жалпы мәні бар, жауапты және программистен, мәліметтер Бұл кезеңнің мақсаты: ақпараттық қажеттілік және қолданушының концептуальдық талаптарын 2-кезең. Заттық аумақтың сипаттамасы. Мәліметтер қорын құрастырудың алдында заттық аумақты қарастырып аламыз. Мәліметтер 6-кесте-Заттық аумақтың атрибуттар жиыны № Атрибуттар атаулары Идентификатор 1 2 3 1 Студенттердің аты-жөні Fio 2 Туған датасы data 3 Ұлты Naz 4 Факультет fakult 5 Мамандығы Spez 6 Курс Kurs 7 Топ Group 8 Мекен-жайы Adres 9 Келісім нөмірі (оқуға ақы төлеуге арналған) N_dog 10 Ақы төлеу түрі Forma_opl 11 Ақы сомасы Summ 12 Жанұялық жағдайы Sem_pol 13 Жеңілдіктер Lgota 14 Жеңілдік түрі Vid_lgot 15 Жатақхана Obshag 16 Жатақханада тұру мерзімі Srok_proj 17 Жатақханаға орналасу мерзімі Data_viezda 18 Бөлме нөмірі N_kom 19 Студенттік билет нөмірі N_bilet 3-кезең. Заттық аумақтың мінездемесі. Студенттерді тіркеу бөлімі ШҚМУ студенттері туралы деректерді сақтау және 4-кезең. Заттық аумақтың шектеулері және мүмкіндіктері. Бұл заттық аумаққа қатысты келесі шектеулер мен мүмкіндіктер қолдануға 1 Студенттік билеттің нөмірі 5 символдан тұрады, онда топ 2 Ақы төлеу келісімінің нөмірі 5 символдан тұрады, онда 3 Жеңілдіктер былай анықталады: - алғашқы төленген ақы сомасы ескеріледі - жазғы және қысқы сессияның қортындысы ескеріледі - жанұялық жағдайы ескеріледі 4 Жатақхана тек қана басқа қаладан келген студенттерге беріледі 5-кезең. Заттық аумақтың ER-диаграммасын тұрғызу. ER-диаграмманы тұрғызу үшін заттық аумақтың объектілерін, атрибуттық құрамын анықтау 1 Студент (fio, data, naz, adres, N_blilet) 2 Мамандық (fakult, spez, kurs, group, N_bilet, N_dog) 3 Ақы (N_dog, forma_opl, summ, lgota, vid_lgot) 4 Жатақхана (N_bilet, obshag, srok_proj, data_viezda, N_kom) Алынған мағыналық кестелер арасында келесі байланыстар болады: студент  оқидымамандық мамандық төленедіақы жатақхана  бөлінедістудент ER-диаграмма қортындысынан 2-суреттегі сызбаны аламыз. 2–сурет-ER-диаграмма 6-кезең. Логикалық жобалау кезеңі. Бұл кезеңде қандай да бір таңдалынып алынған МҚБЖ құралымен Деректер моделін таңдау. Деректер моделі – деректер форматы және оларға қолдануға болатын Деректердің иерархиялық, желілік, реляциялық модельдері бар. Кез келген модельде 3 негізгі компонент болады: 1 деректер структурасы – қолданушының көзқарасын сипаттайды. 2 деректер структурасына қолданылатын амалдар 3 толықтылықты шектеу – формальды түрде сипатталған деректер структурасы Бұл жобада деректердің реляциялық моделі қолданылады, себебі онда байланыс Деректер структурасы. Бұл модель негізінде қатынас ұғымы бар, ол деректерді модельдеу Кесте жолдары картеж деп аталады, ол бір объектіні сипаттайды, Толықтылықты шектеу. Мұнда 2 негізгі талап бар: 1 Сілтемелер толықтылығы – күрделі объектілер реляциялық мәліметтер қорында 2 Мазмұнды толықтылық – кез келген қатынастың әрбір картежі Берілген мәліметтер қорының ақпараттық объектілерін келесі сәйкес кілттері мен Студент қатынасы - N_bilet fio data naz adres ... Мамандық қатынасы- spez fakult kurs group N_bilet N_dog ... Ақы қатынасы - N_dog Forma_opl summ lgota Vid_lgot Sem_pol Жатақхана қатынасы N_bilet obshag Srok_proj Data_viezda N_kom Қатынастарды қалыптандыру. Қалыптандыру деп қарастырылып отырған қатынаста қажет емес функционалдық тәуелділіктен Толық ФТ. ФТ толық деп аталады, егер Б атрибуты кез келген Транзитивті ФТ. ФТ транзитивті деп аталады, егер АС және СБ Екі немесе одан көп атрибуттар өзара байланыссыз болады, егер Қатынастың атрибуттар құрамы келесі талаптарды қанағаттандыруы керек: 1 атрибуттар арасында қажетсіз ФТ болмауы керек. 2 атрибуттарды топтау деректердің минималды қайталануын, олардың бөгетсіз жаңалануы Бұл талаптарды қанағаттандыру қатынасты қалыптандыруды білдіреді. Ұсынылып отырған жобада қатынастар 3-ші қалыпты формада, себебі барлық Деректердің даталогиялық моделі. Бұл кезеңде қатынастың атрибуттық құрамы толық ашылады (7-10 кестелер): 7– кесте - Студент қатынасы Атрибут Деректер типі Символ саны Fio Мәтін 20 Data Мерзім Автоматты түрде Naz Мәтін 10 Adres Мәтін 25 N_bilet Санаушы + 8 – кесте - Мамандық қатынасы Атрибут Деректер типі Символ саны Fakult Мәтін 50 Spez Мәтін 7 Kurs Бүтінсан Автоматты түрде Group Мәтін 5 N-bilet Бүтінсан Автоматты түрде N_dog Мәтін 5 9 – кесте - Ақы қатынасы Атрибут Деректер типі Символ саны N_dog Мәтін 5 Forma_opl Мәтін 20 Summ Бүтінсан Автоматты түрде Lgota Мәтін 3 Vid_lgot Мәтін 50 10 – кесте - Жатақхана қатынасы Атрибут Деректер типі Символ саны N_bilet Мәтін 5 Obshag Мәтін 3 Data_viezda Мерзімдік Автоматты түрде Srok_proj Мәтін 15 N_kom Мәтін 4 Келесі кезеңде деректердің логикалық моделі қатынастар схемасы түрінде Бұл құрылатын қорда аномалия жоқ, кестелер қалыптандырылған болып саналады. Үлкен көлемді мәліметтерді сақтау, өңдеу және іздеу үшін компьютерде Мәліметтер қорын басқару жүйесі (МҚБЖ) – бағдарламалық жабдық, оның 3-сурет - Реляциялық мәліметтер қоры кестелерінің байланыс сызбасы істейтін локальді (желілік) мәліметтер қорын құруды қамтамасыз етеді. Дербес 2-БӨЛІМ. DELPHI ОРТАСЫНДА МӘЛІМЕТТЕР ҚОРЫНА РҰҚСАТ АЛУ МЕХАНИЗМДЕРІ Delphi7 бағдарламалау ортасында бірнеше мәліметтер қорына қатынау механизмдері бар: BDE және ODBC механизмдері Delphi көмегімен құрылған және файл-серверлік мәліметтер қорымен жұмыс істеуге Компьютерде BDE орнатылмаса және тіркелмесе Delphi-де жасалған және BDE BDE механизміне ұқсас ODBC (Open Data Base Connection – Microsoft фирмасының өңдеуімен жасалынған МҚБЖ мүмкіндіктерінің өзара байланысы болып ODBC механизмінің негізгі тағайындалуы: қосымшаларды абстрогирлейді, яғни сол арқылы ODBC механизмінің артықшылығы болып оның қосымшаларды өңдеудегі қарапайымдылығы және Негізгі МҚБЖ-ның мүмкіндіктерін пайдаланып, клиент-серверлік қосымша, ал SQL Server-дің Негізгі кемшілігі мәліметтер қорына қатынау жылдамдығын баяулататын сұраныстар трансляциясы Delphi7-де BDE мен ODBC- ден басқа кеңірек қарастырылып отырған ADО механизмі. Delphi-де мәліметтер қорына қатынаудың Borland Database Engine және ADO технологиясы әмбебаптылығының арқасында өңдеушілер арасында танымалдылыққа ие болды. Delphi компоненттерінің палитрасында мәліметтерге ADO арқылы қатынасатын, мәліметтер қорының Microsoft ActiveX Data Objects (ADO) МҚ қосымшаларынан мәліметтерге Мысалы, ADO-ны қолданатын қосымша корпоративті SQL серверде сақталатын мәліметтерге Мынадай сұрақ туындауы мүмкін: бұл сұранысты деректер көзі қалай МҚ серверлерін көп ойлап қажеті жоқ, SQL сұраныстарын өңдеу ADO технологиясына сәйкес кез келген дерек көзі (мәліметтер қоры, Жалпы, ADO технологиясы тек өзіне OLE DB объектілерін ғана Мұндай архитектура объектілер жиынтығы мен интерфейсті ашып әрі кеңейтеді. ADO негізі 4–сурет-Мәліметтерге ADO арқылы қатынау схемасы ағаштық құрылымдар немесе CASE – құралдарының деректері және т.б. ADO технологиясы Windows-тің жүйелік механизмі болып табылатын СОМ стандартты OLE DB спецификациясы объектілерді келесі типтерге бөледі: - Тізімдеуші (Enumenator) дректер көзін немесе басқа да тізімдеуіштерді іздестіреді. - Деректер көзі объектісі (Data Source Object) деректер қоймасын - Сессия(Session) бір деректер қоймасына жүгінетін объектілер жиынтығын біріктіреді; - Транзакция (Trasaction) транзакцияны орындау механизмдерін инкапсулирлейді; - Команда (Command) өзінің бұйрық мәтініне ие және оның орындалуын - Қатарлар жиыны (Rowset) - ADO бұйрығының орындалу нәтижесі болатын - Объект қатесі (Error) ерекше жағдай жайлы ақпаратты қамтиды. Өзін өзі бақылау сұрақтары 1. Дельфи ортасында деректер қоры кестесіне қалай қатынауға болады. 2. Рұқсат алу механизмдері деген не? 3. InterBase механизмі қалай жұмыс істейді? 4. BDE механизмі қалай жұмыс істейді? 5. ODBC механизмі қалай жұмыс істейді? 6. ADO механизмі қалай жұмыс істейді? 2.1 ADO провайдерлері ADO провайдерлері мәліметтерді ADO арқылы қолданатын қосымшаны деректер көзімен Провайдер деректер қоймасының қайда орналасқанын және оның мазмұнын «біледі», Операциялық жүйеде орнатылған провайдерлер тізімі TADOConnection компонентімен байланыс орнатқан Microsoft ActiveX Data Objects инсталляциясы кезінде операциялық жүйеде келесі - Microsoft Jet OLE DB Provider ОАО технологиясының жабдықтауымен Access - Microsoft OLE DB Provider for Microsoft Indexing Service - Microsoft OLE DB Provider for Microsoft Active Directory - Microsoft OLE DB Provider for Internet Publishing, Microsoft - Microsoft Data Shaping Service for OLE DB мәліметтердің - Microsoft OLE DB Simple Provider OLE DB-ның тек - Microsoft OLE DB Provider for ODBC drivers ODBC Бірақ осындай жат нұсқалар байланысын пайдалану қиындыққа әкеледі. ODBC ADO-ны Dеlphi-де жүзеге асыру. Мәліметтерге ADO арқылы қатынасатын механизмдер, көптеген объектілер, интерфейстер, Dеlphi-дің ADO компоненттері. TADOConnection компоненті тізімдеуіштің, деректер көзінің және транзакцияны қабылдау мүмкіншіліктері Қатарлар тізімін TADOTable, TADOQuery, TAOostoredProc компоненттерінің көмегімен алуға болады. ADO компоненттерінің әдістері мен қасиеттері МҚ қосымшасына қажет барлық ADO деректер көзімен байланыстыратын механизмдер. ADO мәліметтеріне қатынайтын компоненттер деректер көзіне байланысатын екі нұсқаны Бірінші жағдайда, деректер көзіне тікелей қатынау үшін компоненттер connectionstring Соnnectionstring қасиеті ADO объектісімен байланысатын ақпаратты сақтауға арналған. Мұнда Connectionstring:='Remote Server=ServerName;Provider=ProviderName'; Қажет жағдайда қашықтатылған провайдер жолы : Connectionstring:='Remote Provider=ProviderName'; және провайдерге қажетті параметрлер көрсетіледі: 'User Name=User_Name;Password=Password'; ADO деректер көзіне қатынайтын әр компонент Соnnectionstring қасиетінде байланыс Бұл технологияны қолданып, Қазақстандағы кадрлық іс жүргізу жұмысын автоматтандыруды Өзін өзі бақылау сұрақтары 1 Провайдер деген не? Атқаратын қызметі? 2 ADO провайдерлері деген не? 3 Қандай стандартты провайдерлер бар? 4 ADO-ны Dеlphi-де қалай жүзеге асырады? 5 ADO компоненттері деген не? Оларды ата. 6 ADO деректер көзімен байланыстыратын механизмдері қандай? 3-БӨЛІМ. МӘЛІМЕТТЕР ҚОРЫН ҚҰРУ ЖӘНЕ БАСҚАРУ Қолданылатын мәліметтер қоры бір немесе бірнеше кестелерден тұрады. Мысалы: vkgu каталогын оның ішінде Primer алиасын құру 1 Жоғарғы мәзірдің TOOLS – DATABASEDESKTOP командасын орындаймыз. 2 Пайда болған терезеде TOOLS – ALIAS MANAGER – NEW 3 Осы терезенің драйвер типі жолында DRIVERTYPE – STANDART деп 4 Осы терезедегі BROWSE батырмасын басып құрылған қапшық жолын көрсетеміз 5 Алиасты BDE-ге жіберу керек пе? Сұрағына «ИӘ» деп жауап 3.1 Мәліметтер қоры кестелерін құру және басқару Жаңа кесте құру. File – New – Table командасын орындаймыз. 1 Кесте форматын таңдау үшін TableType жолында Paradox7 дегенді көрсетіп 2 Келесі терезеде кестенің құрылымын анықтаймыз. Кестенің құрылымы кестеге енетін Alpha – мәтіндік өріс, ұзындығы 255 символға дейін . Number – нақты тип, -10307 нен +10308 дейін. $(Money) – ақшалық тип, алдыңғы тип сияқты. Short – қысқа бүтін тип, -32768 ден +32767 LongInteger – ұзақбүтін тип, -2147483648 ден +2147483647 дейін. #(BCD) – жоғарғы дәлдіктегі нақты тип. Date – дата типі. Time – уақыт типі. @(Timestamp) – дата және уақыт типі. Memo – ұзақ мәтіндік тип, ұзындығы 255 символдан артық. Formatted Memo – форматталған мәтіндік тип (һаріп – шрифт Graphic – Графикалық тип. OLE (Object Linking and Embedding) – осы технологияны ұстанатын Logical – логикалық тип. +(Autoinctement) – санаушы, автоматты түрде мәні 1-ге өсіп отырады. Binary – еркін ұзындықтағы екілік деректер типі. Кілттік өрістің атауы тізімде бірінші орналасып соңына ID әріптері Осы терезеде өрістердің қасиеттері көрсетіледі: Required Field – міндетті түрдегі өріс. Minimum Value – минималды мәні (сандық әрістер үшін). Maximum Value – максималды мәні (сандық әрістер үшін). Default Value – үндемеген немесе атап көрсетпеген жағдайда шығатын Picture – енгізу маскасы. Кестені сақтау үшін Save As батырмасын басып шыққан терезеде Кестенің әрбір жолы өріспен сәйкес келеді. Бағаналардың тағайындаулары:  Fields Name - өріс аты;  Type - өріс типі;  Size - өріс өлшемі (жолдардың өрісі үшін); Key - '*'жұлдыздан құралады, егер өріс алғашқы кілттің Кестені құру шеберін қолдану Деректер қоры кестесін құру үшін Database Desktop (DBD) Жұмысшы псевдонимін орнату үшін бас менюдан File|Working Directory Осыдан кейін деректер қоры (ДҚ) кестесінің структурасын анықтау терезесі Кесте құрылымын анықтау. ДҚ кестесін құру үшін бас FIO өрісінің типін Alpha деп таңдаймыз және Size Дәл осылайша n_bilet өрісін енгіземіз. Бұл студенттердің билет нөмірі 5–сурет - Database Desktop утилиті: ДҚ кестесінің құрылымын анықтау көмегімен тістеп алып, тізімнің басына көтереміз. 6–сурет - Өріс типін таңдау Student кестесінің басқа бағаналарына анықтамаларды 6-суретке - Minimum value - өрістің ең минималды мәнін анықтайды - Maximum value - өрістің барынша үлкен мәнін анықтайды - Default value – өріс мәнін үндемей өзі анықтайды 7-сурет-Materialy кестесінің құрылымын анықтау Picture – өрістің бейнелену шаблонын анықтайды. Шаблон құру Төменде келтіріліп отырған қатынастарды қолдана отырып және 7-суретті басшылыққа мамандық қатынасы Атрибут Деректер типі Символ саны Fakult Мәтін 50 Spez Мәтін 7 Kurs Бүтінсан Автоматты түрде Group Мәтін 5 N-bilet Бүтінсан Автоматты түрде N_dog Мәтін 5 ақы қатынасы Атрибут Деректер типі Символ саны N_dog Мәтін 5 Forma_opl Мәтін 20 Summ Бүтінсан Автоматты түрде Lgota Мәтін 3 Vid_lgot Мәтін 50 жатақхана қатынасы Атрибут Деректер типі Символ саны N_bilet Мәтін 5 Obshag Мәтін 3 Data_viezda Мерзімдік Автоматты түрде Srok_proj Мәтін 15 N_kom Мәтін 4 Кестелерді толтыру және есте сақтау. Кесте құрылымын 8-сурет-Кестені сақтау терезесі Құрылған кесте құрылымын өзгерту. Егер ДҚ бар кестелерге өзгерістер енгізу керек болса, File|Open|Table 9-сурет-Student кестесінің мазмұны Біз DBD-дан кестені жаңа жазбамен толтырғымыз келсе F9 батырмасын Кесте құрлымын өзгерткіміз келсе Table|Restructure меню элементін таңдаймыз. Ізінше Кестені индекстеу. Кесте деталі болып табылатын екінші кесте ("mamandik") құрылымын анықтаймыз 11-кесте - «мамандық» қатынасының кестелік моделі Атрибут Деректер типі Символ саны Fakult Мәтін 50 Spez Мәтін 7 Kurs Бүтінсан Автоматты түрде Group Мәтін 5 N-bilet Бүтінсан Автоматты түрде N_dog Мәтін 5 Өз еркімізбен кесте жазбаларын санаушы ретінде Number өрісін кілттік 10-сурет-Mamandik кестесінің құрылымы «mamandik» кестесін байланыстырушы кілт екенін бақылауға болады. Тағы бір Ескерту. Өте сирек кездесетін жағдай, бірақ мұны Сіздерге қарапайым түрде Ол студент өзіне студенттік билет алсын, бірақ ол студент 10а-сурет-Байланыстырылатын «student», «mamandik» кестелері Бұл екі кестелерді байланыстыру үшін байланыс дәрежесін анықтау керек. - бірге - бір; - бірге - көп; - көпке – бір; - көпке – көп. Егер «student» кестесі мен «mamandik» кестесі «бірге-бір» байланыс дәрежесімен кестені өзгеріссіз қалтырып, бағынышты кестенің структурасын ашамыз (құрал-жабдықтар 11-сурет-Secondary Indexes элементі Жаңа индекс құру үшін, Define батырмасын басамыз. Ашылған диалогтық 12-сурет-Индекс құрамына кіретін өрістерді анықтау Бұл терезедегі Indexed Fields бөлігіне біз қай сыртқы кілт Құрылған индексті осы терезеде бірден көруге болады, егер оны Егер «student» кестесі мен «mamandik» кестесі «бірге-көп» байланыс дәрежесімен 13-сурет-Индексті сақтау терезесі (құрал-жабдықтар тақтасындағы Restructure пернесін басу арқылы) да, структура терезесінің 14-сурет-«mamandik» кестесі үшін анықталған индекс Сілтемелі толықтылықты сақтау Есептің қойылымынан белгілі болғандай «student» кестесі мен «mamandik» кестесі 14а-сурет-Сілтемелік толықтылық командасын таңдау терезесі Сілтемелік толықтылықты құруды әрі қарай жалғастыру үшін Table Properties 15-сурет-Сілтемелік толықтылықты құруға арналған терезе Бұл терезенің Fields бөлімінде бағынышты кестенің өрістер тізімі келтірілген, Бұл терезедегі Cascade командасы қосылса – бағынышты кестеден жазуларды 16-сурет-Сілтемелік толықтылық шартын анықтау таңдап Ok пернесін басамыз. Өзін өзі бақылау сұрақтары: 1 Деректер қоры структурасы деген не? 2 Дельфи ортасында деректер атрибуты немесе өрістерінің қандай типтері бар? 3 Деректер қоры альясы деген не? Ол қалай құрылады? 4 Деректер қоры кестесі қалай құрылады? 5 Индекс деген не? Оның қандай түрлері бар? Кестені орындалады? 6 Сілтемелік толықтылық деген не? Байланысқан кестелер қалай индекстеледі? 7 Деректер қоры структурасын қалай жөндейді? 8 Кестелерді жазулармен қалай толтырады? 3.2 Мәліметтер қоры кестесімен жұмыс DataAccess компоненттер панелінен Ttable компонентін қалыпқа орналастырамыз. Осы объектіні 1 Мәліметтер қорының атауы DatabaseName жолында жазылады (Мысалы Primer). 2 Ttable компонентімен байланысқа түсетін кестені көрсету TableName жолында 3 Осы кестеге программа арқылы қатынасу керек болса Active жолында Осы операциялардан кейн қалыпқа орнатылған компонент көрсетілген мәліметтер қоры Мәліметтерді өңдеуге қолданылатын компоненттер. 1 Деректер кестесі деп аталатын DBGrid компоненті Мәліметтер қоры кестесіндегі жазуларды өшіру, жөндеу, жаңа жазу қосу 2 Навигатор компоненті DBNavigator Бұл компонент кестенің жазуларын навигациялау үшін қолданылады. Навигация жазу 1) First – бірінші жазуға жылжу 2) Prior – алдыңғы жазуға жылжу 3) Next – келесі жазуға жылжу 4) Last – соңғы жазуға жылжу 5) Insert – көрсеткіш орналасқан жазу орнына жаңа жазу қою 6) Delete – ағымдағы жазуды өшіру, егер ConfirmDelete қасиетін True 7) Edit – ағымдағы жазуды жөндеу 8) Post – кестеге енгізілген өзгертулерді сақтау 9) Cansel –енгізілген өзгертулерді сақтамау 10) Refresh – мәліметтер қорынан мәліметтердіжаңадан оқып кестенің жазуларын жаңарту. 3 Деректер тақырыбы (надпись) компоненті DBText: Ұзақ мәтін сақталған өріс жазуларын көрсету, өзгерту үшін қолданылады. 4 Жөндеу өрісі компоненті DBEdit: Ағымдағы жазуды өзгерту, көрсету үшін қолданылады. Алдыңғы компонентке ұқсас. 5 Бейне компоненті DBImage: Мәліметтер қорында сақталған бейнелерді, суреттерді экранға шығаруды орындайды. Егер 6 Деректер тізімін қолдану компоненті DBComboBox: Бұл компонент ашылған тізімнен (сұламалы) деректі таңдау, қолдануды орындайды. 7 Деректер жалаушасы (флажок) компоненті DBCheckBox: Бұл компонент көмегімен екі жағдайдың бірін қабылдайтын өрістердің мәндерін 8 Мәліметтерді топтап ауыстырып-қосу (группа переключателей) компоненті DBRadioGroup: Бұл компонент өрістің шектелген міндер жиынын көрнекі түрде шығаруды Кестені шығару. Кестені экранға екі түрде шығаруға болады: торкөз түрінде, жеке 17-сурет-Student.db кестесін торкөз түрінде шығару қалыбы Ол үшін қалыпқа DataAccess қатпарынан DataSource1, BDE қатпарынан table1, Енді «student» кестесін экранға бір жазбадан шығаруды қарастырайық. Ол 1) Мәліметтер қорының атауы DataBaseName - Primer деп. 2) Кесте атауын TableName – Student.db деп. 3) Кесте активті болсын Active - True деп. 4) TdataSource1 ді белгілеп, DataSet қасиетін - Table1 деп. DataControl панелінен қалыпқа DBGrid компонентінің орнына қажетінше DBEdit Student.db кестесінің структурасына өзгерістер енгізейік. Ол үшін осы кестені Сосын қайта қалыпқа көшіп, DBMemo, DBImage компоненттерін қоямыз 17а-сурет-Student.db кестесіндегі жазбаларды бір-бірден шығару қалыбы Dialogs панелінен OpenPictureDialog1 компонентін қалыпқа әкелеміз. DBImage1 компонентін белгілеп, Begin If OpenPictureDialog1.Execute then begin Table1.Edit; DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName); Table1.Post; End; Бағдарламаны орындауға жіберіп, орындалу режимінде мінездеме деген мемо-өрістің алаңына Өзін өзі бақылау сұрақтары 1 Деректер қорымен жұмыс істеуге арналған қандай қатпарлар бар? 2 DВGrid компоненті не үшін қолданылады? Қасиеттері қандай? 3 DBNavigator компоненті не үшін қолданылады? Қасиеттері қандай? 4 DBText компоненті не үшін қолданылады? Қасиеттері қандай? 5 DBEdit компоненті не үшін қолданылады? Қасиеттері қандай? 6 DBImage компоненті не үшін қолданылады? Қасиеттері қандай? 7 DBComboBox компоненті не үшін қолданылады? Қасиеттері қандай? 8 DBCheckBox компоненті не үшін қолданылады? Қасиеттері қандай? 9 DBRadioGroup компоненті не үшін қолданылады? Қасиеттері қандай? 10 Деректер қоры кестесін экранда көру, жөндеудің қандай әдістері бар? 11 DataSource, Table компоненттері қалай аталады? Қандай қасиеттері бар? Көп кестелік байланыс орнату. Төмендегі атрибуттары анықталған кестелер арасында байланыс орнату керек болсын. 1 Студент(студенттік билет нөмірі, студенттердің аты-жөні, туған мерзімі, т.б.) 2 Мамандық(студенттік билет нөмірі, мамандық нөмірі, топ шифры, т,б,) 3 Факультет(факультет нөмірі, факультет атауы, деканның аты-жөні) 4 Кафедра(кафедра нөмірі, кафедра атауы, кафедра меңгерушісінің аты-жөні, факультет атауы, 5 Оқытушылар(оқытушылар нөмірі, оқытушылар аты-жөні, қызметі, кафедра нөмірі) 6 Староста(топ шифры, староста аты-жөні) Кілттік атрибуттар бола алатын өрістер қалың һәріппен боялған. Әр DataBaseDesktop терезесінде әр кесте үшін Restructure командасын орындап, байланыс 18-сурет-Кестелер арасындағы байланыс сызбасы Дельфиде жаңа жоба құрамыз (19-сурет). Оған қажетті компоненттерді әр Әр компоненттің қасиеттерін тағайындаймыз. Table1 компонентінің қасиеттері: DataBaseName – Primer TableName – student Active – True Datasource1 компонентінің қасиеттері:: DataSet - Table1 19-сурет-Кестелер арасындағы байланыс жобасы DBGrid1 компонентінің қасиеттері:: Datasource – Datasource1 Table2 компонентінің қасиеттері:: DataBaseName – Primer TableName – mamandik MasterSource – DataSource1 (себебі бұл кесте 1-ші, яғни «студент» MasterFields … пернесін басып, шыққан терезеде байланысатын кестелердің атрибуттарын IndexName – nb (индекстік файл атауын көрсетеміз) Active – True Datasource2 компонентінің қасиеттері: DataSet - Table2 Дәл осылай қалған кестелерді байланыстырып, жобаны орындауға жібереміз (F9- Өзін өзі бақылау сұрақтары 1 Байланыс деген не? 2 Байланыстың қандай түрлері бар? 3 Байланысты қалай орнатуға болады? 4 Басшы кесте деген не? 5 Бағынышты кесте деген не? 6 Кілттік өріс деген не? 7 Кілт бойынша байланысты орнату байланыстың қай түріне жатады? 8 Кілттік емес өріс бойынша байланыс орнатылса байланыстың қай түріне 9 Байланысты орнатуға көмектесетін өрістерге қандай шектеулер бар? 10 Индекстік өріс пен кілттік өріс арасында қандай байланыс бар? 3.3 Клиенттік қосымшада жоғарғы мәзір құру Қандай да бір қосымша құру кезінде оның визуальды көрінісін Өздеріңізге таныс компоненттерден басқа (компоненттердің қасиеттерін де білесіз) мына BDE қатпарынан Table1 компонентін қойып TableName қасиетіне student.db деп MainMenu компоненті, Items Menu…пернесін басып, Form1.MainMenu1 терезесінде жоғарғы мәзір Қалыпта пайда болған жоғарғы мәзірдің ішкі мәзірі АШУ – 20-сурет-Жоғарғы мәзірі бар жоба Программа туралы мәтінді жазу үшін Memo1 қойып, Lines String… Form1.Memo1.Visible:=False; Енді мәзірдің ішкі пункттерін анықтаймыз. Ол үшін қалыптағы 1-ші if OpenDialog1.Execute then Form1.Table1.Active:=True; ЖАБУ пункті үшін мына кодты тереміз: Table1.Active:=False; DataSource1.DataSet.Close; Шығу пункті үшін мына кодты жазамыз: close; Анықтама пункті үшін мына кодты тереміз: Form1.DBGrid1.Visible:=False; Form1.DBNavigator1.Visible:=False; Form1.Memo1.Visible:=True; Word-қа экспорттау пернесіне мына кодты жазамыз: procedure TForm1.Button1Click(Sender: TObject); var XLApp,Sheet,Colum:Variant; index,j:Integer; begin Screen.Cursor := crHourGlass; WordApplication1.Connect; WordApplication1.Documents.Add(EmptyParam, EmptyParam, EmptyParam, EmptyParam );//2 WordDocument1.ConnectTo(form1.WordApplication1.ActiveDocument); //------------------ WordApplication1.Options.CheckSpellingAsYouType:=False; WordApplication1.Options.CheckGrammarAsYouType:=False; //------------------- WordApplication1.ActiveWindow.View.TableGridlines := true; WordApplication1.Selection.PageSetup.LeftMargin := 40; WordDocument1.Tables.Add( form1.WordDocument1.Range, form1. Table1.RecordCount + 1, 5 , EmptyParam, EmptyParam );//2 WordDocument1.Tables.Item(1).Columns.Item(1).Width := 30; WordDocument1.Tables.Item(1).Columns.Item(2).Width := 120; WordDocument1.Tables.Item(1).Columns.Item(3).Width := 110; WordDocument1.Tables.Item(1).Columns.Item(4).Width := 90; WordDocument1.Tables.Item(1).Columns.Item(5).Width := 90; WordDocument1.Tables.Item(1).Cell(1,1).Range.Text := '№'; WordDocument1.Tables.Item(1).Cell(1,2).Range.Text := 'Студенттің аты-жөні'; WordDocument1.Tables.Item(1).Cell(1,3).Range.Text := 'Мекен жайы'; WordDocument1.Tables.Item(1).Cell(1,4).Range.Text := 'Туған жылы'; WordDocument1.Tables.Item(1).Cell(1,5).Range.Text := 'Телефоны'; //******************************** Table1.First; i := 1; while not(Table1.Eof) do begin inc(i); WordDocument1.Tables.Item(1).Cell(i,1).Range.Text := Table1.FieldByName('N_bilet').AsString;; WordDocument1.Tables.Item(1).Cell(i,2).Range.Text := Table1.FieldByName('FIO').AsString;; WordDocument1.Tables.Item(1).Cell(i,3).Range.Text := Table1.FieldByName('Adres').AsString; WordDocument1.Tables.Item(1).Cell(i,4).Range.Text := Table1.FieldByName('Data').AsString; WordDocument1.Tables.Item(1).Cell(i,5).Range.Text := Table1.FieldByName('Telephone').AsString; Table1.Next; end; WordApplication1.Selection.WholeStory; WordApplication1.Selection.Font.Size := 12; WordApplication1.Selection.Font.Name := 'Times New Roman'; WordApplication1.Visible := true; Screen.Cursor := crDefault; Table1.First; end; Excel-ге экспорттау пернесіне мына кодты жазамыз: procedure TForm1.Button1Click(Sender: TObject); var XLApp,Sheet,Colum:Variant; index,j:Integer; begin XLApp:= CreateOleObject('Excel.Application'); XLApp.Visible:=true; XLApp.Workbooks.Add(-4167); XLApp.Workbooks[1].WorkSheets[1].Name:='Есеп'; Colum:=XLApp.Workbooks[1].WorkSheets['Есеп'].Columns; Colum.Columns[1].ColumnWidth:=20; Colum.Columns[2].ColumnWidth:=20; Colum.Columns[3].ColumnWidth:=20; Colum.Columns[4].ColumnWidth:=20; Colum.Columns[5].ColumnWidth:=20; Colum:=XLApp.Workbooks[1].WorkSheets['Есеп'].Rows; Colum.Rows[2].Font.Bold:=true; Colum.Rows[1].Font.Bold:=true; Colum.Rows[1].Font.Color:=clBlue; Colum.Rows[1].Font.Size:=14; Sheet:=XLApp.Workbooks[1].WorkSheets['Есеп']; Sheet.Cells[1,2]:='Студенттер туралы мәліметтер'; Sheet.Cells[2,1]:='Студенттік билет нөмірі'; Sheet.Cells[2,2]:='Аты-жөні'; Sheet.Cells[2,3]:='Мекен жайы'; Sheet.Cells[2,4]:='Туған жылы'; Sheet.Cells[2,5]:='Телефоны'; index:=3; Table1.First; for i:=1 to Table1.RecordCount do begin for j:=1 to DBGrid1.Columns.Count do Sheet.Cells[Index, j]:=DBGrid1.Fields[j-1].AsString; Inc(Index); Table1.Next; end; end; Қосымшаны орындауға берсеңіз, жоғарғы мәзірдің көмегімен студенттер туралы деректер Өзін өзі бақылау сұрақтары 1 Клиенттік қосымша деген не? 2 Клиенттік қосымша қалай құрылады? 3 Жоғарғы мәзір деген не? Ол қалай құрылады? 4 Жоғарғы мәзірдің пункттерін қалай бағдарламалайды? 5 Фотосуреттер қалай базада сақталады? 6 Мәтіндік редакторға кестедегі деректерді қалай экспорттайды? 7 WordApplication компоненті не үшін керек? Оның қандай қасиеттері бар? 8 Кестелік процессорға кестедегі деректерді қалай экспорттайды? 9 Excel.Application әдісі нені білдіреді? 10 Кестелік процессормен байланыс қалай орнатылады? 3.4 Мемо-өрістер, бағандарды жөндеу және деректерді іздеуді ұйымдастыру Деректер қорымен жұмыс істеу кезінде мемо-типті деректерді қолдану мүмкіндігі Осы айталған мәліметтер бойынша жұмыс жасау үшін 21-суреттегідей қалып Деректерді іздеуді ұйымдастыру үшін компоненттердің қасиеттерін көрсетеміз. Table1-ді белгілеп, DataBaseName қасиетін Primer деп, TableName қасиетін student Мемо-өрісті толтыру үшін қосымшаны орындауға жіберіп, навигаторлық тақтаның көмегімен Үлкен кестелерден белгілі бір жазуларды таңдау қажет болса оларды 21-сурет-Мемо-өрісті толтыру, бағандарды жөндеу, іздеу жобасы Function.Locate(const KeyFields: string; const KeyValues: Variant; Options: Бұл әдісте параметрлер ретінде өрістер атаулары алынады. «Іздеу» деп аталатын Button1 пернесін 2 рет шертіп, мына procedure TForm1.Button1Click(Sender: TObject); begin Form1.Query1.Locate('Fio', Edit1.Text, [LoPartialKey, LoCaseInsensitive]); end; end. [LoPartialKey, LoCaseInsensitive] параметрлері – аты-жөні бойынша іздеу кезінде регистрге Егер іздеуді аты-жөні өрісімен емес басқа өріс арқылы жүргізу Тағы бір мысал қарастырайық. Қандайда бір фирманың клиенттері туралы Form1 қалыбында тақырыптары «адам есімі бойынша іздеу», Locate әдісін қолданамыз. Келесі ретпен жазамыз: 1 кілттік өріс 2 іздеуге жататын дерек қайдан алынады 3 іздеу параметрлері: LoCaseInsensitive – бас әріптер есепке алынбайды LoPartialKey – дербес кілт «Іздеу» компонентіне программалық код жазамыз: Var KeyField:string; Begin If RadioButton1.Checked=treu then Begin KeyField:= ‘ClientName’; End; If RadioButton2.Checked=True then begin KeyField:=’Phone’; End; If RadioButton3.Checked=True then begin KeyField:=’Adress’; End; Table1.Locate(KeyField.Edit1.Text, [LoCaseInsensitive.LoPartialKey]); End; Қосымшаны орындап, мәліметтерді енгізіп, іздеудің нәтижесін көріңіз. Студенттер мәліметтер қорында іздеу операциясын әртүрлі әдіспен орындап көрсетіңіз. Егер деректер базасын қарау кезінде DBGrid компонентін қолдансаңыз, 22-сурет-ColumnsEditor терезесі оның бағандарының атауы базадағы сияқты ағылшын әріптерімен жазылып тұрады, DBGrid1-ті белгілеп, тышқанның оң жақ пернесін басу ColumnsEditor командасын орындау керек, сонда 22-суреттегідей терезе ашылады. Терезедегі 23-сурет-Бағандар қасиетін тағайындау терезесі келесі мәндерді тағайындау: FieldName – кестедегі 1-ші өріс атауы, Title – Caption Фильтр – сүзу. Деректер кестесі жазуларынан белгілі бір шартты қанағаттандыратын жазуларды сүзіп Мысалы фамилиялары А әрпінен басталатын студенттердің тізімін сүзіп алу Егер фильтрді алып тастау керек болса, онда Filtered қасиетін 23а-сурет-Фильтр нәтижесін көру терезесі Егер фильтрді бағдарлама көмегімен орындау керек болса, бірнеше әдісі Tbutton OnClick оқиғасына код жазамыз. Begin If RadioButton1.Checked=true then begin Table1.Filter:=’FIO='''+Edit1.Text+'*'+''''; End; If RadioButton2.Checked=true then begin Table1.Filter:=’Adres='''+Edit1.Text+'*'+''''; End; If RadioButton3.Checked=true then begin Table1.Filter:=’Telephone='''+Edit1.Text+'*'+''''; End; Table1.Active:=True; Table1.Filtered:= True; End; Өзін өзі бақылау сұрақтары 1 Мемо өрістер деген не? Олар қалай толтырылады және базаға 2 Кесте бағандарын қалай қазақшалауға болады? 3 Іздеу деген не? Оның неше түрі бар? Олар қалай 4 Деректерді сүзу деген не? 5 Сүзуді орындаудың неше амалы бар? 6 Query1 компоненті не үшін қажет? Оның қандай негізгі қасиеттері 3.5 Сұраныс құру Сұраныс құру компоненті query деп аталады. Бұл компоненттің екі SELECT операторы SQL тілінің негізгі операторы болып табылады. Ол Оператордың жазылуы келесідей: SELECT өрістер тізімі FROM кесте атауы; Мысалы: SELECT FIO, Adres FROM student.db Паскаль тіліндегідей Select, From сөздері SQL тілінің Сұранысты құру үшін Query1 компонентін қойып, Query1 компонентін белгілеп, Егер сұранысқа барлық өрістерді енгізу керек болса, * символын Select * From student.db Шарт бойынша мәліметтерді жинақтау үшін Where қызметші сөзінен кейін SELECT өрістер тізімі FROM кесте атауы WHERE Мысалы: SELECT * FROM student.db WHERE stipendia>=12000 and stipendia 0 then begin Form1.USER := ADOQuery1.FieldByName('kod').AsInteger; Form1.Show; Visible := False; end else begin Application.MessageBox('Логин немесе купиясоз кате терілген', ''); edPassword.Text := ''; end; Ал жүйеге енгізуден бас тарту үшін тағы бір BitButton Теңестіруден өткеннен кейін «Кадрлар бөлімі» деп аталатын форма ашылады. Соның біріншісі – «Бөлім» деп аталады, мұнда қызметкерлердің қандай Form1.ADOQuery1.Filtered:=true; t:=ADOQuery1.RecordCount; Form1.Caption:='Кадрлар болімі - Администрацияда '+IntToStr(t)+'-адам бар'; Соңғы жолда Администрацияда неше адам қызмет атқаратынын есептеу келтірілген. Қызметкердің фотосын шығару үшін OpenDialog1, сосын DBImage1 компоненттерін қойып, procedure TForm1.DBImage1DblClick(Sender: TObject); begin if OpenDialog1.Execute then begin ADOQuery1.Edit; DBImage1.Picture.LoadFromFile(OpenDialog1.FileName); end;end; 46-сурет-«Кадрлар бөлімі» жобасының басты формасы «Кадрлар бөлімі» формасында негізгі және маңызды болып есептелетін алты procedure TForm1.Button1Click(Sender: TObject); var s:string; begin if ComboBox1.Text'Таңдау жасау' then begin if ComboBox1.Text='Аты-жоні' then s:='atiJoni'; if ComboBox1.Text='Туганкуні' then s:='tugankuni'; if ComboBox1.Text='Мекенжайы' then s:='mekenjai'; if ComboBox1.Text='Стаж' then s:='Staj'; if ComboBox1.Text='Уйтелефон' then s:='telui'; if ComboBox1.Text='Уялытелефон' then s:='telsot'; if ComboBox1.Text='Кызметі' then s:='kizmeti'; ADOQuery1.Locate(s,Ed_poisk.Text,[loCaseInsensitive,loPartialKey]); end else ShowMessage('өріс таңдаңыз'); end; «Фильтрлеу» пернесін шерту оқиғасына мына кодты жазамыз: procedure TForm1.Button2Click(Sender: TObject); var ap,pr,pole:String; begin ap:=''''; pr:='*'; if RG_Filtr.ItemIndex-1 then begin if RG_Filtr.Items[RG_Filtr.ItemIndex]='Аты-жоні' then pole:='atiJoni'; if RG_Filtr.Items[RG_Filtr.ItemIndex]='Мекен жайы' then pole:='mekenjai'; if RG_Filtr.Items[RG_Filtr.ItemIndex]='Туган куні' then pole:='tugankuni'; if RG_Filtr.Items[RG_Filtr.ItemIndex]='Кызметі' then pole:='kizmeti'; if RG_Filtr.Items[RG_Filtr.ItemIndex]='Білімі' then pole:='bilimi'; if RG_Filtr.Items[RG_Filtr.ItemIndex]='Стаж' then pole:='Staj'; if RG_Filtr.Items[RG_Filtr.ItemIndex]='Жануялык жагдайы' then pole:='januialikjag'; if RG_Filtr.Items[RG_Filtr.ItemIndex]='Жынысы' then pole:='jinisi'; ADOQuery1.Filtered:=false; ADOQuery1.Filter:=pole+'='+ap+Ed_filtr.Text+ap; ADOQuery1.Filtered:=true; end else ShowMessage('Шарт танданыз'); end; Фильтрді алып тастау үшін мына кодты жазамыз: procedure TForm1.Button3Click(Sender: TObject); begin ADOQuery1.Filtered:=false; end; 47-сурет-Жеке парақ үлгісі Қызметкер жұмысқа қабылданғаннан кейін оның жеке парағын да автоматты Бас мәзірдің екінші пункті – «Іс-қимыл» бөлігі, мұнда қызметкерлерді frm_Prin_Rab.Show; form1.Enabled:=false; Form11.enabled:=false; «Жұмысқа қабылдау» қалыбындағы бос орындар сәйкесінше толтырылады да Form1.ADOQuery1.First; Form1.ADOQuery1.Append; Form1.ADOQuery1['atiJoni']:=Ed_fio.Text; Form1.ADOQuery1['mekenjai']:=Ed_adres.Text; Form1.ADOQuery1['telui']:=Ed_tel.Text; Form1.ADOQuery1['telsot']:=Ed_sot.Text; Form1.ADOQuery1['tugankuni']:=Ed_god_rozh.Text; Form1.ADOQuery1['kizmeti']:=Ed_dolzh.Text; Form1.ADOQuery1['bilimi']:=CB_obraz.Text; Form1.ADOQuery1['azamattik']:=Ed_grazh.Text; Form1.ADOQuery1['ulti']:=Ed_nacia.Text; Form1.ADOQuery1['januialikjag']:=CB_Sem_pol.Text; Form1.ADOQuery1['Staj']:=Ed_stazh.Text; Form1.ADOQuery1['jinisi']:=CB_pol.Text; if CB_child.Checked then Form1.ADOQuery1['balalari']:=true else Form1.ADOQuery1['balalari']:=false; Form1.ADOQuery1['bolim']:=CB_Otdel.Text; Form1.ADOQuery1.Post; frm_Prin_Rab.Hide; form1.Enabled:=true; end; Ал қызметкер жұмысқа алынатын болған жағдайда бағдарлама автоматты түрде Form4.QRL_fio.Caption:=Ed_fio.Text; form4.Label1.Caption:=frm_Prin_Rab.Ed_dolzh.Text; Form4.QRM_rab.Lines.Clear; Form4.QRM_rab.Lines.Add('"Жумысшы"'); Form4.QRM_rab.Lines.Add(Ed_fio.Text); 48-сурет- «Жұмысқа қабылдау» бөлігінің формасы Form4.QRM_rab.Lines.Add('Мекен-жай: '+Ed_adres.Text); Form4.QRM_rab.Lines.Add('Телефон: '+Ed_tel.Text); form4.QRLabel21.Caption:=form1.Edit1.Text ; Form4.QuickRep1.Preview; end; 49-сурет-Келісімшарт үлгісі «Іс-қимыл» пунктіндегі «Жұмыстан шығару» командасын басқанда белгіленіп тұрған қызметкер Бұл формадағы «Бұйрық» пернесін шерту оқиғасына мына кодты жазамыз: form6.QRLabel22.Caption:=form14.ADOQuery1['atijoni']; form6.QRLabel25.Caption:=form14.ADOQuery1['kizmeti']; form6.QRLabel23.caption:=form14.Edit1.Text; form6.QRLabel29.caption:=form14.ADOQuery1['atijoni']; form6.QRLabel30.caption:=form14.Edit1.Text; form6.QuickRep1.Preview; end; 50-сурет-Жұмыстан босату өкімі формасы Бұл кодтың орындалуы үшін 6-форма құрып, оған жұмыстан босату 51-сурет-Жұмыстан босату бұйрығының үлгісі Жұмыстан шығару туралы өкім шығарылғаннан кейін қызметкер туралы деректі procedure TForm14.Button2Click(Sender: TObject); begin with dm.GetTempQuery do try Close; SQL.Text := 'DELETE FROM sapar WHERE fionom = ' ADOQuery1.FieldByName('kod').AsString; ExecSQL; finally Free; end; ADOQuery1.Delete; Form10.ADOQuery1.Active := False; Form10.ADOQuery1.Active := True; end; «Іс-қимыл» бөлігінің «Статистика» бөлімінде жалпы мекеменің қызметкерлерінің орташа жас Бұл амалдарды орындау үшін «Есептеу» батырмасына мына кодты жазамыз: 52-сурет-«Статистика» пішіні procedure TForm13.Button1Click(Sender: TObject); var bilimi,otd:string; t,i,s,d,dd,s1:integer;p:string;ddd:real; begin s1:=0; Form13.ADOquery1.First; i := 1; while not(form13.ADOquery1.Eof) do begin inc(i); s:=strtoint(mes_f(form13.ADOQuery1['tugankuni'])); p:=mes_f(DateToStr(Date)); d:=strtoint(p); dd:=d-s; s1:=s1+dd; form13.ADOquery1.Next; ddd:=s1/form13.ADOQuery1.recordcount; form13.Edit1.Text:=floattostr(ddd); end; begin otd:='jinisi'; form13.ADOQuery1.Filtered:=false; form13.ADOQuery1.Filter:='jinisi='+''''+'Ер'+''''; ADOQuery1.Filtered:=true; t:=ADOQuery1.RecordCount; form13.Edit2.Text:=IntToStr(t); end; begin otd:='jinisi'; form13.ADOQuery1.Filtered:=false; form13.ADOQuery1.Filter:='jinisi='+''''+'Әйел'+''''; ADOQuery1.Filtered:=true; t:=ADOQuery1.RecordCount; form13.Edit3.Text:=IntToStr(t); end; begin otd:='bilimi'; form13.ADOQuery1.Filtered:=false; form13.ADOQuery1.Filter:='bilimi='+''''+'жоғары'+''''; ADOQuery1.Filtered:=true; t:=ADOQuery1.RecordCount; form13.Edit4.Text:=IntToStr(t); end; begin otd:='bilimi'; form13.ADOQuery1.Filtered:=false; form13.ADOQuery1.Filter:='bilimi='+''''+'орта арнаулы'+''''; ADOQuery1.Filtered:=true; t:=ADOQuery1.RecordCount; form13.Edit5.Text:=IntToStr(t); end; begin otd:='bilimi'; form13.ADOQuery1.Filtered:=false; form13.ADOQuery1.Filter:='bilimi='+''''+'орта'+''''; ADOQuery1.Filtered:=true; t:=ADOQuery1.RecordCount; form13.Edit6.Text:=IntToStr(t); end; end; Мұндағы mes_f функциясы қызметкерлердің туған датасынан тек қана function mes_f(d:String):string; var i:word;f:boolean; begin mes_f:=''; i:=0; f:=false; repeat if d[i]='.' then begin mes_f:=d[i+1]+d[i+2]; f:=true; end; i:=i+1; until f; end; Бас мәзірдің үшінші бөлігі «Анықтама» деп аталған. Мұнда біз 53-сурет-«Кадрлар бөлімі» жайлы анықтама Бұл форматтағы файлдарды оқыту үшін «Анықтама» пунктіндегі «Кадрлар бөлімі procedure TForm1.N5Click(Sender: TObject); begin ShellExecuteA(Application.Handle,nil,'index.htm',nil,nil,SW_SHOWNORMAL); end; «Анықтама» пунктіндегі «Бағдарлама жайлы» командасына мына кодты жазамыз: procedure TForm1.N4Click(Sender: TObject); begin AboutBox.ShowModal; end; Бағдарлама жайлы мәтінді AboutBox формасына жазуға боады, ол үшін «Анықтама» пунктіндегі «ҚР Еңбек Кодексі» командасына мына кодты жазамыз: procedure TForm1.N9Click(Sender: TObject); begin ShellExecuteA(Application.Handle,nil,'index1.htm',nil,nil,SW_SHOWNORMAL); end; Бұл код орындалу үшін ҚР Еңбек кодексін htm форматпен Ал, жобаның екінші формасында күнтізбе орнатылған (54-сурет). Бұл бізге 54-сурет-Күнтізбе Бас мәзірдің 4-ші бөлігі «Өкімдер» деп аталады, онда «Жұмысқа «Өкімдер» пунктінің «Жұмысқа қабылдау» командасына мына кодты жазамыз: 55-сурет-Жұмысқа қабылдау өкімінің үлгісі procedure TForm1.N12Click(Sender: TObject); begin form6.QRLabel21.caption:=form1.DBEd_fio.Text; form6.QRLabel18.Caption:=form1.DBEd_dolzh.Text; form6.QRLabel7.caption:=form1.DBEd_dat.Text; form6.QRLabel4.Caption:=form1.DBEd_fio.Text; form6.QRLabel6.Caption:=form1.DBEd_dat.Text; form6.QuickRep3.Preview; end; Бұл команда орындалуы үшін 6-форма құрып, оған Жұмысқа қабылдау «Өкімдер» пунктінің «Жұмыстан босату» командасына мына кодты жазамыз: procedure TForm1.N13Click(Sender: TObject); begin form14.Show; end; Сонда 14-формадағы қызметтер атқарылады. «Өкімдер» пунктінің «Еңбек демалысынан шақыру» командасына мына кодты жазамыз: procedure TForm1.N16Click(Sender: TObject); begin form6.QRLabel68.caption:=form1.DBEd_dolzh.Text; form6.QRLabel69.caption:=form1.DBEd_fio.Text; form6.QRLabel70.caption:=form1.Edit1.Text; form6.QuickRep4.Preview; end; Бұл код орындалуы үшін 6-формада «Еңбек демалысынан шақыру» өкімінің 56-сурет-«Еңбек демалысынан шақыру» өкімінің ұлгісі Егер қызметкерді басқа қызметке тағайындау керек болса, «Өкімдер» пунктінің 57-сурет-Қызметке тағайындау өкімінің үлгісі procedure TForm1.N17Click(Sender: TObject); begin form6.QRLabel77.caption:=form1.DBEd_fio.Text; form6.QRLabel80.caption:=form1.DBEd_dat.Text; form6.QRLabel82.caption:=form1.DBEd_dolzh.Text; form6.QRLabel85.caption:=form1.DBEd_dat.Text; form6.QuickRep5.Preview; end; Бұл код орындалуы үшін 6-формада «Тағайындау» өкімінің үлгісін жасау procedure TForm1.N18Click(Sender: TObject); begin form6.QRLabel97.caption:=form1.DBEd_dolzh.Text; form6.QRLabel98.caption:=form1.DBEd_fio.Text; form6.QRLabel104.caption:=form1.Edit1.Text; form6.QRLabel105.Caption:=form1.DBEd_fio.Text; form6.QuickRep6.Preview; end; Бұл код орындалуы үшін 6-формада «Тәртіптік жаза беру» өкімінің Бас мәзірдің келесі бөлігі «Бұйрықтар» деп аталады, онда «Ескерту 58-сурет-Тәртіптік жаза беру өкімінің үлгісі Егер қызметкерге қандай да бір өрескелдігі үшін ескерту берілсе, procedure TForm1.N20Click(Sender: TObject); begin form7.QRLabel3.caption:=form1.DBEd_dolzh.Text; form7.QRLabel4.caption:=form1.DBEd_fio.Text; form7.QRLabel12.caption:=form1.Edit1.Text; form7.QuickRep1.Preview; end; Бұл код орындалу үшін 7-формада «Ескерту жариялау» бұйрығының үлгісін 59-сурет-Ескерту жариялау бұйрығының үлгісі «Бұйрықтар» пунктінің «Іс сапарға жіберу» командасына мына код жазылады: procedure TForm1.N21Click(Sender: TObject); begin form10.Show; end; 60-сурет-Іссапарға жіберу формасы Жобаның 10-формасында қызметкерлерді іссапарға жіберу пішіні тағайындалған (60-сурет). Мұнда кестедегі дайын деректерді пайдаланып, яғни іссапарға жіберілетін қызметкердің 61-сурет-Іссапарға жіберу туралы бұйрық үлгісі созылатынын пішінге әкелініп қойылған күнтізбеден көрсетілетін болады. Содан кейін «Бұйрықтар» пунктінің «Еңбек демалысына жіберу» командасына мына кодты жазамыз: procedure TForm1.N15Click(Sender: TObject); begin form9.Show; end; Жобаның 9-формасында қызметкерлерді еңбек демалысына жіберу пішіні жасалды (62-сурет) 62-сурет-Қызметкерлерді еңбек демалысына жіберу формасы Бұл форманың «Растау» пернесін шерту оқиғасына мына кодты жазамыз: procedure TForm9.Button2Click(Sender: TObject); begin form6.QRLabel47.Caption:=form9.DBEdit2.Text; form6.QRLabel48.Caption:=form9.DBEdit1.Text; form6.QRLabel59.Caption:=form9.DBEdit1.Text; form6.QRLabel49.Caption:=form9.Edit3.Text; form6.QRLabel52.Caption:=form9.Edit4.Text; form6.QRLabel53.Caption:=form9.Edit1.Text; form6.QRLabel55.Caption:=form9.Edit2.Text; form6.QRLabel60.Caption:=form9.Edit1.Text; form6.QuickRep2.Preview; form1.show; form1.enabled:=true; end; Бұл код орындалу үшін 6-формада «Еңбек демалысы туралы» бұйрығының Егер қызметкер жұмыстан шыққан болса, оның орны вакантты деп procedure TForm1.N19Click(Sender: TObject); begin Form12.Show; end; 64-сурет-Еңбек демалысы туралы бұйрықтың үлгісі Бұл код орындалу үшін 12-формада Вакансияны анықтап, конкурс жариялау 65-сурет-Вакантты орындарды анықтау формасы. Мұндағы «Конкурс» пернесін шерту оқиғасына мына код жазылады: procedure TForm12.Button1Click(Sender: TObject); begin Form7.lbKizmet.DataSet := Form12.qrGetVacant; Form7.lbKizmet.DataField := 'kizmet'; Form7.QuickRep3.Preview; end; Бұл код орындалуы үшін 7-формада конкурс жариялау үлгісі жасалып 66-сурет-Конкурс дариялау үлгісі Бас мәзірдің соңғы бөлігі «Сервис» деп аталады, онда «Журнализация» Өзін өзі бақылау сұрақтары 1. Ақпараттық жүйе деген не? 2. Ақпараттық жүйенің түрлері? Қолданысы? 3. Ақпараттық жүйенің құрамы? 4. Ақпараттық жүйелерді құру әдістері? 5. Автоматтандырылған ақпараттық жүйелерді құру қай бағдарламаға негізделген? 4.2 Мәліметтер қоры өзгерісін журналға тіркеу Дамыған мәліметтер қорын басқару жүйесіне қойылатын басты талаптардың бірі Қайта қалпына келтірудің жалпы қағидалары: - тіркелген транзакциялардың нәтижесі мәліметтер қорының қалпына келтірілген күйінде сақталуы - тіркелмеген транзакциялардың нәтижесі мәліметтер қорының қалпына келтірілген күйінде сақталмауы Мәліметтер қорын қайта қалпына келтіру кезінде келесідей жағдайлар кездесуі - Транзакцияның жеке дара шегінуі. ROLLBACK операторымен аяқталатын транзакцияның шегінуі - Жедел жадының деректерін жоғалтқан кезде қайта қалпына келтіру - Мәліметтер қорын тасушы негізгі сыртқы жадтың бұзылуы (қатаң ақау). Қайта қалпына келтірудің үш түрінің негізінде де мәліметтерді артық Журналдық ақпаратты жүргізудің екі нұсқасы бар. Бірінші нұсқасында әр Журнал жүргізу – мәліметтер қорымен операциялар журналын жүргізу. Операторлардың Журналға келесі ақпараттар тіркеледі: - реттік нөмірі, типі және өзгерген мерзімі; - транзакцияның идентификаторы; - өзгеріске ұшыраған объект (сақталған файл нөмірі мен ондағы деректер блогінің нөмірі, блок ішіндегі жолдың нөмірі); - объектінің алдыңғы жағдайы мен соңғы жағдайы. Осылайша құрастырылған ақпарат мәліметтер қорының өзгерістер журналы болып табылады. «Сервис» пунктінің «Журнализация» командасына мына кодты жазамыз: procedure TForm1.N23Click(Sender: TObject); begin with TdfShowLog.Create(Application) do begin ShowModal; Free; end; end; Бұл код орындалу үшін жаңа форма құрып оның атауын 1-формадағы процедуралар тізіміне procedure DataSource1StateChange(Sender: TObject); атауын жазамыз да, оның кодын {$R procedure TForm1.DataSource1StateChange(Sender: TObject); begin if DataSource1.State = dsEdit then IsAppend := False else if DataSource1.State = dsInsert then IsAppend := True else IsAppend := False; end; Мұндағы IsAppend айнымалысы ақиқат және жалған Журналға қолданушылардың қандай операция орындағанын анықтайтын 67-сурет-Журнализацияны жүргізу формасы бағдарлама кодын жазу үшін 1-формадағы ADOQuery1 компонентін белгілеп, Object procedure TForm1.ADOQuery1AfterPost(DataSet: TDataSet); begin qrLog.Edit; qrLog.Append; qrLog.FieldByName('user').AsInteger := USER; qrLog.FieldByName('evtdate').AsDateTime := Now; qrLog.FieldByName('rowid').AsInteger := ADOQuery1.FieldByName('kod').AsInteger; if IsAppend then begin qrLog.FieldByName('action').AsInteger := 1; qrLog.FieldByName('message').AsString := 'Жана жазба енгізілді'; end else begin qrLog.FieldByName('action').AsInteger := 2; qrLog.FieldByName('message').AsString := 'Жазба озгертілді'; end; qrLog.Post; IsAppend := False; end; Мұндағы qrLog 1-формада қойылған ADOQuery3 компонентінің атауы. 1-форманың экранда көріну оқиғасына мына кодты жазамыз: procedure TForm1.FormShow(Sender: TObject); begin qrLog.Edit; qrLog.Append; qrLog.FieldByName('user').AsInteger := USER; qrLog.FieldByName('evtdate').AsDateTime := Now; qrLog.FieldByName('rowid').AsInteger := 0; qrLog.FieldByName('action').AsInteger := 4; qrLog.FieldByName('message').AsString := 'Жуйеге кіру'; qrLog.Post; end; 1-форманың жабылу оқиғасына мына кодты жазамыз: procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin qrLog.Edit; qrLog.Append; qrLog.FieldByName('user').AsInteger := USER; qrLog.FieldByName('evtdate').AsDateTime := Now; qrLog.FieldByName('rowid').AsInteger := 0; qrLog.FieldByName('action').AsInteger := 5; qrLog.FieldByName('message').AsString := 'Жуйеден шыгу'; qrLog.Post; end; Бұл кодтар арқылы қолданушылардың жүйеге кіргені, шыққаны туралы ақпарат 68-сурет-Журнализация формасының нәтижесі Өзін өзі бақылау сұрақтары 1 Мәліметтер қорын қалай сенімді сақтауға болады? 2 Транзакция деген не? 3 Оның қандай түрлері бар? 4 Тіркелген транзакциялар қандай нәтиже береді? 5 Тіркелмеген транзакциялар қандай нәтиже береді? 6 Транзакцияның жеке дара шегінуі деген не? 7 Транзакцияның бекітілуі деген не? 8 Жеңіл ақау деген не? Ол қалай анықталады? 9 Қатаң ақау деген не? Ол қалай анықталады? 10 Журнал жүргізу не үшін қажет? 11 Журналға қандай ақпараттар тіркеледі? 5-БӨЛІМ. СЕРВЕРЛІК МӘЛІМЕТТЕР ҚОРЫ ЖӘНЕ INTERBASE СЕРВЕРІМЕН ТАНЫСУ Мұндай МҚ бір немесе бірнеше компьютерлерде орналасады. МҚ серверлері SQL-срверлердің көпшілігі SQL-командаларды және басқа да қосымша қызметтерді орындайды. SQL тілі локальды МҚ-мен де жұмыс істейді, бірақ SQL-серверлермен SQL-серверлерге жататын программалар: InterBase, Oracle, SyBase, Informix, MS SQL Server, DB2. МҚ типін таңдағанда келесі факторларды ескеру қажет: - МҚ-на бірмезгілде қосылатын қолданушылар саны. SQL-серверлер бірмезгілде көпқолданушылықты - Сақталатын деректер көлемі. SQL-серверлер көп деректерді сақтай алады, - Администраторлық қызметтерді қолдану қажеттілігі. Локальды МҚ-да SQL-серверге - Сенімді қауіпсіздіктің қажеттілігі. МҚ көп жағдайда конфиденциальды ақпараттан Сонымен локальды МҚ келесі талаптарға сай қолданылады: 1 МҚ кестелерінде жазулар саны 10000-нан жоғары болмаса. 2 МҚ-н қолданатын қолданушылар саны аз болса. 3 Күрделі администраторлық, қорғау қызметтері қажет болмаса. 5.1 INTERBASE локальды сервері 1 Серверді іске қосу Бұл сервер екі режимде іске қосылады: қолмен және автоматты 1) Сервис түрінде 2) Қосымша түрінде (Windows95/98-де әрқашан қосымша түрінде қосылады). InterBase –тің құрамында оның іске қосылу режимі мен деңгейін 2 Сервердің қосылғандығын тексеру Windows95/98-де InterBase сервер жұмыс істеп тұрғанда тапсырмалар тақтасындағы оң 3 Серверде тіркелу. Сервердің орнатылғанын білгеннен кейін онда тіркелу үшін: ПУСК-ПРОГРАММЫ-InterBase – Оның терезесі келесі компоненттерден тұрады: - Мәзір – серверді басқару командалары бар - Құралдар тақтасы – мәзір командаларын жылдам орындаушы құралдар - Бұтақтар терезесі – серверде тіркелген серверлер мен МҚ иерархиясын - Жұмыс терезесі – сол жақ бөліктегі бұтақтар туралы толық - Жағдай жолы – қай сервердің таңдалғаны, қолданушы туралы ақпарат IBConsole программасы сервермен жұмыс істеуі үшін оны тіркеу қажет. Терезенің жұмыс облысында серверде пайда болған қолданушы туралы ақпарат 4 Мәліметтер қорын құру. InterBase-те мәліметтер қоры файл түрінде сақталады, типі .gdb болады. 1 Alias – мысалы Студент – МҚ атауы 2 Files бөлігінде құрылатын МҚ-ң қай жерде сақталатын жолы 3 PageSize Әрі қарай әр беттің ұзындығы 4096 деп 4 Default chatacter set – символдар қай форматпен енгізілетіні көрсетәлуі 5 SQL Dialect - 1 деп көрсетіп OK-ді басады. Құрылған МҚ-на қосылу үшін IBConsole терезесіндегі МҚ атауын МҚ бойынша интерактивті SQL – сұраныстармен жұмыс істеуге болады. Оқушылар кестесін құрайық: жеке нөмірі, тегі, есімі, әкесінің есімі, Егер ірі мәліметтер қоры құрылса, онда өте көп кесте Оқушылардың тегі туралы бағанға домен құру үшін: Create Domain fio Char(20) not Null деп жазып, орындау Енді осы доменді өшіру керек болса: DROP DOMAIN FIO Create, Drop, Alter сөздерінен басталатын командаларды SQL-дің DDL-типті командалары Серверде деректердің өзгерісі транзакция түрінде іске асады. Транзакцияның 4 1 Атомарлық – «барлығы немесе ештеңе» принципі сияқты, орындауға жіберген 2 Толықтылық – транзакция МҚ-н бір жағдайдан толық 2-ші жағдайға 3 Изоляциялану – транзакция басқа транзакцияларды көрмеуі керек. 4 Әрекеттілік – транзакция бекіткен өзгерістер міндетті түрде күш алуы Транзакция орындалды деп есептеледі, егер арнаулы растау, бекіту бар Әр сценарий МҚ-на қосылудан басталуы керек: Connect ‘d:\ib\Студент.gdb’ User ‘Student’ password ‘silver’ DDL –сұраныстарды блокнотта жазып, сақтаған уақытта типін .sql деп Мысалы: Connect ‘d:\ib\Студент.gdb’; User ‘Student’ password ‘silver’; Create Domain n_bilet integer not null; Create Domain n_adres char(20) not null; Create Domain n_sempol char(10) not null; Create Domain n_Datar Date not null; Осы сценарийді жазған соң сақтау кезінде файл атауын “domain.sql” Домендер белгілі болған соң кестені құру этабына өтуге болады. CREATE TABLE Student ( Bilet n_bilet, Adres n_adres, Sempol n_sempol, Datar n_Datar, Primary key (Bilet) ) Орындауға беру үшін Query – Execute командаларын орындау керек. Егер барлық амалдар дұрыс орындалса, онда STUDENT деген МҚ-ң Оны тексеру үшін IBConsole терезесінде Tables қатпарын таңдау керек, 5.2 Индекс құру Create Index индекстік файл атауы on кесте атауы(атрибут) Create Index stud on student(fio) – көрсетілген атрибут fio Create Index stud1 on student(datar) - көрсетілген атрибут datar Құрылған индекстер туралы ақпарат алу үшін: - IBConsole терезесінде Tables қатпарынан Студент МҚ-н таңдау керек. Сонда - Кестені белгілеп, тышқанның оң жағын басып, Қасиеттер Properties командасын Кестеге мәліметтер енгізу. ISQL – сұраныстар терезесінде мына команданы орындау керек: Insert Into кесте атауы (кесте атрибуттары) Values (атрибут мәндері) Бұл команданы орындамас бұрын символдарды жазу үшін кириллицаның орнатылуын Insert Into student (bilet, fio, datar, adr, sempol) Values Өзгерісті МҚ-нан бақылау үшін Select * from student командасын Сұраныстан шығу. IBConsole терезесінен шығу. Сұраныстан шығу үшін: File – Close командасын орындап, шыққан хабарламаға Yes деп IBConsole терезесінен шығу үшін Console – Exit командасын орындайды. Өзін-өзі бақылау сұрақтары: 1 Серверлік мәліметтер қорын құру қалай іске асады? 2 InterBase сервері не үшін қажет? 3 SQL-срверлер деген не? 4 SQL-серверлерге жататын программалар 5 Серверді іске қосу 6 Серверде тіркелу 7 Серверде мәліметтер қорын құру 8 IBConsole утилитасы не үшін керек? 9 SQL – сұраныстар деген не? Ол қалай құрылады? 10 Домен құру 11 Транзакция деген не? Транзакцияның 4 қасиеті 12 Кесте құру этабын түсіндір 13 Индекс құру қалай орындалады? 14 Кестеге мәліметтер енгізу қалай орындалады? 15 Сұраныстан шығу. IBConsole терезесінен шығу. 5.3 Delphi7 және мәліметтер қоры серверлері Біз таныс BDE және ADO механизмдерінен басқа DBExpress, InterBase BDE механизмімен рұқсат алу, администратор тағайындау. Пуск – Программы – Borland Delphi7 – BDE Administrator 1-ші қатпарда BDE-де бар барлық альястардың тізімі келтіріледі. Жаңа Definition қатпарында программаны баптау параметрлері көрініп тұрады. Оны өзіміз LangDriver – сөзінің турасындағы жолды шертіп, пайда болған тізімнен ServerName – сервер үшін МҚ файлының атауын көрсету керек.Ол МҚ көмегімен қосымша құру әдістері. Қалыпқа DataSource, Query, DBGrid, Button1,2 компоненттерін орналастырып, қасиеттерін DataSource - DataSet - Query1 Query – DataBaseName –Студент ReguestLive – true Sql - string - select * from DBGrid – Datasource – DataSource1 Active – true Осы кезде диалогтық терезе шығады. Онда МҚ атауы Студент, Сұранысты активтендірмей: Active – False, мына қасиеттерді тағайындайық: Form1 - Caption - Студенттер туралы анықтама Position - poScreenCenter Button1 - Caption - Сұранысты іске қосу Button2 - Caption - Шығу Button1Click оқиғасына мына кодты жазсақ: Query1.Active:=true; немесе бұл жоолдың орнына мына команданы жазуға да Button1.Enabled:=false; Бұл командалар Сұранысты іске қосу пернесін шерткенде сұраныстың жазуларын Button1Click оқиғасына мына кодты жазсақ: If Query1.Active then Query1.Close; Application.Terminate; Бұл командалар егер сұраныс алдын ала ашық тұрған болса, Егер студенттердің туған мерзімін енгізу кезінде жылдың 4 цифры ShortDateFormat:=’dd.mm.yyy’; Delphi объектіге-бағытталған орта болғандықтан МҚ-на рұқсат алу үшін BDE TSession компоненті келесі жағдайда тиімді: - егер құрылатын қосымша бірмезгілде бірнеше сұраныспен жұмыс істейтін болса, - Көпағынды қосымша құру кезінде. Ондағы әр ағын жеке Tsession TdataBase компоненті МҚ байланысын басқарады. Қосымшада бірнеше сессия болады, Бұл екі компонент тек қана МҚ-мен байланысты орындаса, негізгі МҚ-ғы мәліметтерді басқару үшін сұраныстардың 2 түрі қолданылады: 1 Мәліметтерді қайтаратын сұраныстар. Таңдау сұранысы. (Open әдісімен орындалады) 2 Мәліметтерді қайтармайтын сұраныстар. Олар деректерді өзгертуші сұраныстар деп TstoredProc компоненті серверде сақталатын процедураларды орындайды, процедура да мәліметтерді TdataSet компоненті. Мәліметтер жинағымен жұмыс. Мәліметтер жинағын ашу үшін Query1.Active:=True немесе Query1.Open Мәліметтер жинағын жабу үшін: If Query1.Active then Query1.Close; әдісін Мәліметтер жинағы бойымен жылжу үшін кэш деп аталатын уақытша First – бірінші жазуға көшу Last – соңғы жазуға көшу Prior – алдыңғы жазуға көші Next – келесі жазуға көшу MoveBy – берілген мәнге тең жазудан аттау BOF – егер курсор алғашқы жазуда тұрса ақиқат, әйтпесе EOF - егер курсор соңғы жазуда тұрса ақиқат, әйтпесе Бұл әдістерді былайша қолданады: Query1.Next; Query1.Prior; т.с.с. Деректер жиынының өрістері. Деректер жиынының өрістері деп кестенің бағандарының атауларын айтуға болады. Мысалы: Label1 компонентіне Query1 компоненті арқылы құрылған сұраныс нәтижесіндегі Label1.Caption:=Query1.Fields[1].asstring; 1-ші бағанның мәндерін Label1-ге шығарады; Label1.Caption:=Query1.FieldByName(‘FIO’).asstring; FIO атрибутының мәнін Label1-ге шығарады; Label1.Caption:=Query1.FieldValue(‘Петров В.И.’).asstring; Сұраныстан Петров В.И. мәнін тауып, Label1-ге шығарады; Атрибуттардың типтерін анықтау керек болса, Cfield.FieldKind қасиетін, атрибут атауын Cfield.FieldKind қасиеті келесі мәндерді қабылдайды: fkData – атрибуттың кестеде сақталғандығын білдіреді fkCalculated – атрибуттың есептелетін екендігін білдіреді fkLookUp – атрибуттың іздеу өрісі екендігін білдіреді fkInternalCalc – есептелетін және есептеу нәтижесінің кестеде сақталатындығын білдіреді fkAggregate – аггрегаттылығын білдіреді. Мысалы: Cfield айнымалысы бар болсын, оған ListBox1 компонентіне шақырылған Cfield:=Form1.Query1.FieldByName(ListBox1. Items[ListBox1.ItemIndex]); Енді осы Cfield айнымалысына меншіктелген атрибуттың атауы ListBox2-де экранға ListBox2.Items.add(‘атрибут атауы-’+Cfield.DisplayName) деп жазамыз. Ал осы таңдал,ан атрибуттың атауы анықталған соң, мәнін көру ListBox2.Items.add(‘атрибут мәні-’+Cfield.DisplayText) деп жазамыз. Таңдалған атрибуттың әрқайсысының кестеде қай типпен сақталғандығын анықтау керек CASE CField.FieldKind of fkData: FKind:=' атрибут кестеде сақталған'; fkCalculated: FKind:='Атрибут есептелетін'; fkLookUp: FKind:='Іздеу атрибуты'; fkInternalCalc: FKind:='есептелетін, нәтижесі кестеде сақталатын'; fkAggregate: FKind:='аггрегатты атрибут'; else FKind:='ешбір типке жатпайды'; Егер таңдалған атрибуттың типін анықтап алған соң, сол типті ListBox2.Items.Add('Атрибут типі - '+FieldTypeNames[CField.DataType]); деп жазады, ал сол типтің ұзындығын анықтап көрсету керек ListBox2.Items.Add('Размер (байт) -'+IntToStr(CField.DataSize)); деп жазады. Сол атрибуттың кестеде нешінші болып орналасқанын анықтап ListBox2.Items.Add('Номер -'+ IntToStr(CField.FieldNo)); деп жазады. Егер таңдалған атрибутты жөндеуге болатынын, болмайтынын анықтау керек болса, if CField.CanModify then ListBox2.Items.Add('жөнделеді') else ListBox2.Items.Add('жөнделмейді'); деп жазады. Меншікті ену диалогын құру. Қалыпқа келесі компоненттерді қойып, сәйкес қасиеттерін көрсетеміз: TDataSource1: DataSet= TQuery1; TQuery1: DataBaseName=Студент; Sql-String=Select * from student; DataBase1: DataBaseName=Студент; LoginPrompt=false; Бұл компоненттерді қойған кезде автоматты түрде Tsession компоненті құрылады, Қалыпқа Button1 қойып, соны шерткенде қолданушы мен парольді өзі DataBase1.Params.Values[‘Password’]:=’silver’; DataBase1.Params.Values[‘UserName’]:=’student’; Query1.Active:=True; Button1.Enabled:=False; Бұл әдіс базаның қорғанысын төмендетеді, сондықтан қорғау үшін ену Жаңа қалып құрып, атауын Flogin деп атап, мына қасиеттерін biSystemMenu=false; biMinimize=false; biMaximize:=false; BorderStyle=bsDialog; Caption= Position=poScreenCenter; Ол үшін мына компоненттерді қоямыз: 1 Label1 - Caption=Қолданушы атауы 2 Label2 - Caption=Пароль 3 TEdit1 - Name=ebUserName; text – бос тұрады 4 TEdit2 - Name=ebPassword; text – бос тұрады; PasswordChar=* 5 Button1 пернесінің қасиеттері: Name=btnCancel Caption – Бас тарту ModalResult =mrCancel 6 Button2 пернесінің қасиеттері: Name=btnOK Caption - ОК ModalResult =mrOK Flogin қалыбының FormShow оқиғасына мына кодты жазамыз: ebPassword.text:=’’; Button1 –ге жазылған программаға өзгеріс енгіземіз: If Flogin.ShowModal=mrOK then begin DataBase1.Params.Values[‘Password’]:=Trim(Flogin.ebPassword.Text); DataBase1.Params.Values[‘UserName’]:= Trim(Flogin.ebUserName.Text); TRY Query1.Active:=True; Button1.Enabled:=False; Except ShowMessage(‘МҚ-на ену қате орындалды’); End; End; Деректер жиынын өзгерту. Мәліметтер қорынан алынған деректерді жөндеу үшін Tquery, TdataSet компоненттері dsInactive – деректер жинағы жабық. dsBrowse – деректер жинағы қарау режимінде ашық dsEdit – жөндеу режимінде dsInsert - жазу қосу режимінде Tquery компонентін белгілеп, Object Inspector терезесінің Events қатпарынан AfterScroll begin Query1.Edit; Query1[‘FIO’]:=Edit1.Text; Query1.Post End; Ал сұраныстан жазуды өшіру керек болса, Button пернесін қойып, If not {MessageDlg(‘Удалить запись?’, mtError, [mbYes, mbNo], 0)=mrYes) then Begin Abort; End; сонда экранға Қате терезесі шығады, онда екі перне орналасады:Yes, Мұндағы MessageDlg функциясы келесі форматты қолдайды: MessageDlg(const Msg:string; DlgType:TmsgDlgType; Buttons: TmsgDlgButtons; HelpCtx:LongInt): word; Мұндағы: const Msg:string; - кез келген жиалогқа шығарылатын мәтін DlgType:TmsgDlgType; - мына мәндердің бірін қабылдайды: mtWarning – ! белгісі бар ескерту терезесі шығады mtError – х белгісі бар қате терезесі шығады mtInformation – i белгісі бар ақпараттық терезе шығады mtConfirmation - ? белгісі бар, бекіту терезесі шығады mtCustom - қолданушы типі Buttons: TmsgDlgButtons; параметрі щығарылатын терезеде қандай пернелердің болатындығын көрсетеді: HelpCtx:LongInt – параметрі анықтама алуды білдіреді. Сонымен қатар сұраныс DBGrid компонентіне шығаылатын болса, жазуды өшіру Жазуларды кірістіру мен кесте соңына жазу қосу былай қарағанда 5.4. Генераторлар мен триггерлер Мысалы МҚ кестесіндегі студенттің ең соңғы билет нөмірінің мәні Генератор дегеніміз – мәнін арнаулы gen_id() функциясы көмегімен бірге Оны құру үішн ISQL терезесін ашып, мына сұранысты орындау Create generator bilet_gen - bilet_gen деген генератор Select max(bilet) from student – кестеден билеттің ең үлкен Set generator bilet_gen to 9 - ағымдағы мәнді Gen_id(bilet_gen,1) – максималды мәнге 1-ді қосты Insert into student(bilet, fio, adres, datar) Values(gen_id(bilet_gen,1), ‘Петров’, ‘Петр’, ‘Петрович’, ’01.10.1988’) – 10-шы жазуды Триггерлер. Триггер дегеніміз МҚ-да туындаған оқиғаға (жазуды өшіру, өзгерту, кірістіру) Триггер қандай да бір МҚ кестесімен байланысты болады, бірақ Триггерді құрудың сұраныс командасы: Create trigger trname for tablename {Before | After} {Insert | delete | UpDate} As [Declare variable айнымалы типі ;] Begin … SQL операторлары End Бұл командада trname – триггер атауы, tablename – кесте Мысалы: Студенттер кестесінен қандай да бір жазуды өшіру триггері Create trigger St_del_trigger for student Before delete Position 0 As … Мысалы: алдында құрылған генератордың bilet_gen мәнін қолданып, кестеге жаңа Set Term ! !; Create trigger bilet_gen for student Before insert as Begin New.NBilet =gen_id(bilet_gen, 1); End !! Set Term; !! Бұл триггер кестеге жаңа жазу кірістіру алдында іске қосылады, Insert into student(fio, adres, datar) Values(‘Петров’, ‘Петр’, ‘Петрович’, ’01.10.1988’) – мұнда билет Деректерді кэштеу. TUpDateSQL компоненті. МҚ кестесімен тікелей жұмыс істемей, сұраныстарды өңдеу кезінде МҚ Қалыпқа TUpDateSQL1, Query1 компонентерін орналастырып, қасиеттерін тағайындаймыз: Query1: UpDateOblect=UpDateSQL1 деп көрсетеміз; TUpDateSQL компонентінің DeleteSQL, InsertSQL, ModifySQL қасиеттеріне орындалатын операцияның SQL-инструкциясы Мысалы, InsertSQL қасиетіне мына команданы жазйық: Insert into student(Nbilet, fio, adres, datar) Values(gen_id(bilet_gen,1), :fio, :adres, :datar); ModifySQL қасиетіне мына команданы: Update student set Fio=:fio, Adres=:adres, Datar=:datar Where Nbilet=:Nbilet; DeleteSQL қасиетіне мына команданы: Delete from student Where Nbilet=:old_Nbilet; жазып, ОК басамыз. Сосын қалыпқа Button1 қойып, мына кодты жазамыз: With Quer1 do Begin DataBase1.StartTransaction; Try ApplyUpdates; DataBase1.Commit; Except DataBase1.RoolBack; Raise; End; CommitUpdates; End; ҚОРТЫНДЫ Мәліметтер қоры – белгілі бір ауқымға қатысты мәліметтерді амал-тәсілдермен Delphi-дегі мәліметтер қоры – бұл ең дамыған механизм, мұнда Delphi жұмыс ортасы мәліметтер қорын басқару жүйесінің (МҚБЖ) тура Оқу құралында Delphi7 бағдарламалау ортасында ақпараттық жүйе құру мүмкіндігі «Кадрлар бөлімі» бағдарламасының артықшылықтарына тоқталатын болсақ, ең бастысы - ӘДЕБИЕТТЕР ТІЗІМІ 1. Культин Н. Основы программирования в Delphi 7.0 - Санкт-Петербург, 2. Гофман В. Delphi6/В.Гофман, А.Хомоненко. – Санкт-Петербург: БХВ – Петербург, 3. Фаронов В.В. Программирование баз данных в Delphi 7: Учебный 4. Архангельский А. 100 компонентов библиотеки Delphi5. - Санкт-Петербург, 5. Фленов М. Delphi 2005 секреты программирования. – Питер, 2006. 6. Харрингтон Д. Проектирование объектно-ориентированных баз данных. Пер. С англ. 7. Абдолдина Ф.Н. Delphi ортасында бағдарламалау. Әдістемелік құрал.- ШҚМУ баспасы, 8. Баас Р. Delphi4. – К.: Издательская группа BHV, 1999. 9. Дарахвелидзе П. Программирование в Delphi5. – Санкт-Петербург: БХВ-Петербург, 2001. 10. Александровский А. Д. Delphi5. Разработка корпоративных приложений. – М.: 11. Конноли Т. Базы данных. Проектирование, реализация и сопровождение. Теория ҚОСЫМША - А unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, DBCtrls, Mask, Grids, DBGrids, ExtCtrls, DB, ADODB, Buttons, ShellAPI, duShowLog, duDataModule; type TForm1 = class(TForm) MainMenu1: TMainMenu; N1: TMenuItem; Panel1: TPanel; DBNavigator1: TDBNavigator; N3: TMenuItem; N4: TMenuItem; N5: TMenuItem; ADOQuery1: TADOQuery; GroupBox1: TGroupBox; Label1: TLabel; DBEd_fio: TDBEdit; DBEd_adres: TDBEdit; Label2: TLabel; Label3: TLabel; DBEd_tel: TDBEdit; Label4: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; DBEd_sot: TDBEdit; DBEd_date: TDBEdit; DBEd_dolzh: TDBEdit; DBEdit2: TDBEdit; DBEdit3: TDBEdit; DBCheckBox1: TDBCheckBox; DBRadioGroup1: TDBRadioGroup; DBImage1: TDBImage; N6: TMenuItem; N7: TMenuItem; GroupBox2: TGroupBox; Ed_poisk: TEdit; Label5: TLabel; ComboBox1: TComboBox; Button1: TButton; RG_Filtr: TRadioGroup; Button2: TButton; Ed_filtr: TEdit; N2: TMenuItem; N8: TMenuItem; N10: TMenuItem; OpenDialog1: TOpenDialog; Label12: TLabel; DBEd_Stazh: TDBEdit; Button3: TButton; DBEd_obraz: TDBEdit; DBEdit1: TDBEdit; SpeedButton1: TSpeedButton; DBGrid1: TDBGrid; N9: TMenuItem; N11: TMenuItem; N12: TMenuItem; N13: TMenuItem; N14: TMenuItem; N16: TMenuItem; N17: TMenuItem; N18: TMenuItem; N20: TMenuItem; N21: TMenuItem; Label13: TLabel; DBEd_dat: TDBEdit; DBEd_dog: TDBEdit; Label14: TLabel; Label15: TLabel; SpeedButton2: TSpeedButton; Edit1: TEdit; N15: TMenuItem; cbKizmet: TDBLookupComboBox; qrKizmet: TADOQuery; dsKizmet: TDataSource; N19: TMenuItem; qrLog: TADOQuery; N22: TMenuItem; N23: TMenuItem; N24: TMenuItem; DataSource1: TDataSource; procedure FormCreate(Sender: TObject); procedure N8Click(Sender: TObject); {procedure N9Click(Sender: TObject);} procedure N6Click(Sender: TObject); procedure N7Click(Sender: TObject); procedure N10Click(Sender: TObject); procedure DBImage1DblClick(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure N4Click(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure N5Click(Sender: TObject); procedure N9Click(Sender: TObject); procedure N12Click(Sender: TObject); procedure N20Click(Sender: TObject); procedure N13Click(Sender: TObject); procedure N15Click(Sender: TObject); procedure N16Click(Sender: TObject); procedure N17Click(Sender: TObject); procedure N18Click(Sender: TObject); procedure SpeedButton2Click(Sender: TObject); procedure N22Click(Sender: TObject); procedure N23Click(Sender: TObject); procedure N21Click(Sender: TObject); procedure N19Click(Sender: TObject); procedure DataSource1StateChange(Sender: TObject); procedure ADOQuery1AfterPost(DataSet: TDataSet); procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure N24Click(Sender: TObject); private IsAppend : Boolean; public USER : Integer; end; var Form1: TForm1; otd:string; d:string; implementation uses unit3,unit4, Unit5, Unit2, Unit8, Unit10, Unit9, Unit12, Math, Unit6, Unit7, Unit14, Unit13, Unit11; {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin IsAppend := False; with qrKizmet do begin Close; SQL.Text := 'SELECT * FROM kizmetter'; Open; end; with qrLog do begin Close; SQL.Text := 'SELECT * FROM logs'; Open; end; otd:='Все'; ADOQuery1.Active := True; with cbKizmet do begin DataSource := DataSource1; DataField := 'idkizmet'; ListSource := dsKizmet; ListField := 'kizmet'; KeyField := 'id'; end; end; procedure TForm1.N8Click(Sender: TObject); var t:integer; begin otd:='Администрация'; ADOQuery1.Filtered:=false; ADOQuery1.Filter:='bolim='+''''+'Администрация'+''''; ADOQuery1.Filtered:=true; t:=ADOQuery1.RecordCount; Form1.Caption:='Кадрлар болімі - Администрацияда '+IntToStr(t)+'-адам бар'; end; procedure TForm1.N6Click(Sender: TObject); begin frm_Prin_Rab.Show; form1.Enabled:=false; Form11.enabled:=false; end; procedure TForm1.N7Click(Sender: TObject); begin { if ADOQuery1.Eof then ShowMessage('Жумыстан шыгаратын адамды тандау керек') else begin} with ADOQuery1 do begin Edit; FieldByName('deleted').AsBoolean := True; Post; Active := False; Active := True; end; with Form14.ADOQuery1 do begin Active := False; Active := True; end; end; procedure TForm1.N10Click(Sender: TObject); var t:integer; begin ADOQuery1.Filtered:=false; t:=ADOQuery1.RecordCount; Form1.Caption:='Кадрлар болімі - барлығы '+IntToStr(t)+' адам бар'; otd:='Р’СҒРө'; end; procedure TForm1.DBImage1DblClick(Sender: TObject); begin if OpenDialog1.Execute then begin ADOQuery1.Edit; DBImage1.Picture.LoadFromFile(OpenDialog1.FileName); end; end; procedure TForm1.Button1Click(Sender: TObject); var s:string; begin if ComboBox1.Text'Таңдау жасау' then begin if ComboBox1.Text='Аты-жоні' then s:='atiJoni'; if ComboBox1.Text='Туганкуні' then s:='tugankuni'; if ComboBox1.Text='Мекенжайы' then s:='mekenjai'; if ComboBox1.Text='Стаж' then s:='Staj'; if ComboBox1.Text='Уйтелефон' then s:='telui'; if ComboBox1.Text='Уялытелефон' then s:='telsot'; if ComboBox1.Text='Кызметі' then s:='kizmeti'; ADOQuery1.Locate(s,Ed_poisk.Text,[loCaseInsensitive,loPartialKey]); end else ShowMessage('өріс таңдаңыз'); end; procedure TForm1.Button3Click(Sender: TObject); begin ADOQuery1.Filtered:=false; end; procedure TForm1.Button2Click(Sender: TObject); var ap,pr,pole:String; begin ap:=''''; pr:='*'; if RG_Filtr.ItemIndex-1 then begin if RG_Filtr.Items[RG_Filtr.ItemIndex]='Аты-жоні' then pole:='atiJoni'; if RG_Filtr.Items[RG_Filtr.ItemIndex]='Мекен жайы' then pole:='mekenjai'; if RG_Filtr.Items[RG_Filtr.ItemIndex]='Туган куні' then pole:='tugankuni'; if RG_Filtr.Items[RG_Filtr.ItemIndex]='Кызметі' then pole:='kizmeti'; if RG_Filtr.Items[RG_Filtr.ItemIndex]='Білімі' then pole:='bilimi'; if RG_Filtr.Items[RG_Filtr.ItemIndex]='Стаж' then pole:='Staj'; if RG_Filtr.Items[RG_Filtr.ItemIndex]='Жануялык жагдайы' then pole:='januialikjag'; if RG_Filtr.Items[RG_Filtr.ItemIndex]='Жынысы' then pole:='jinisi'; ADOQuery1.Filtered:=false; ADOQuery1.Filter:=pole+'='+ap+Ed_filtr.Text+ap; ADOQuery1.Filtered:=true; end else ShowMessage('Шарт танданыз'); end; procedure TForm1.N4Click(Sender: TObject); begin AboutBox.ShowModal; end; procedure TForm1.SpeedButton1Click(Sender: TObject); begin form4.QuickRep2.Preview; end; procedure TForm1.N5Click(Sender: TObject); begin ShellExecuteA(Application.Handle,nil,'index.htm',nil,nil,SW_SHOWNORMAL); end; procedure TForm1.N9Click(Sender: TObject); begin ShellExecuteA(Application.Handle,nil,'index1.htm',nil,nil,SW_SHOWNORMAL); end; procedure TForm1.N12Click(Sender: TObject); begin form6.QRLabel21.caption:=form1.DBEd_fio.Text; form6.QRLabel18.Caption:=form1.DBEd_dolzh.Text; form6.QRLabel7.caption:=form1.DBEd_dat.Text; form6.QRLabel4.Caption:=form1.DBEd_fio.Text; form6.QRLabel6.Caption:=form1.DBEd_dat.Text; form6.QuickRep3.Preview; end; function mes_f(d:String):string; var i:word;f:boolean; begin mes_f:=''; i:=0; f:=false; repeat if d[i]='.' then begin mes_f:=d[i+1]+d[i+2]; f:=true; end; i:=i+1; until f; end; procedure TForm1.N20Click(Sender: TObject); begin form7.QRLabel3.caption:=form1.DBEd_dolzh.Text; form7.QRLabel4.caption:=form1.DBEd_fio.Text; form7.QRLabel12.caption:=form1.Edit1.Text; form7.QuickRep1.Preview; end; procedure TForm1.N13Click(Sender: TObject); begin form14.Show; end; procedure TForm1.N15Click(Sender: TObject); begin form9.Show; end; procedure TForm1.N16Click(Sender: TObject); begin form6.QRLabel68.caption:=form1.DBEd_dolzh.Text; form6.QRLabel69.caption:=form1.DBEd_fio.Text; form6.QRLabel70.caption:=form1.Edit1.Text; form6.QuickRep4.Preview; end; procedure TForm1.N17Click(Sender: TObject); begin form6.QRLabel77.caption:=form1.DBEd_fio.Text; form6.QRLabel80.caption:=form1.DBEd_dat.Text; form6.QRLabel82.caption:=form1.DBEd_dolzh.Text; form6.QRLabel85.caption:=form1.DBEd_dat.Text; form6.QuickRep5.Preview; end; procedure TForm1.N18Click(Sender: TObject); begin form6.QRLabel97.caption:=form1.DBEd_dolzh.Text; form6.QRLabel98.caption:=form1.DBEd_fio.Text; form6.QRLabel104.caption:=form1.Edit1.Text; form6.QRLabel105.Caption:=form1.DBEd_fio.Text; form6.QuickRep6.Preview; end; procedure TForm1.SpeedButton2Click(Sender: TObject); begin form8.show; end; procedure TForm1.N22Click(Sender: TObject); begin form10.Show; form1.Enabled:=false; end; procedure TForm1.N23Click(Sender: TObject); begin with TdfShowLog.Create(Application) do begin ShowModal; Free; end; end; procedure TForm1.N21Click(Sender: TObject); begin form10.Show; end; procedure TForm1.N19Click(Sender: TObject); begin Form12.Show; end; procedure TForm1.DataSource1StateChange(Sender: TObject); begin if DataSource1.State = dsEdit then IsAppend := False else if DataSource1.State = dsInsert then IsAppend := True else IsAppend := False; end; procedure TForm1.ADOQuery1AfterPost(DataSet: TDataSet); begin qrLog.Edit; qrLog.Append; qrLog.FieldByName('user').AsInteger := USER; qrLog.FieldByName('evtdate').AsDateTime := Now; qrLog.FieldByName('rowid').AsInteger := ADOQuery1.FieldByName('kod').AsInteger; if IsAppend then begin qrLog.FieldByName('action').AsInteger := 1; qrLog.FieldByName('message').AsString := 'Жана жазба енгізілді'; end else begin qrLog.FieldByName('action').AsInteger := 2; qrLog.FieldByName('message').AsString := 'Жазба озгертілді'; end; qrLog.Post; IsAppend := False; end; procedure TForm1.FormShow(Sender: TObject); begin qrLog.Edit; qrLog.Append; qrLog.FieldByName('user').AsInteger := USER; qrLog.FieldByName('evtdate').AsDateTime := Now; qrLog.FieldByName('rowid').AsInteger := 0; qrLog.FieldByName('action').AsInteger := 4; qrLog.FieldByName('message').AsString := 'Жуйеге кіру'; qrLog.Post; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin qrLog.Edit; qrLog.Append; qrLog.FieldByName('user').AsInteger := USER; qrLog.FieldByName('evtdate').AsDateTime := Now; qrLog.FieldByName('rowid').AsInteger := 0; qrLog.FieldByName('action').AsInteger := 5; qrLog.FieldByName('message').AsString := 'Жуйеден шыгу'; qrLog.Post; end; procedure TForm1.N24Click(Sender: TObject); begin form13.show; end; End. unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TForm2 = class(TForm) MonthCalendar1: TMonthCalendar; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation uses unit3; {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); begin frm_Prin_Rab.Ed_god_rozh.Text:=datetostr(form2.MonthCalendar1.Date); form2.Hide; end; procedure TForm2.FormCreate(Sender: TObject); begin MonthCalendar1.Date:=Date; end; end. unit Unit3; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, DBCtrls, StdCtrls, Mask, Buttons; type Tfrm_Prin_Rab = class(TForm) GroupBox1: TGroupBox; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; SpeedButton1: TSpeedButton; Label12: TLabel; Panel1: TPanel; Button1: TButton; Button2: TButton; Button3: TButton; Ed_god_rozh: TEdit; Ed_fio: TEdit; Ed_adres: TEdit; Ed_tel: TEdit; Ed_sot: TEdit; Ed_dolzh: TEdit; Ed_stazh: TEdit; CB_pol: TComboBox; Label5: TLabel; CB_child: TCheckBox; CB_Sem_pol: TComboBox; Label13: TLabel; CB_Otdel: TComboBox; CB_obraz: TComboBox; Ed_grazh: TComboBox; Ed_nacia: TComboBox; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var frm_Prin_Rab: Tfrm_Prin_Rab; implementation uses unit1,unit2,unit4, Unit6; {$R *.dfm} procedure Tfrm_Prin_Rab.FormClose(Sender: TObject; var Action: TCloseAction); begin form1.Enabled:=true; end; procedure Tfrm_Prin_Rab.Button2Click(Sender: TObject); begin Form1.ADOQuery1.First; {if (CB_Sem_pol.Text'таңдау')and(CB_pol.Text'таңдау')and(CB_Otdel.Text'таңдау') then begin } Form1.ADOQuery1.Append; Form1.ADOQuery1['atiJoni']:=Ed_fio.Text; Form1.ADOQuery1['mekenjai']:=Ed_adres.Text; Form1.ADOQuery1['telui']:=Ed_tel.Text; Form1.ADOQuery1['telsot']:=Ed_sot.Text; Form1.ADOQuery1['tugankuni']:=Ed_god_rozh.Text; Form1.ADOQuery1['kizmeti']:=Ed_dolzh.Text; Form1.ADOQuery1['bilimi']:=CB_obraz.Text; Form1.ADOQuery1['azamattik']:=Ed_grazh.Text; Form1.ADOQuery1['ulti']:=Ed_nacia.Text; Form1.ADOQuery1['januialikjag']:=CB_Sem_pol.Text; Form1.ADOQuery1['Staj']:=Ed_stazh.Text; Form1.ADOQuery1['jinisi']:=CB_pol.Text; if CB_child.Checked then Form1.ADOQuery1['balalari']:=true else Form1.ADOQuery1['balalari']:=false; Form1.ADOQuery1['bolim']:=CB_Otdel.Text; Form1.ADOQuery1.Post; frm_Prin_Rab.Hide; form1.Enabled:=true; end; procedure Tfrm_Prin_Rab.Button3Click(Sender: TObject); begin frm_Prin_Rab.Hide; form1.Enabled:=true; end; procedure Tfrm_Prin_Rab.SpeedButton1Click(Sender: TObject); begin Form2.Show; end; procedure Tfrm_Prin_Rab.Button1Click(Sender: TObject); begin Form4.QRL_fio.Caption:=Ed_fio.Text; //Form4.QRMemo4.Lines.Clear; form4.Label1.Caption:=frm_Prin_Rab.Ed_dolzh.Text; //Form4.QRMemo4.Lines.Add('1. Фирма жогарыда айтылган тұлғаны келесi қызметке кабылдайды "'+Ed_dolzh.Text); //Form4.QRMemo4.Lines.Add('2. Жұмысшы фирманың ішкі ережелері мен заңдарына багынатын болады Form4.QRM_rab.Lines.Clear; Form4.QRM_rab.Lines.Add('"Жұмысшы"'); Form4.QRM_rab.Lines.Add(Ed_fio.Text); Form4.QRM_rab.Lines.Add('Мекен-жайы: '+Ed_adres.Text); Form4.QRM_rab.Lines.Add('Телефон: '+Ed_tel.Text); form4.QRLabel21.Caption:=form1.Edit1.Text ; Form4.QuickRep1.Preview; end; end. unit duLogin; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, StdCtrls, Buttons, Mask, DBCtrls; type TdfLogin = class(TForm) ADOQuery1: TADOQuery; edPassword: TMaskEdit; BitBtn1: TBitBtn; BitBtn2: TBitBtn; dbName: TComboBox; procedure BitBtn1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var dfLogin: TdfLogin; implementation {$R *.dfm} uses Unit1, duDataModule; procedure TdfLogin.BitBtn1Click(Sender: TObject); begin with ADOQuery1 do begin Close; SQL.Text := 'SELECT kod ' + 'FROM bd_rabotniki ' + 'WHERE atijoni="' +dbName.Text + '" AND '+ 'pass="' + edPassword.Text + '"'; Open; end; if ADOQuery1.RecordCount > 0 then begin Form1.USER := ADOQuery1.FieldByName('kod').AsInteger; Form1.Show; Visible := False; end else begin Application.MessageBox('Логин немесе купиясоз кате терілген', ''); edPassword.Text := ''; end; end; procedure TdfLogin.FormCreate(Sender: TObject); begin with ADOQuery1 do begin Close; SQL.Text := 'SELECT atijoni ' + 'FROM bd_rabotniki ' + 'WHERE login ' + 'ORDER BY atijoni'; Open; while not EOF do begin dbName.Items.Add(Fields[0].AsString); Next; end; end; end; end. unit duShowLog; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, Grids, DBGrids, DB, ADODB; type TdfShowLog = class(TForm) DBGrid1: TDBGrid; BitBtn1: TBitBtn; ADOQuery1: TADOQuery; DataSource1: TDataSource; procedure FormCreate(Sender: TObject); private { Private declarations } procedure AddColumn (FName,FCaption : string;FWidth : integer); public { Public declarations } end; var dfShowLog: TdfShowLog; implementation {$R *.dfm} uses Unit1, duDataModule; procedure TdfShowLog.AddColumn(FName, FCaption: string; FWidth: integer); begin with DBGrid1.Columns.Add do begin FieldName := FName; Title.Caption := FCaption; Width := FWidth; end; end; procedure TdfShowLog.FormCreate(Sender: TObject); begin with ADOQuery1 do begin Close; SQL.Text := 'SELECT evtdate, atijoni, actionname, message, rowid ' + 'FROM logs, bd_rabotniki, actions ' + 'WHERE logs.user = bd_rabotniki.kod AND ' + ' logs.action = actions.id 'ORDER BY evtdate'; Open; end; DBGrid1.Columns.Clear; AddColumn('evtdate', 'Уакыты', 120); AddColumn('atijoni', 'Колданушы', 250); AddColumn('actionname', 'Арекет аты', 100); AddColumn('message', 'Сипаттамасы', 150); AddColumn('rowid', 'Жол номері', 60); end; end. unit duDataModule; interface uses SysUtils, Classes, DB, ADODB; type Tdm = class(TDataModule) ADOConnection1: TADOConnection; private { Private declarations } public function GetTempQuery : TAdoQuery; end; var dm: Tdm; implementation {$R *.dfm} { Tdm } function Tdm.GetTempQuery: TAdoQuery; begin Result := TAdoQuery.Create(Self); Result.Connection := ADOConnection1; end; end. unit Unit5; interface uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, Buttons, ExtCtrls, jpeg, DBCtrls; type TAboutBox = class(TForm) Panel1: TPanel; ProgramIcon: TImage; ProductName: TLabel; Version: TLabel; Copyright: TLabel; Comments: TLabel; OKButton: TButton; Label1: TLabel; Image1: TImage; procedure OKButtonClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var AboutBox: TAboutBox; implementation {$R *.dfm} procedure TAboutBox.OKButtonClick(Sender: TObject); begin Close end; end. unit Unit4; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, QuickRpt, ExtCtrls, QRCtrls, StdCtrls; type TForm4 = class(TForm) QuickRep1: TQuickRep; TitleBand1: TQRBand; QRBand1: TQRBand; QRMemo1: TQRMemo; QRL_fio: TQRLabel; QRLabel2: TQRLabel; QRMemo2: TQRMemo; QRLabel1: TQRLabel; QRMemo4: TQRMemo; QRLabel3: TQRLabel; QRM_firma: TQRMemo; QRM_rab: TQRMemo; QRMemo5: TQRMemo; QRLabel4: TQRLabel; QRLabel5: TQRLabel; QRShape1: TQRShape; QuickRep2: TQuickRep; TitleBand2: TQRBand; SummaryBand1: TQRBand; DetailBand1: TQRBand; QRLabel6: TQRLabel; QRDBImage1: TQRDBImage; QRLabel7: TQRLabel; QRDBText1: TQRDBText; QRLabel8: TQRLabel; QRDBText2: TQRDBText; QRLabel9: TQRLabel; QRDBText3: TQRDBText; QRLabel10: TQRLabel; QRDBText4: TQRDBText; QRLabel11: TQRLabel; QRDBText5: TQRDBText; QRLabel12: TQRLabel; QRDBText6: TQRDBText; QRLabel13: TQRLabel; QRDBText7: TQRDBText; QRLabel14: TQRLabel; QRDBText8: TQRDBText; QRLabel15: TQRLabel; QRDBText9: TQRDBText; QRLabel16: TQRLabel; QRDBText10: TQRDBText; QRLabel17: TQRLabel; QRLabel18: TQRLabel; QRDBText11: TQRDBText; QRDBText12: TQRDBText; QRLabel19: TQRLabel; QRMemo3: TQRMemo; QRLabel20: TQRLabel; QRLabel21: TQRLabel; Label1: TLabel; Label2: TLabel; QRMemo6: TQRMemo; private { Private declarations } public { Public declarations } end; var Form4: TForm4; implementation uses unit3,unit1; {$R *.dfm} end. unit Unit6; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, QRCtrls, QuickRpt, ExtCtrls, Buttons, StdCtrls, WordXP, OleServer; type TForm6 = class(TForm) QuickRep3: TQuickRep; QRBand2: TQRBand; QRLabel20: TQRLabel; QRBand4: TQRBand; QRMemo6: TQRMemo; QRLabel21: TQRLabel; QRLabel7: TQRLabel; QRLabel1: TQRLabel; QRLabel2: TQRLabel; QRLabel3: TQRLabel; QRLabel4: TQRLabel; QRLabel5: TQRLabel; QRLabel6: TQRLabel; QRLabel8: TQRLabel; QRLabel9: TQRLabel; QRLabel10: TQRLabel; QRLabel11: TQRLabel; QRLabel12: TQRLabel; QRLabel13: TQRLabel; QRLabel14: TQRLabel; QRLabel15: TQRLabel; QRLabel16: TQRLabel; QRLabel17: TQRLabel; QRLabel18: TQRLabel; QRShape2: TQRShape; QuickRep1: TQuickRep; QRBand1: TQRBand; QRLabel19: TQRLabel; QRBand3: TQRBand; QRLabel22: TQRLabel; QRLabel23: TQRLabel; QRLabel24: TQRLabel; QRLabel25: TQRLabel; QRLabel26: TQRLabel; QRLabel27: TQRLabel; QRLabel28: TQRLabel; QRLabel29: TQRLabel; QRLabel30: TQRLabel; QRLabel31: TQRLabel; QRLabel32: TQRLabel; QRLabel33: TQRLabel; QRLabel34: TQRLabel; QRLabel35: TQRLabel; QRLabel36: TQRLabel; QRLabel37: TQRLabel; QRLabel38: TQRLabel; QRLabel39: TQRLabel; QRLabel40: TQRLabel; QRLabel41: TQRLabel; QRLabel42: TQRLabel; QRLabel43: TQRLabel; QRLabel44: TQRLabel; QRLabel45: TQRLabel; QRShape1: TQRShape; QuickRep2: TQuickRep; QRBand5: TQRBand; QRLabel46: TQRLabel; QRBand6: TQRBand; QRMemo1: TQRMemo; QRLabel47: TQRLabel; QRLabel48: TQRLabel; QRLabel50: TQRLabel; QRLabel51: TQRLabel; QRLabel52: TQRLabel; QRLabel53: TQRLabel; QRLabel54: TQRLabel; QRLabel55: TQRLabel; QRLabel56: TQRLabel; QRLabel58: TQRLabel; QRLabel59: TQRLabel; QRLabel60: TQRLabel; QRLabel61: TQRLabel; QRLabel62: TQRLabel; QRLabel63: TQRLabel; QRLabel64: TQRLabel; QRLabel65: TQRLabel; QRShape3: TQRShape; QRLabel49: TQRLabel; QRLabel57: TQRLabel; QuickRep6: TQuickRep; QRBand11: TQRBand; QRLabel96: TQRLabel; QRBand12: TQRBand; QRMemo3: TQRMemo; QRLabel97: TQRLabel; QRLabel98: TQRLabel; QRLabel99: TQRLabel; QRLabel100: TQRLabel; QRLabel101: TQRLabel; QRLabel102: TQRLabel; QRLabel103: TQRLabel; QRLabel104: TQRLabel; QRLabel105: TQRLabel; QRLabel106: TQRLabel; QRLabel107: TQRLabel; QRLabel108: TQRLabel; QRLabel109: TQRLabel; QRLabel110: TQRLabel; QRShape6: TQRShape; QuickRep7: TQuickRep; QRBand13: TQRBand; QRLabel111: TQRLabel; QRBand14: TQRBand; QRLabel112: TQRLabel; QRLabel113: TQRLabel; QRLabel114: TQRLabel; QRLabel115: TQRLabel; QRLabel116: TQRLabel; QRLabel117: TQRLabel; QRLabel118: TQRLabel; QRLabel119: TQRLabel; QRLabel120: TQRLabel; QRShape7: TQRShape; QuickRep4: TQuickRep; QRBand7: TQRBand; QRLabel66: TQRLabel; QRBand8: TQRBand; QRLabel67: TQRLabel; QRLabel68: TQRLabel; QRLabel69: TQRLabel; QRLabel70: TQRLabel; QRLabel71: TQRLabel; QRLabel72: TQRLabel; QRLabel73: TQRLabel; QRLabel74: TQRLabel; QRLabel75: TQRLabel; QRShape4: TQRShape; QuickRep5: TQuickRep; QRBand9: TQRBand; QRLabel76: TQRLabel; QRBand10: TQRBand; QRMemo2: TQRMemo; QRLabel77: TQRLabel; QRLabel78: TQRLabel; QRLabel79: TQRLabel; QRLabel80: TQRLabel; QRLabel81: TQRLabel; QRLabel82: TQRLabel; QRLabel83: TQRLabel; QRLabel84: TQRLabel; QRLabel85: TQRLabel; QRLabel86: TQRLabel; QRLabel87: TQRLabel; QRLabel88: TQRLabel; QRLabel89: TQRLabel; QRLabel90: TQRLabel; QRLabel91: TQRLabel; QRLabel92: TQRLabel; QRLabel93: TQRLabel; QRLabel94: TQRLabel; QRLabel95: TQRLabel; QRShape5: TQRShape; private { Private declarations } public { Public declarations } end; var Form6: TForm6; implementation uses Unit1, Unit9; {$R *.dfm} end. unit Unit7; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, QRCtrls, QuickRpt, ExtCtrls; type TForm7 = class(TForm) QuickRep1: TQuickRep; QRBand1: TQRBand; QRBand2: TQRBand; QRLabel1: TQRLabel; QRMemo1: TQRMemo; QRLabel2: TQRLabel; QRLabel3: TQRLabel; QRLabel4: TQRLabel; QRLabel5: TQRLabel; QRLabel6: TQRLabel; QRLabel7: TQRLabel; QRLabel8: TQRLabel; QRLabel9: TQRLabel; QRLabel10: TQRLabel; QRShape1: TQRShape; QRLabel12: TQRLabel; QuickRep3: TQuickRep; QRBand5: TQRBand; QRBand6: TQRBand; QRLabel30: TQRLabel; QRLabel31: TQRLabel; QRLabel36: TQRLabel; QRMemo3: TQRMemo; lbKizmet: TQRDBText; QuickRep2: TQuickRep; QRBand3: TQRBand; QRLabel11: TQRLabel; QRBand4: TQRBand; QRMemo2: TQRMemo; QRLabel13: TQRLabel; QRLabel18: TQRLabel; QRLabel19: TQRLabel; QRLabel20: TQRLabel; QRLabel14: TQRLabel; QRLabel15: TQRLabel; QRLabel16: TQRLabel; QRLabel17: TQRLabel; QRLabel21: TQRLabel; QRLabel22: TQRLabel; QRLabel23: TQRLabel; QRLabel24: TQRLabel; QRLabel25: TQRLabel; QRLabel26: TQRLabel; QRLabel27: TQRLabel; QRLabel28: TQRLabel; QRShape2: TQRShape; QRLabel29: TQRLabel; private { Private declarations } public { Public declarations } end; var Form7: TForm7; implementation {$R *.dfm} uses Unit12;end. unit Unit8; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TForm8 = class(TForm) Button1: TButton; MonthCalendar1: TMonthCalendar; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form8: TForm8; implementation uses Unit1, Unit2; {$R *.dfm} procedure TForm8.FormCreate(Sender: TObject); begin MonthCalendar1.Date:=Date; end; procedure TForm8.Button1Click(Sender: TObject); begin form1.Edit1.Text:=datetostr(form8.MonthCalendar1.Date); form8.Hide; end; end. unit Unit9; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, ADODB, ExtCtrls, DBCtrls, Grids, DBGrids, StdCtrls, Mask, ComCtrls, WordXP, OleServer; type TForm9 = class(TForm) DBGrid1: TDBGrid; DBNavigator1: TDBNavigator; ADOQuery1: TADOQuery; ADOTable1: TADOTable; ADOTable2: TADOTable; DataSource1: TDataSource; DataSource2: TDataSource; DataSource3: TDataSource; GroupBox1: TGroupBox; Label1: TLabel; DBEdit1: TDBEdit; DBEdit2: TDBEdit; Label2: TLabel; Button2: TButton; Button1: TButton; MonthCalendar1: TMonthCalendar; Edit1: TEdit; Edit2: TEdit; Button3: TButton; Button4: TButton; Edit3: TEdit; Edit4: TEdit; Button6: TButton; Button7: TButton; MonthCalendar2: TMonthCalendar; Label3: TLabel; Label4: TLabel; procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form9: TForm9; implementation uses Unit6, Unit1; {$R *.dfm} {procedure TForm9.Button1Click(Sender: TObject); var s:string; begin s:='2005j'; ADOQuery1.FieldValues; end; { with ADOQuery1 do begin s:=Edit1.text; if ADOQuery1['2006j']=s then ADOQuery1.Locate(s,Edit1.Text,[loCaseInsensitive,loPartialKey]); end; procedure TForm9.Button2Click(Sender: TObject); begin form6.QRLabel47.Caption:=form9.DBEdit2.Text; form6.QRLabel48.Caption:=form9.DBEdit1.Text; form6.QRLabel59.Caption:=form9.DBEdit1.Text; form6.QRLabel49.Caption:=form9.Edit3.Text; form6.QRLabel52.Caption:=form9.Edit4.Text; form6.QRLabel53.Caption:=form9.Edit1.Text; form6.QRLabel55.Caption:=form9.Edit2.Text; form6.QRLabel60.Caption:=form9.Edit1.Text; form6.QuickRep2.Preview; form1.show; form1.enabled:=true; end; procedure TForm9.Button3Click(Sender: TObject); begin form9.Edit1.Text:=datetostr(form9.MonthCalendar1.Date); end; procedure TForm9.Button4Click(Sender: TObject); begin form9.Edit2.Text:=datetostr(form9.MonthCalendar1.Date); end; procedure TForm9.Button1Click(Sender: TObject); begin form9.Close; form1.show; form1.enabled:=true; end; procedure TForm9.Button6Click(Sender: TObject); begin form9.Edit3.Text:=datetostr(form9.MonthCalendar2.Date); end; procedure TForm9.Button7Click(Sender: TObject); begin form9.Edit4.Text:=datetostr(form9.MonthCalendar2.Date); end; procedure TForm9.Button5Click(Sender: TObject); begin form6.QRLabel47.caption:=form1.DBEd_dolzh.Text; form6.QRLabel48.caption:=form1.DBEd_fio.Text; form6.QRLabel49.Caption:=form1.DBED_dat.Text; form6.QRLabel52.caption:=form1.Edit1.Text; {form6.QRLabel53.caption:=form1.DBED_dat.Text;} form6.QRLabel55.caption:=form1.Edit1.Text; form6.QRLabel59.caption:=form1.DBEd_fio.Text; form6.QRLabel60.caption:=form1.DBEd_dat.Text; form6.QuickRep2.Preview; end; procedure TForm9.FormCreate(Sender: TObject); begin ADOTable1.Active := True; ADOTable2.Active := True; ADOQuery1.Active := True; end; end. unit Unit10; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ADODB, DB, ExtCtrls, DBCtrls, Grids, DBGrids, Mask; type TForm10 = class(TForm) DBGrid1: TDBGrid; DBNavigator1: TDBNavigator; ADOQuery1: TADOQuery; MonthCalendar1: TMonthCalendar; Edit1: TEdit; Edit2: TEdit; Button1: TButton; Button2: TButton; DataSource2: TDataSource; DataSource3: TDataSource; DataSource4: TDataSource; ADOTable2: TADOTable; ADOTable3: TADOTable; ADOTable4: TADOTable; DataSource5: TDataSource; GroupBox1: TGroupBox; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Button3: TButton; Button4: TButton; DBEdit1: TDBEdit; DBEdit2: TDBEdit; DBEdit3: TDBEdit; DBEdit4: TDBEdit; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form10: TForm10; implementation uses Unit7, Unit1; {$R *.dfm} procedure TForm10.Button1Click(Sender: TObject); begin form10.Edit1.Text:=datetostr(form10.MonthCalendar1.Date); end; procedure TForm10.Button2Click(Sender: TObject); begin form10.Edit2.Text:=datetostr(form10.MonthCalendar1.Date); end; procedure TForm10.Button3Click(Sender: TObject); begin form7.QRLabel18.caption:=form10.DBEdit4.Text; form7.QRLabel19.caption:=form10.DBEdit2.Text; form7.QRLabel20.caption:=form10.DBEdit1.Text; form7.QRLabel15.caption:=form10.Edit1.Text; form7.QRLabel17.caption:=form10.Edit2.Text; form7.QRLabel22.caption:=form10.DBEdit3.Text; form7.QuickRep2.preview; end; procedure TForm10.Button4Click(Sender: TObject); begin form10.Close; form1.Show; form1.enabled:=true; end; procedure TForm10.FormCreate(Sender: TObject); begin ADOQuery1.Active := True; ADOTable2.Active := True; ADOTable3.Active := True; ADOTable4.Active := True; end; end. unit Unit11; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, jpeg, ExtCtrls, Buttons; type TForm11 = class(TForm) Image1: TImage; SpeedButton1: TSpeedButton; procedure SpeedButton1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form11: TForm11; implementation uses Unit1, duLogin, unit3,unit4, Unit5, Unit2, Unit8, Unit10, Unit9, Unit12, Math, Unit6, Unit7; {$R *.dfm} procedure TForm11.SpeedButton1Click(Sender: TObject); begin dfLogin.Show; end; end. unit Unit12; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB; type TForm12 = class(TForm) Label1: TLabel; Button1: TButton; dgVacant: TDBGrid; qrGetVacant: TADOQuery; dsGetVacant: TDataSource; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); // procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form12: TForm12; implementation uses Unit6, Unit1, Unit7, duDataModule; {$R *.dfm} procedure TForm12.FormCreate(Sender: TObject); begin with qrGetVacant do begin Close; SQL.Text := 'SELECT bd_rabotniki.idkizmet, kizmetter.kizmet, kizmetter.vacant, ' + ' FIRST(kizmetter.vacant)-COUNT(bd_rabotniki.kod) AS 'FROM kizmetter, bd_rabotniki ' + 'WHERE bd_rabotniki.idkizmet = kizmetter.id ' + 'GROUP BY bd_rabotniki.idkizmet, kizmetter.kizmet, kizmetter.vacant ' + 'HAVING kizmetter.vacant-COUNT(bd_rabotniki.kod) > 0 ' + 'ORDER BY kizmetter.kizmet'; Open; end; with dgVacant.Columns do begin with Add do begin Title.Caption := 'Кызмет атауы'; FieldName := 'kizmet'; Width := 400; end; with Add do begin Title.Caption := 'Адам саны'; FieldName := 'required'; Width := 100; end; end; end; procedure TForm12.Button1Click(Sender: TObject); begin Form7.lbKizmet.DataSet := Form12.qrGetVacant; Form7.lbKizmet.DataField := 'kizmet'; Form7.QuickRep3.Preview; end; end. 

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

Пайдаланушы ID: 603826

Жарияланған күні: