Қадам 1 – TRxDBGrid бағана атауларының батырмаларымен жұмыс
RxDBGrid1 компонентін қысқаша болуы үшін DBGrid1 (Name қасиетін өзгерту) атауын өзгерту.
Объектілер инспекторында DBGrid1 үшін True мәнінде TitleButtons қасиетін белгілеңіз.
unMain модуліне төменде қара шрифтпен көрсетілген екі ауыспалының хабарламасын қосыңыз:
……………………………
var
fmMain: TfmMain;
NameSortField:string; Desc:boolean;
implementation
……………………………
NameSortField ауыспалысы әрі қарай сұрыптау өткізілетін кесте өрісін анықтау үшін, ал Desc өсу немесе кему сұрыптау тәртібін анықтау үшін. қолданылады.
fmMain формасы үшін төменде көрсетілген оқиға өндеуші OnCreate құрыңыз:
procedure TfmMain.FormCreate(Sender: TObject);
begin
NameSortField:=DBGrid1.Columns[0].FieldName;
Desc:=False;
end;
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;
Бағдарламаны орындау үшін іске қосыңыз және бағаналар атауларында батырмалардың жұмысын тексеріңіз – бағананың жаңа атауын шерткенде батырма осы бағана атауында пайда болуы қажет, ол орналасқан бағана атауын шерткенде батарма өзінің сыртқы түрін өзгерту керек.
Қадам 2 – МҚ – на SQL- сұрауының бағдарламалық өзгеруі
Процедура атауын форма классын бейнелеу Public бөліміне орналастырыңыз:
Төменде көрсетілген процедураны құрыңыз және басқа да қосалқы бағдарламалардың хабарламалары жанында 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;
Сізбен құрылған оқиғаларды өндеушілерде 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;
Бағдарламаны орындау үшін іске қосыңыз және бағаналардың сұрыпталуы ойлағандай іске асып жатқанына көз жеткізіңіз.
МҚ – на сұрауды орындау уақытында бағдарлама қолданушының әрекетіне жауап бермейді және оны ол туралы ескеру керек. 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 – мәліметтерді фильтрациялау және іздеу
Елдерді атауы бойынша іздеу ыңғайлылығы үшін RxDBAware бетінен paTop тақтасына TRxLookupEdit компонентін орналастырыңыз. Объектілер инспекторында осы компонентің қасиеттеріне келесі мәндерді беріңіз:
Компонентің қасиеті
|
Қасиетінің мәні
|
PopUpOnlyLocate
|
False
|
CharCase
|
ecUpperCase
|
Text
|
|
LookUpSource
|
DataSource1
|
LookUpField
|
Название
|
ShowHint
|
True
|
Hint
|
ПОИСК СТРАНЫ
|
Проекті орындауға жібергеннен кейін, өріске бұл компонентің мәнін енгізу жалғастырылады және ол түске боялады, табылмаған жазбаға курсор мәліметтер жиынын шығарады, төмендегідегі суретте көрсетілгендей:
Бұл бағдарламамен жұмыс істеу кезіңде, қолданушыны елдер тізімі мен халықтары 100 миллион тұрғындарымен қамтылған, немесе балалар саны шектеулі бар елдер сияқты мысалдар қызығушылық тудыра алады . Осындау жазуларды әртүрлі тәсілдер арқылы көруге болады. Бір шекараны құрастыру және фильтірдің бір шартын, қолданушыға мәліметтер жиынының бағанасын біздің бағдарламада ұсынамыз ол үшін ол фильтірді қолданады
Фильтірдің шартына барлық керекті компоненттерді басқа тақтаға орналастыру ыңғайлы болады. paBot панеліне жаңа панелді орналастырып, оның қасиетін келесідей түрде көресіз:
Компонентің қасиеті
|
Қасиеттің мәні
|
Name
|
paFilter
|
Align
|
alClient
|
TCheckBox компонентін paFilter панеліне орналастырып, оның қасиеттеріне келесі мәндерді жіктеңіз:
Компонентің қасиеті
|
Қасиеттің мәні
|
Name
|
CheckFiltr
|
Left
|
1
|
Top
|
3
|
Caption
|
Фильтр по:
|
Сізде суреттегідей шығу керек:
Бағдарлама барысында қолданушы ешқандай жаңа мәндерді қоспайды және де өшірмейді, сондықтан да DBNavigator1 – дың бүкіл батырмаларын экранға қоюдың еш қажеті жоқ. Навигатордың сыртқы түрін өзгертеміз. ShowHint қасиетінде True копонентасын қоямыз, содан кейін Hints қасиетінде тік төртбұрышты батырманы шертіңіз. Экранда ағылшын тіліндегі сөздер суретте көрсетілгендей шығады, оларды қазақшаға аударыңыз. Бағдарламаны іске қосып сөздер дұрыс және мағыналы шығатынына көз жеткізіңіз. Содан кейін VisibleButtons қасиетінің ішіндегі қасиетіне навигатордың 4 батырмаларын қалдырыңыз – 1-ші көшу, ақырғысын, алдындағысын және келесісін. paBot. тақтасының оң жағына навигаторды кішірейтіңіз.
cbCond және edFiltr аттарын меншіктеп, paFiltr панеліне 2 компонентаны TComboBox және Tedit – та қосамыз. cbCond копонентінің қасиетінде Items-та төртбұрышты батырманы шертіп оған «Больше» және «Меньше» мәнін беріңіз. Внешний вид панели paFiltr панелінің сыртқы көрінісі суретке сәйкес болуы:
Anchors қасиетінде cbFiltr, cbCond және edFiltr компонеттерінің орналасуына қол жеткізіңіз, бос орынды cbFiltr копоненті орналассын, paBot компоненті өзінің өлшемдерін өзгертпесін.
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;
Бағдарламаны жібергеннен кейін тізім дұрыс қалыптасуын тексеріңіз.
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;
Бағдарламаны жіберіп, осы компонентаның жұмысын тексеріңіз.
AdoQuery1 компонентасын Filter қасиетінде Design-Time орналастырыңыз төмендегідей мәнде: [Население]>100000000
CheckFiltr компонентасы үшін төмендегі өндеушіні OnClick оқиғасына құрыңыз:
procedure TfmMain.CheckFiltrClick(Sender: TObject);
begin
AdoQuery1.Filtered := CheckFiltr.Checked;
end;
Бағдарламаны жіберіп оның CheckFiltr компонентасында ерекшелінген бүкіл тізімде елдер халықтарымен 100 миллионнан аса тұрғынымен шығатынын тексеріңіз.
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;
Қолданушы жаңа фильтірмен қолданғанда ескіні жоюы керек. cbFiltr, cbCond и edFiltr компоненттері OnChange үшін өндеушіні құрып, оларды келесілерге жазыңыз:
CheckFiltr.Checked:=False;
Әр түрлі фильтірлердің жұмысы мен бағдарламаның орындалуын тексеріңіз.
Фильтірді өзгертткенне кейін қолданушыға кейбір мәліметтерді енгізуге тура келеді.Оның формасында орын алмау үшін, оның тақырыбын қолданыңыз. DataSource1 компонентасының OnDataChange оқиғасын қолдану тиімді.:
procedure TfmMain.DataSource1DataChange(Sender: TObject; Field: TField);
begin
Caption :='Страны мира ('+IntToStr(AdoQuery1.RecordCount)+')';
end;
Бағдарламаны орындалу үшін жіберіңіз және де оның жұмысын тексеріңіз.
Тәжірибелік жұмыс №4. QuickReport арқылы есеп беруді құрайық
Есеп берудің мүмкіндіктері мәліметтер базасының көп тараған түріне жатады. Шығару батырмалары қағазды документтердің барлығында кездеседі. Delphi қолданушыға есеп шығару үшін көптеген компоненттерді ұсынады, олар Qreport бетінде жиналған барлық компоненттер.Осы тәжірибеде QReport компонентасы арқылы есеп берудің онай түрін құрамыз.
Меню қатарынан File, New таңдаймыз да шыққан терезеде Report пиктограммасын белгілеп, Ok батырмасын басамыз.
Экранда «QuickReport1» жаңа формасы пайда болады. File,Save As таңданыз да «MyWorld» папкасында форма үшін модульді unRep атымен сақтаныз.
unRep модулінде implementation секциясына төменде қара шрифтпен берілген жолды қосыныз:
implementation
uses unMain;
{$R *.DFM}
Инспектор объектісінде QuickReport1 формасы үшін енгізу жолын шертіңіз, ол DataSet қасиетіне қажет. Түсірілетін тізімде fmMain.ADOQuery1 мағынасын тандаңыз.
Енді fmMain формасына есеп беру үшін жаңа батырманы орналастырамыз, ол төмендегі суретте көрсетілген:
Name қасиетіне BtnRep батырманы орналастырып, Hint және ShowHint қасиеттері арқылы көмекті орналастырамыз.
Енді BtnRep батырмасын шерткеннен кейін экранда есеп берудің формасы шыққандай әрекет ету қажет. Ол үшін BtnRep батырмасы үшін төменде көрсетілген OnClick оқиғаны өндеушіні құрыңыз:
procedure TfmMain.BtnRepClick(Sender: TObject);
begin
QuickReport1.Preview;
end;
Содан кейін бағдарламаны орындалуы үшін жіберіңіз. Экранда одан әрі көрсетіліп отырғандай хабарлама пайда болатыны бәлкім. Ол хабарламаға жауап ретінде “Yes” батырмасын басыңыз да және жобаны қайта жіберіңіз.
Енді BtnRep батырмасын шерткеннен кейін экранда суретте көрсетілгендей біздің болашақ есеп беруіміздің формасы шығуы керек:
Есеп берудің өзі әлі жоқ, бірақ формада бірқатар батырмаларды көріп отырмыз. Олардың үстінен жасырын көмек беруші сөздерді оқу үшін тышқанның курсорын жүргізіңіз.
Енді Design-time –ға QuickReport1 формасына оралайық.
Біздің алғашқы есеп беруімізді құра бастайық. QuickReport1 формасына QRBand компонентін орналастырыңыз.
Қастиет
|
Қатиеттің мәні
|
BandType
|
rbDetail
|
Name
|
BandDetail
|
Одан кейін BandDetail-ға QRDBText екі компонентін орналастырыңыз. Екеуі үшін fmMain.ADOQuery1-да DataSet қасиетін орналастырыңыз, ал DataField қасиетін біріншісі үшін Атауында, екіншісі үшін Халқында орналастырыңыз.
QuickReport1 формасына тышқанның оң жақ батырмасын шерітіңіз және пайда болған менюден Preview пунктін таңдаңыз.Экранда келесі түрге жақын форма пайда болуы керек:
Тәжірибелік жұмыс №5. МҚ - ында «MyWorld» тасымалдауы
Бағдарламаны басқа бір папкаға немесе басқа компьютерге апару керек деп ойлайық. BDMyWorld.mdb фаылының жолы өзгертілсе, онда сізге дұрыс емес деген хабар шығады да, бағдарлама жұмыс істемейді.
Бағдарлама өз жұмысын міндетті түрде келесілерден бастауы керек:
Файл мен МҚ бағдарламамен бір папкада сақталып тұрғанын тексеру.
Дұрыс сақталынған болса, жұмысты бастау.
Дұрыс емес болса, экранға МҚ – дағы файылды іздеу диалогты терезесін шығару.
Егер де қолданушы диалогты терезеде МҚ – ның файылын тапса, онда жұмысты жалғастыруға болады.
Егер де файыл табылмаса, онда жұмысты аяқтау.
Осы алгоритмді іске асырып көрейік.
Достарыңызбен бөлісу: |