Делфи және мәліметтер қоры

Автор работы: Пользователь скрыл имя, 08 Июня 2015 в 11:14, реферат

Описание работы

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

Содержание работы

Кіріспе
1 Мәліметтер қорын жобалау және ақпараттық жүйелер
1.1 Деректердің шамадан тыс қайталануы және аномалиялар
1.2 Ақпараттық жүйелерді жобалау
2 Delphi ортасында мәліметтер қорына рұқсат алу механизмдері
2.1 ADO провайдерлері
3 Мәліметтер қорын құру және басқару
3.1 Мәліметтер қоры кестелерін құру және басқару
3.2 Мәліметтер қоры кестесімен жұмыс
3.3 Клиенттік қосымшада жоғарғы мәзір құру
3.4 Мемо-өрістер, бағандарды жөндеу және деректерді іздеуді ұйымдастыру
3.5 Сұраныс құру
3.6 Есеп құру
4 Delphi7 ортасында локальды деректер қорын қолданып ақпараттық жүйелер құру
4.1 «Кадрлар бөлімі» ақпараттық жүйесінің жобасы
4.2 Мәліметтер қоры өзгерісін журналға тіркеу
5 Серверлік мәліметтер қоры және interbase серверімен танысу
5.1 INTERBASE локальды сервері
5.2 Индекс құру
5.3 Delphi7 және мәліметтер қоры серверлері
5.4 Генераторлар мен триггерлер
Қортынды
Әдебиеттер тізімі

Файлы: 1 файл

621.doc

— 2.30 Мб (Скачать файл)

TdataSet компоненті. Мәліметтер  жинағымен жұмыс.

Мәліметтер жинағын ашу үшін Query1.Active:=True  немесе  Query1.Open әдістерін қолданады.

Мәліметтер жинағын жабу үшін: If Query1.Active then Query1.Close; әдісін қолданады.

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

First – бірінші жазуға көшу

Last – соңғы жазуға көшу

Prior – алдыңғы жазуға көші

Next – келесі жазуға көшу

MoveBy – берілген мәнге тең  жазудан аттау

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

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

Бұл әдістерді былайша қолданады:

Query1.Next;

Query1.Prior; т.с.с.

Деректер жиынының өрістері.

Деректер жиынының өрістері деп кестенің бағандарының атауларын айтуға болады. TdataSet компоненті бағанның нөмірі, мәні бойынша немесе атауы бойынша жазуларды басқаруға көмектеседі. Ол үшін Fields, FieldByName, FieldValues қасиеттерін қолдануға болады.

Мысалы: 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 қасиетін, атрибут атауын экранға жөндемейтіндей режимде шығару керек болса, DisplayName қасиетін, атрибут атауын экранға жөнделетіндей режимде шығару керек болса DisplayLabel қасиетін, атрибуттың мәнін шығару керек болса, DisplayText қасиетін, атрибуттың типін анықтап көрсету керек болса, DataType қасиетін, атрибуттың кестедегі реттік нөмірін анықтау керек болса, FieldNo қасиетін, атрибуттың жөндеуге жататынын, жатпайтынын анықтау керек болса, CanModify қасиетін қолданады.

Cfield.FieldKind қасиеті келесі мәндерді  қабылдайды:

fkData – атрибуттың кестеде сақталғандығын  білдіреді

fkCalculated – атрибуттың есептелетін  екендігін білдіреді

fkLookUp – атрибуттың іздеу өрісі  екендігін  білдіреді

fkInternalCalc – есептелетін және есептеу нәтижесінің кестеде сақталатындығын білдіреді

fkAggregate – аггрегаттылығын білдіреді.

Мысалы: Cfield айнымалысы бар болсын, оған ListBox1 компонентіне шақырылған Query1 компоненті арқылы құрылған сұраныстағы атрибуттар тізімі шақырылсыняғни былай деп жазамыз:

Cfield:=Form1.Query1.FieldByName(ListBox1. Items[ListBox1.ItemIndex]);

Енді осы Cfield айнымалысына меншіктелген атрибуттың атауы ListBox2-де экранға шығарылуы керек болса:

ListBox2.Items.add(‘атрибут атауы-’+Cfield.DisplayName) деп жазамыз.

Ал осы таңдал,ан атрибуттың атауы анықталған соң, мәнін көру керек болса:

ListBox2.Items.add(‘атрибут мәні-’+Cfield.DisplayText) деп жазамыз.

Таңдалған атрибуттың әрқайсысының кестеде қай типпен сақталғандығын анықтау керек болса FieldKind  қасиеті үшін таңдау операторын қолданады:

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 компоненті құрылады, онымен жұмыс істеу үшін Delphi-де Session айнымалысы анықталған, оның атауы SessionName=Default деп беріледі.

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

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 компоненттері қажет. Олардың жазуларды жөндеуге арналған әдістері бар: Append, Insert, Delete, Edit, Post, Cansel. Егер Query1.RequestLive=true   деп қасиетін көрсетсек, тірі, яғни деректер жиынын сұранысқа жазады, бірақ сұраныстың өзінен жөндеуге рұқсат алу керек. Сондықтан  TdataSet компонентінің келесі қасиеттері қажет:

dsInactive – деректер жинағы жабық.

dsBrowse – деректер жинағы қарау  режимінде ашық

dsEdit – жөндеу режимінде 

dsInsert  - жазу қосу режимінде

Tquery компонентін белгілеп, Object Inspector терезесінің Events қатпарынан AfterScroll оқиғасын  таңдап, тышқанды 2 рет шертіп, ашылған  терезеде мына кодты жазсақ: CheckPosition; онда Tquery компоненті құрған сұраныс кестесінде аталған процедура әр уақытта қосылып тұрады. Ол процедура кестедегі жазуларға жөндеу рұқсатын береді. Егер енгізу жолағына енгізілген мән сұраныс кестесінде және МҚ кестесінде бірден сақталуы керек болса, онда Edit1, SpeedButton компоненттерін қойып, тышқанмен 1 рет шерту оқығасына: SpeedButton1.Click мына кодты жазуға болады:

begin

Query1.Edit;

Query1[‘FIO’]:=Edit1.Text;

Query1.Post

End;

Ал сұраныстан жазуды өшіру керек болса, Button пернесін қойып, оны шерту оқиғасына Query1.Delete; деп жазу керек. Бірақ өшіру кезінде абай болу үшін Query1-ге Query1BeforeDelete оқиғасына мына кодты жазу керек:

If not {MessageDlg(‘Удалить запись?’, mtError, [mbYes, mbNo], 0)=mrYes) then

Begin

Abort;

End;

сонда экранға Қате терезесі шығады, онда екі перне орналасады:Yes, No. Егер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; параметрі щығарылатын  терезеде қандай пернелердің  болатындығын көрсетеді: [mbYes, mbNo];

HelpCtx:LongInt – параметрі анықтама  алуды білдіреді.

Сонымен қатар сұраныс DBGrid компонентіне шығаылатын болса, жазуды өшіру кезінде оның өзінің мына қасиеті қосылып тұруы мүмкін: dgConfirmDelete=true. Егер бұл қасиетін False деп қоймаса, онда жоғарыдағы Query1BeforeDelete оқиғасына жазылған кодты орындағанда DBGrid-тің өзінің қосымша диалогтық терезесі шығарылады. Ол артық іс болып саналады.

Жазуларды кірістіру мен кесте соңына жазу қосу былай қарағанда қиын емес сияқты, бірақ, серверде жұмыс істеп отырған барлық қолданушы бір уақытта бір мән енгізуі мүмкін, онда толықтылық қасиеті жоғалып, қате шығады, сонымен қатар сервердегі қолданушылар көбіне сұраныс кестесімен жұмыс істейді, сұраныс кестесіне кейбір атрибуттар шақырылмауы мүмкін, ал жазу кірістіру кезінде МҚ кестесінде белгілі бір атрибут бос мән қабылдамауы мүмкін. Мысалы create domian bilet integer not null;  деп атрибут типі берілсе, сұраныста билет нөмірі жоқ болса, жазу кірістірсе, ол бос мән болып қалады да қате шығады. Осындай кезде генераторлар мен триггерлер қажет болады.

 

    1. Генераторлар мен триггерлер

 

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

Генератор дегеніміз – мәнін арнаулы gen_id() функциясы көмегімен бірге арттырып отыратын атауы бар сандық айнымалы.

Оны құру үішн ISQL терезесін ашып, мына сұранысты орындау керек:

Create generator bilet_gen  -  bilet_gen деген генератор құрды

Select max(bilet) from student – кестеден билеттің  ең үлкен мәнін тапты

Set generator bilet_gen to 9 - ағымдағы мәнді (мысалы 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} {Position nomer}

As [Declare variable айнымалы типі ;]

Begin

… SQL операторлары

End

Бұл командада trname – триггер атауы, tablename – кесте атауы, триггердің қай кезде орындалатыны; Before – операциядан кейін, After – операция орындалмас бұрын, триггер қай операция үшін құрылады: Insert – жазу кірістіру операциясына, delete –жазу  өшіру операциясына, UpDate-жазуды жаңарту немесе өзгерту операциясына, nomer – триггер нешінші болып орындалуы керек, айнымалы типі – программада қосымша айнымалылар қажет болса, солардың атауы мен типі көрсетіледі. SQL операторлары – кез келген триггер ішінде орындалуы керек операцияның программасы жазылады.

Мысалы: Студенттер кестесінен қандай да бір жазуды өшіру триггері құрылуы керек болсын.

 

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 компоненті.

Информация о работе Делфи және мәліметтер қоры