1 –шi зертханалық жұмыс Тақырыбы: «Қойма» деректер қорын басқару жүйесін құру Зертханалық жұмыстың мақсаты



жүктеу 1.39 Mb.
бет5/12
Дата17.06.2016
өлшемі1.39 Mb.
1   2   3   4   5   6   7   8   9   ...   12

Қадам 1 – TRxDBGrid бағана атауларының батырмаларымен жұмыс


  1. RxDBGrid1 компонентін қысқаша болуы үшін DBGrid1 (Name қасиетін өзгерту) атауын өзгерту.

  2. Объектілер инспекторында DBGrid1 үшін True мәнінде TitleButtons қасиетін белгілеңіз.

  3. unMain модуліне төменде қара шрифтпен көрсетілген екі ауыспалының хабарламасын қосыңыз:

……………………………

var


fmMain: TfmMain;

NameSortField:string; Desc:boolean;

implementation

……………………………

NameSortField ауыспалысы әрі қарай сұрыптау өткізілетін кесте өрісін анықтау үшін, ал Desc өсу немесе кему сұрыптау тәртібін анықтау үшін. қолданылады.



  1. fmMain формасы үшін төменде көрсетілген оқиға өндеуші OnCreate құрыңыз:

procedure TfmMain.FormCreate(Sender: TObject);

begin

NameSortField:=DBGrid1.Columns[0].FieldName;

Desc:=False;

end;


  1. DBGrid1 компонентінің төменде көрсетілген OnGetBtnParams және OnTitleBtnClick оқиғалар өндеушілерін құрыңыз: procedure TfmMain.DBGrid1GetBtnParams(Sender: TObject; Field: TField; AFont: TFont; var Background: TColor; var SortMarker: TSortMarker; IsDown: Boolean);

begin

if (Field <> nil) and (Field.FullName = NameSortField) then begin

if Desc then SortMarker:=smUp

else SortMarker:=smDown;

end;

end;
procedure TfmMain.DBGrid1TitleBtnClick(Sender: TObject; ACol: Integer; Field: TField);

begin

if (Field <> nil) then begin

if NameSortField=Field.FullName then Desc:=Not(Desc)

else begin

Desc:=False;

NameSortField:=Field.FullName;

end;

end;

end;


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

Қадам 2 – МҚ – на SQL- сұрауының бағдарламалық өзгеруі


  1. Процедура атауын форма классын бейнелеу Public бөліміне орналастырыңыз:




  1. Төменде көрсетілген процедураны құрыңыз және басқа да қосалқы бағдарламалардың хабарламалары жанында unMain модулінің interface секциясында оның атауын орналастырыңыз:

procedure TfmMain.NewQuerySQL;

var strSQL:string;

begin

DataSource1.Enabled :=False;

With ADOQuery1 do begin

if Active=True then Active:=False;

SQL.Clear;

strSQL:= 'SELECT * FROM Страны ORDER BY Страны.'+NameSortField;

if Desc then strSQL:=strSQL+' DESC;' else strSQL:=strSQL+';';

SQL.Add(strSQL);

Active:=True;

end;

DataSource1.Enabled :=True;

end;

  1. Сізбен құрылған оқиғаларды өндеушілерде NewQuerySQL процедураны шақыруды қосыңыз:

procedure TfmMain.DBGrid1TitleBtnClick(Sender: TObject; ACol: Integer;

Field: TField);

begin

if (Field <> nil) then begin



if NameSortField=Field.FullName then begin

Desc:=Not(Desc);

end else begin

Desc:=False;

NameSortField:=Field.FullName;

end;


end;

NewQuerySQL;

end;


procedure TfmMain.FormCreate(Sender: TObject);

begin


NameSortField:=DBGrid1.Columns[0].FieldName;Desc:=False;

NewQuerySQL;

end;


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

  2. МҚ – на сұрауды орындау уақытында бағдарлама қолданушының әрекетіне жауап бермейді және оны ол туралы ескеру керек. Rx кітапханасында осыны істеуге көмектесетін ShowSplashWindow арнайы функция бар. Бұл функцияның суреттелуін кітапхана бойынша анықтамада оқыңыз, содан кейін unMain модулінің мәтініне төменде қара шрифтпен бөліп көрсетілген жолын орналастырыңыз:

var

fmMain: TfmMain;

NameSortField:string;Desc:boolean;

implementation



uses SplshWnd;
{$R *.DFM}

procedure TfmMain.NewQuerySQL;

var strSQL:string;Splash: TForm;

begin


Splash := ShowSplashWindow(Application.Icon,

'Загрузка данных. Подождите, пожалуйста...', False,

Application.MainForm);

try

DataSource1.Enabled :=False;

With ADOQuery1 do begin

if Active=True then Active:=False;

SQL.Clear;

strSQL:= 'SELECT * FROM Страны ORDER BY Страны.'+NameSortField;

if Desc then strSQL:=strSQL+' DESC;' else strSQL:=strSQL+';';

SQL.Add(strSQL);

Active:=True;

end;


DataSource1.Enabled :=True;

finally

Splash.Free;

end;

end;

Қадам 3 – мәліметтерді фильтрациялау және іздеу


  1. Елдерді атауы бойынша іздеу ыңғайлылығы үшін RxDBAware бетінен paTop тақтасына TRxLookupEdit компонентін орналастырыңыз. Объектілер инспекторында осы компонентің қасиеттеріне келесі мәндерді беріңіз:

Кесте 2



Компонентің қасиеті

Қасиетінің мәні

PopUpOnlyLocate

False

CharCase

ecUpperCase

Text




LookUpSource

DataSource1

LookUpField

Название

ShowHint

True

Hint

ПОИСК СТРАНЫ




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

4-сурет – Мәліметтер жиыны




  1. Бұл бағдарламамен жұмыс істеу кезіңде, қолданушыны елдер тізімі мен халықтары 100 миллион тұрғындарымен қамтылған, немесе балалар саны шектеулі бар елдер сияқты мысалдар қызығушылық тудыра алады . Осындау жазуларды әртүрлі тәсілдер арқылы көруге болады. Бір шекараны құрастыру және фильтірдің бір шартын, қолданушыға мәліметтер жиынының бағанасын біздің бағдарламада ұсынамыз ол үшін ол фильтірді қолданады

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

Кесте 3

Компонентің қасиеті

Қасиеттің мәні

Name

paFilter

Align

alClient

  1. TCheckBox компонентін paFilter панеліне орналастырып, оның қасиеттеріне келесі мәндерді жіктеңіз:

Кесте 4


Компонентің қасиеті

Қасиеттің мәні

Name

CheckFiltr

Left

1

Top

3

Caption

Фильтр по:




  1. Сізде суреттегідей шығу керек:




5-сурет – Фильтрлеу терезесі


  1. Бағдарлама барысында қолданушы ешқандай жаңа мәндерді қоспайды және де өшірмейді, сондықтан да DBNavigator1 – дың бүкіл батырмаларын экранға қоюдың еш қажеті жоқ. Навигатордың сыртқы түрін өзгертеміз. ShowHint қасиетінде True копонентасын қоямыз, содан кейін Hints қасиетінде тік төртбұрышты батырманы шертіңіз. Экранда ағылшын тіліндегі сөздер суретте көрсетілгендей шығады, оларды қазақшаға аударыңыз. Бағдарламаны іске қосып сөздер дұрыс және мағыналы шығатынына көз жеткізіңіз. Содан кейін VisibleButtons қасиетінің ішіндегі қасиетіне навигатордың 4 батырмаларын қалдырыңыз – 1-ші көшу, ақырғысын, алдындағысын және келесісін. paBot. тақтасының оң жағына навигаторды кішірейтіңіз.

  2. cbCond және edFiltr аттарын меншіктеп, paFiltr панеліне 2 компонентаны TComboBox және Tedit – та қосамыз. cbCond копонентінің қасиетінде Items-та төртбұрышты батырманы шертіп оған «Больше» және «Меньше» мәнін беріңіз. Внешний вид панели paFiltr панелінің сыртқы көрінісі суретке сәйкес болуы:


6-сурет – Больше мәнін тексеру


  1. Anchors қасиетінде cbFiltr, cbCond және edFiltr компонеттерінің орналасуына қол жеткізіңіз, бос орынды cbFiltr копоненті орналассын, paBot компоненті өзінің өлшемдерін өзгертпесін.

  2. cbFiltr копонентінің құрылымын өрістер үшін құру керек, фильтірдін шарттарын оған қоятындай етіп. Ол өрістер сандық типте болуы керек, ал екіншіден, экранға берілген тізіммен шығару керек. МҚ – да олардың шын аттары сәйкес келмеуі де мүмкін. cbFiltr өндеушісі үшін OnEnter жағдайын төмендегідей етіп құрамыз:

procedure TfmMain.cbFiltrEnter(Sender: TObject);

var i:integer;

begin

cbFiltr.Items.Clear;

With ADOQuery1 do begin

for i:=0 to FieldCount-1 do begin

if (Fields[i] is TIntegerField) then

cbFiltr.Items.Add(Fields[i].DisplayLabel);

end;

end;

end;

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



  1. edFiltr компонентасында қолданушы сандық мәліметтерді енгізеді. Қолданушы қате жібермеу үшін, осы өрісте сандардан басқа ештене болмауы керек. Берілген OnKeyPress компонентасына өндеушіні құрамыз:

procedure TfmMain.edFiltrKeyPress(Sender: TObject; var Key: Char);

begin

if (Key=Chr(VK_BACK))or(Key=Chr(VK_DELETE)) then Exit;

if not(Key in ['0'..'9']) then Key:= #0;

end;

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



  1. AdoQuery1 компонентасын Filter қасиетінде Design-Time орналастырыңыз төмендегідей мәнде: [Население]>100000000

  2. CheckFiltr компонентасы үшін төмендегі өндеушіні OnClick оқиғасына құрыңыз:

  3. procedure TfmMain.CheckFiltrClick(Sender: TObject);

begin

AdoQuery1.Filtered := CheckFiltr.Checked;

end;


Бағдарламаны жіберіп оның CheckFiltr компонентасында ерекшелінген бүкіл тізімде елдер халықтарымен 100 миллионнан аса тұрғынымен шығатынын тексеріңіз.

  1. cbFiltr, cbCond және edFiltr компоненттерін қолданып, қолданушы фильтр арқылы өзгерту алуы біздің келесі міндетіміз. Установите в для свойства компонента cbFiltr копонентасында Text қасиетінде Design-Time орналастырып, «Население» мәнін, ал осы қасиетке edFiltr компонентасында 1000000000 (сто миллионов). CheckFiltr компонентасында OnClick оқиғаларында өндеушілерімен төмендегідей болуы керек:

procedure TfmMain.CheckFiltrClick(Sender: TObject);

var s,sf:string;i,j:longint;

begin

//Перекодировка и проверка числового значения:

try

i:=StrToInt(Trim(edFiltr.Text));

if i>2000000000 then begin

ShowMessage('Числовое значение слишком велико!');

AdoQuery1.Filtered :=False;CheckFiltr.Checked:=False;Exit;

end;

except

on E: EConvertError do begin

ShowMessage('Неверное числовое значение !');

AdoQuery1.Filtered :=False;CheckFiltr.Checked:=False;Exit;

end;

end;

//Поиск FieldName по значению DisplayLabel из cbFiltr.Text:

with ADOQuery1 do begin

for j:=0 to FieldCount-1 do begin

if Fields[j].DisplayLabel = cbFiltr.Text then begin

sf:=Fields[j].FieldName; Break;

end;

end;

end;

//Формирование значения свойства Filter для AdoQuery1:

if CheckFiltr.Checked then begin

s:='['+cbFiltr.Text +']';

if cbCond.Text='Больше' then s:=s+'>' else s:=s+'<';

s:=s+IntToStr(i);AdoQuery1.Filter:=s;

end;

AdoQuery1.Filtered := CheckFiltr.Checked;

end;

  1. Қолданушы жаңа фильтірмен қолданғанда ескіні жоюы керек. cbFiltr, cbCond и edFiltr компоненттері OnChange үшін өндеушіні құрып, оларды келесілерге жазыңыз:

CheckFiltr.Checked:=False;

Әр түрлі фильтірлердің жұмысы мен бағдарламаның орындалуын тексеріңіз.



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


7-сурет 10000-нан кіші балалар бойынша фильтр
procedure TfmMain.DataSource1DataChange(Sender: TObject; Field: TField);

begin

Caption :='Страны мира ('+IntToStr(AdoQuery1.RecordCount)+')';

end;

Бағдарламаны орындалу үшін жіберіңіз және де оның жұмысын тексеріңіз.


QuickReport арқылы есеп беруді құрайық

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



  1. Меню қатарынан File, New таңдаймыз да шыққан терезеде Report пиктограммасын белгілеп, Ok батырмасын басамыз.

  2. Экранда «QuickReport1» жаңа формасы пайда болады. File,Save As таңданыз да «MyWorld» папкасында форма үшін модульді unRep атымен сақтаныз.

  3. unRep модулінде implementation секциясына төменде қара шрифтпен берілген жолды қосыныз:

implementation

uses unMain;

{$R *.DFM}



  1. Инспектор объектісінде QuickReport1 формасы үшін енгізу жолын шертіңіз, ол DataSet қасиетіне қажет. Түсірілетін тізімде fmMain.ADOQuery1 мағынасын тандаңыз.

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


8-сурет – Миллионнан асқан тұрғындарды фильтрлеу
Name қасиетіне BtnRep батырманы орналастырып, Hint және ShowHint қасиеттері арқылы көмекті орналастырамыз.

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

procedure TfmMain.BtnRepClick(Sender: TObject);

begin


QuickReport1.Preview;

end;


Содан кейін бағдарламаны орындалуы үшін жіберіңіз. Экранда одан әрі көрсетіліп отырғандай хабарлама пайда болатыны бәлкім. Ол хабарламаға жауап ретінде “Yes” батырмасын басыңыз да және жобаны қайта жіберіңіз.

Енді BtnRep батырмасын шерткеннен кейін экранда суретте көрсетілгендей біздің болашақ есеп беруіміздің формасы шығуы керек:



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

Енді Design-time –ға QuickReport1 формасына оралайық.




  1. Біздің алғашқы есеп беруімізді құра бастайық. QuickReport1 формасына QRBand компонентін орналастырыңыз.

    Қасиет

    Қатиеттің мәні

    BandType

    rbDetail

    Name

    BandDetail

  2. Одан кейін BandDetail-ға QRDBText екі компонентін орналастырыңыз. Екеуі үшін fmMain.ADOQuery1-да DataSet қасиетін орналастырыңыз, ал DataField қасиетін біріншісі үшін Атауында, екіншісі үшін Халқында орналастырыңыз.

  3. QuickReport1 формасына тышқанның оң жақ батырмасын шерітіңіз және пайда болған менюден Preview пунктін таңдаңыз.Экранда келесі түрге жақын форма пайда болуы керек:




10-сурет – Есеп беті
МҚ - ында «MyWorld» құру

Бағдарламаны басқа бір папкаға немесе басқа компьютерге апару керек деп ойлайық. BDMyWorld.mdb фаылының жолы өзгертілсе, онда сізге дұрыс емес деген хабар шығады да, бағдарлама жұмыс істемейді.

Бағдарлама өз жұмысын міндетті түрде келесілерден бастауы керек:


  1. Файл мен МҚ бағдарламамен бір папкада сақталып тұрғанын тексеру.

  2. Дұрыс сақталынған болса, жұмысты бастау.

  3. Дұрыс емес болса, экранға МҚ – дағы файылды іздеу диалогты терезесін шығару.

  4. Егер де қолданушы диалогты терезеде МҚ – ның файылын тапса, онда жұмысты жалғастыруға болады.

  5. Егер де файыл табылмаса, онда жұмысты аяқтау.

Осы алгоритмді іске асырып көрейік.

1   2   3   4   5   6   7   8   9   ...   12


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

    Басты бет