Зертханалы жмыс.

С++ Buildеr 6 ортасындаы графика. Объектіні озалыса келтіру. Анимация


дістемелік нсаулар


1.Графиктік файлдарды форматтары. C++ Builder ортасында графиктік файлдарды 3 трлі типімен жмыс жасауа болады.

 

Файл типі Кееймесі
Биттік матрица (Bitmaps) Пиктограммалар Метафайлдар (Metafiles) IPEG Image file EnhancidMetafiles . bmp . ico . wmf . ipg; . ipeg . emf

 


Бл файлдарды барлыында суреттер немесе кескіндер саталады, біра бларды файлдаы саталу тсілдері ртрлі болады. Мысалы, .btm; .ico - кескіндер файла биттік матрица трінде саталады.Бл биттік матрицалар кескіндегі рбір пиксельді (нктені) тсін крсетеді. Бл биттік матрицада саталан кескінді кез келген компьютер зіні ммкіндігіне арай крсете алады.Келесі.іco кееймесіменберілген файлда пиктограммалар (значоктар) саталады. Пиктограммаларды лшемін згерту ажет емес. Метафайлдарда кескінні биттері саталмайды, керісінше сол кескінді салу дістері саталады. Яни олар сурет салу командалары.

2.Графиктік файлдарды сатауа арналан C++ Builder-ді класстары. C++ Builder ортасында графиктік кескінді сатауа арналан келесі кластар олданылады:

T BitMap Бл кластарды барлыы шін тпкі класс

TIcon TGraphic. Мндаы TРicture класы – зінде

TMetafile алан 3 класты асиеттерін амти алады.

TPicture

Сондытан, тмендегідей і

TPicture.TІcon; TРicture.TМetafile;

ТРicture.TBitMap

асиеттерін шаыру ммкін болады.


3. Кескінді немесе суретті арау жне суретті салу.

1.Imageкомпоненті. Бл Additational жапсырмасында орналасан. Мнда жоарыда айтылан графиктік файлдар саталан кескінді круге болады.

Негізгі асиеттері:

асиетті аты ызметі жне абылдайтын мндері
Picture(TPicture) бл асиет файлдаы кескінді Imageтерезесіне жктейді. Imageтерезесінде суретті круге ана емес, сатауа да болады.
AvtoSize (Boolean) Егер бл асиет true мнге ие болса, онда іmage компонентіні лшемдері ол крсететін кескін лшеміне арай келтіріледі.
Stretch (Boolean) Егер бл асиет true мнге ие болса, керісінше, кескін немесе сурет лшемдері іmage компонентіні лшемдеріне келтіріледі. Бл асиет пиктограммалара сер етпейді, себебі пиктограммаларды лшемдері згермейді.
Center (Boolean) Егер бл асиет true мнге ие болса, онда бл кескін іmage компонентіні ортасында орналасады.
Transparent (Boolean) Егер бл асиет true мнге ие болса, онда кескін крінбей трады, (тссіз (празрачный) болып кетеді), бл сіресе бір кескінні стіне екіншісін беттестіргенде жиі олданылады. Бл асиет тек биттік матрицалара ана жреді.


Іmage компонентіні терезесіне кескінді жктеу шін немесе сатау шін сйкесінше OpenPictureDialogжне SavePictureDialogстандарт диалогты терезе олданылады.

4. Канва (Холст, кенеп, Canvаs. C++ Builder ортасында графикамен жмыс істеу шін кескінді орналастыратын орын немесе бет керек. C++ Builder – де ол шін Canvаsасиеті аныталан. Мндай асиет Image, Form, PaintBox, ListBox, StringGrid, BitMap, т.б. бар. Канваны зіні асиеттері жне дістері бар. Канва нктелерден трады, бл нктелерді (х,у)координаталары болады. (4.16-сурет) Канваны (0,0) нктесі оны сол жа тбесінде орналасады.

Бл (х,у) координаталары пиксельмен есептеледі. Пиксельді е негізгі асиеті - оны тсі. Канвада сурет салу шін оны Pixels асиеті олданылады. Бл екі лшемді массив трінде аныталады жне ол пикселді тсін береді, яни типі Pixels[X] [Y] : clColor;


Жаттыу жмыстары


f(x)=exp(0.5*Х) графигін [-5,5 ] аралыында h=0.01адаммен салу керек /4.17-сурет/.

4.17-сурет.f(x)=exp(0.5*Х) функция графигі


Программа мтіні:

#include

#pragma hdrstop

#include "Unit1.h"

#include "math.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

floatf(floatx) //функцияны мндерін есептеу

{

floatf=exp(0.5*x);

return f;

}

void GrafSizy() // график сызатын функция

{ float x1,x2,y1,y2,x0,y0;

float x,mx,my;


//график салынатын облысты даярлау

intIbik=Form1->Image1->ClientHeight; // image1-дин биктги

intIyz=Form1->Image1->Width; //image1-дин узындыгы

// Y осьти сызу, ол (xY,yY) басталып (xY,cY) нктеде бітеді;

floatxY=Iyz/2;

floatyY=10;

floatcY=Ibik-10;

Form1->Image1->Canvas->MoveTo(xY,yY);

Form1->Image1->Canvas->LineTo(xY,cY);

// X осьти сызу ол (xХ,yХ) басталып (сХ, yX ) нктеде бітеді;

floatxX=10;

floatyX=Ibik/2;

floatcX=Iyz-10;

Form1->Image1->Canvas->MoveTo(xX,yX);

Form1->Image1->Canvas->LineTo(cX,yX);

//бастапкы мандерди аныктау

x1=-5; x2=5; y1=f(x1); y2=f(x2);

//масштабты тагайындау

mx=Iyz/(x2-x1); my=Ibik/(y2-y1);

//координата бас нуктеге (xY,yX) бару

x0=xY; y0=yX;

Form1->Image1->Canvas->MoveTo(x0,y0);

//график сызу басталды

x=x1;

while (x<x2)

{

Form1->Image1->Canvas->Pixels[x0+mx*x][y0-my*f(x)]=clBlack;

x=x+0.01;

}

//

Form1->Image1->Canvas->TextOutA(x0,y0,'0');

Form1->Image1->Canvas->TextOutA(xY,yY,"Y");

Form1->Image1->Canvas->TextOutA(cX,yX,"X");

}

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

GrafSizy();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Memo1->Text="Программа у=ехр(х) функциясынын [-5,5] аралыгындагы графигин 0.01 кадаммен салып шыгады";

}

5. Канвада олданылатын сурет салу ралдарын пайдалану, Pen(алам,арындаш, , ылалам. Канваны Pen(ТPen)асиеті бар. ТРenасиеті объект ретінде арастырылады. Бл объектіні зіні де асиеттері бар.

Негізгі аситтері:

Color–алам тсі

Width –алыдыы (алыпты жадайда 1 пикселге те!)

Height - биіктігі

Style –алам стилін білдіреді

Канваны келесі асиеттерін пайдаланып суреттер салуа болады:

PenPos(TPoint)–бл асиет канваны аламыны бастапы позициясын анытайды, яни аламны ай жерде траныны координатасын крсетеді.

K=Image1->Canvas-> PenPos ;

MoveTo(x,y)–асиеті аламды координаталары (x,y) нктесіне апарып ояды;

Draw(x,y; Graphic:);-бл графиктік обьектіні канваа шыарады. График обьектісіні орнында .bmp, .ico немесе метафайл болуы ммкін.

6. Суретке мтін шыару.TextOut(x,y; const AnsiString Text);-бл х,у нктесінен бастап текст тратысында саталан мтінді канваа шыарады.

7. Тйы облыстарды бояу.FillRect(const TRect Rect); - канвада Rectтртбрышын бояйды. Бояу шін ылаламны тсі жне стилі олданылды.

FloodFill(x,y; TColor Color; TFillStyle FillStyle); - х,унктесінен бастап немесе х,унктесі жататын тйы облысты Color тске FillStyleстилмен немесе рнекпен /узор/ бояйды.

Brush–бл канваны асиеті болып табылады. Канвадаы тйы фигураларды бояйды. Канваны зіні фонын крсетеді.

Brush обьектісіні негізгі асиеттер:

Color–тсін береді

Style BSSolid-ттас бояйды;

BSHorizontal–горизонталь сызытармен бояйды.

8. Сурет салуа болатын обьектілер немесе компоненттер. Суретті салуа немесе арауаImageкомпонентіне баса Formнемесе PaintBoxкомпоненттерін де олдануа болады. Оларда даCanvas асиеті бар.Формада сурет саланда оны OnPaintоиасы олданылады.

Image-де сурет салан кезде оны DrawIngасиеті олданылады.

Аннимация. Аннимация –бл кесінді немесе суретті озалтуды айтады.

C++ Builder-де Windows -ты дайын аннимацияларын олдануа болады немесе салынансуретті оны бліктерін озалту арылы жылжытуа болады.

Кескінді озалыса келтіруді бірнеше тсілдері бар:


  1. Timer компоненттері пайдаланылады. Мнда уаыта байланысты кескінді жылжытуа болады. Мнда кескін алдын-ала процедура трінде аныталып алынады. Уаыта байланысты кескінні озалатын блігіні координаталары згертіледі.

  2. Кескінні тсін Canva-ны тсімен сйкестендіру. Мнда сурет салушы аламны тсін згертіп отырады.

  3. Animate компоненті бар. Win32-де орналасан.Бл компонент Windows-таы стандарт видеоклиптерді формада крсету шін олданылады. Бл видеоклиптерді кееймесі.AVI.Стандарт видеоклиптерініShell 32.dllбиблеотекасы болады.

 

зіндік жмыс тапсымалары

Тапсырмалар:
a) Функцияны графиктерін салу программасын рыыз:
1. y=a*x^2+b*x
2. y=x^3+a*x^2+b*x
3. y=a*sinx +b
4. y=-a*x^2+b*x
5. y=a*x^5
6. y=a*cos(x-1)+|x|
7. y=a/x
8. y=(x+a)/(x-b)
9. y=a+b/x+c/x^2
10. y=a-b/x-c/x^2


b) Суреттерді салу жне оларды озалту программасын рыыз:

Вариант 1 –“тышан” Вариант 2 – “нысана”


В
ариант 3 – “оран”
Вариант 4 – “робот”


Вариант 5-“танк” Вариант 6 –“штанга”


Вариант 7-“Сала” Вариант 8 –“оян”


Вариант 9- «чебурашка» Вариант 10 – «жлдызша»


11 – зертханалы жмыс.

С++ Buildеr 6 ортасында деректер орын ру


дістемелік нсаулар


Borland C++ Builder олданып, бiр олданушылы деректер орымен, сонымен атар ДБЖ серверлерімен, яни Oracle, Sybase, Informix, Interbase, MS SQL Server, DB2, сондай-а ODBC-кздерімен жмыс жасайтын осымша руа болады.

C++ Builder-де деректер жиыны – бл жазбалар жиынынан тратын объект, оларды райсысы рістерден жне аымдаы жазба крсеткіштерінен трады. Деректер жиыны C++ Builder –де TDataSet абстрактілі класыны (абстрактілі клас- баса кластарды туындататын класс, біра берілген кластан объект экзамплярын руа болмайды) тума класстары болады. Мысалы, Data Access параыны компоненттер палитрасындаы TQuery, TTable жне TStoredProc компоненттері - TDBDataSet мрагерлері, олар з кезегінде TDataSet мрагерлері. TDataSet - кестелерді ашу, сраныстарды жне жолдар бойынша ауыстыруларды орындайтын ралдармен амтамасыз ететін, кестелерді басару жне сраныстар абстракциясынан трады.

TDataSource компоненті

DataSource компоненті TDataSet (TTable, TQuery, TStoredProc) жне Data Controls компоненттері арасындаы аралы ызметін атарады. Data Controls компоненттері - формада деректерді сынылуын амтамасыз ететін басару элементтері. TdataSet компоненттері Borland Database Engine (BDE) кітапханасымен байланысты басарады, ал DataSource компоненті Data Controls компоненті деректерімен байланысты басарады.

Д-ны арапайым осымшаларында DataSource компоненті - TDataSet (TTable немесе TQuery) бір компонентімен жне Data Controls (DBGrid, DBEdit жне т.б.) бірнеше компонентімен байланысты. DataSource компонентіні TDataSet жне DataControls компоненттерімен байланысы келесі асиеттер мен оиаларды олдану арылы жзеге асады:

DataSet асиеті – TDataSource компонентіні атын белгілейді. DataSet мнін объектілер инспекторы арылы орнатылады.

Enabled асиеті - TDataSource жне Data Controls компоненттері арасындаы байланысты белсенді етеді немесе тотады. Егер Enabled асиетіні мні true болса, онда TDataSource Data Controls компоненттерімен байланысан, яни деректер жиыны згерiстерiн абылдайды. Enabled асиетін олдану TDataSource пен Data Controls визуальды компоненттерiн уаытша айыруа ммкiндiк бередi. Мысалы, іздеу жадайында, экранда барлы кестелерді паратаанда кестеде лкен клемдегі жазбаларды крсетпеу шін.

AutoEdit асиеті - Data Controls компоненттерінде деу алай басталатынын баылайды. Егер мні true болса, онда деу тртiбі TDataSet компонентімен байланысан Data Controls компонентiні фокус алу кезiнен басталады. арсы жадайда деу режимі TDataSet компонентіні Edit дісін шаыру кезінде басталады, мысалы DBNavigator компонентіндегі Edit батырмасын олданушы басаннан кейін.

OnDataChange оиасы – рістер, жазбалар, кестелер, сраныстар мндерін згерту кезінде шаырылады.

OnUpdateData оиасы - олданушы TDataSet-тегі аымдаы жазбаны згерткісі келгенде шаырылады.

TTable компоненті

Деректер орындаы кестелерге атынауды е арапайым жолы TТable компонентін олдану, ол бір кестеге атынауа рсат береді. Осы масатта жиі олданатын асиеттері тмендегілер:

Active – берілген кесте ашы (true) немесе жо (false) екенін крсетеді.

DatabaseName - рамында ізделінетін кесте бар каталог аты, немесе ашытаы Д псевдонимі (alias) (Псевдонимдер BDE конфигурациясы утилиталары арылы орнатылады, немесе мзірді Database/Explore пункті арылы шаырылатын SQL Explorer арылы орнатылады). Бл асиет кесте жабы (оны Active асиеті false боланда) болан жадайда ана згертіледі.

Мысалы:

Table1->Active = false;

Table1->DatabaseName = "BCDEMOS"

Table1->Active = true;

TableName – кесте аты.

Exclusive – егер бл асиет true мнін абылдаса, кесте берілген осымшамен ашы боланда, кестені баса ешандай олданушы аша алмайды. Егер бл асиет false (нсіздік бойынша) болса, онда баса олданушыларда осы кестені аша алады.

IndexName – кестеге екінші индексті белгілейді. Бл асиетті кесте ашы боланда згертуге болмайды.

MasterFields – баса кестемен байланыс жасау шiн рiстi атын анытайды.

MasterSourceTDataSource компонентіні аты, TTable осы арылы байланысан кестеден деректерді алады.

ReadOnly - егер бл асиет true болса, кесте "тек ана оу шiн" тртiбінде ашылан. Кесте ашы боланда ReadOnly асиетiн згертуге болмайды.

Fields - TField объектілері массиві. Бл асиетті олданып, кесте рылымы алдан-ала белгілі боланда, рістерге нмірі бойынша атынауа болады:

Edit1->Text=Table1->Fields[2]->AsString;

TTable компонентімен жмыс жасаанда жиі олданылатын дістер:

Open жне Close - Active асиетіндегі True жне False мндеріне сйкес.

Refresh - Д деректер жиынын айтадан санауа ммкiндiк бередi.

First, Last, Next, Prior аымдаы жазба крсеткішін біріншіге, соына, келесіге жне алдыны жазбалара сйкес ауыстырады, мысалы:

Table1->First();

while (!Table1->Eof)

{

//бірнрсе жасаймыз...

Table1->Next();

};

Insert, Edit, Delete, Append – жазба осу шін кестелерді жазу, деу, алып тастау, жазбаларды осу режимдерiне ауыстырады

Post – згертілген деректерді физикалы сатауды жзеге асырады.

Мысалы,

Table2->Insert();

Table2->Fields[0]->AsInteger = 100;

Table2->Fields[1]->AsString =Edit1->Text;

Table2->Post();

Cancel – енгізілген згертулерді (физикалы саталмаан) болдырмайды.

Формаа TТable компонентін енгізу шін, келесілерді орындау ажет:


  • Data Access параындаы TТable компонентін формаа немесе деректер модуліне орналастыру;

  • DatabaseName асиетіне Д орналасан каталог немесе псевдоним атын беру;

  • TableName асиетіне кесте атын беру немесе тізімнен кесте атын тадау;

  • Формаа DataSource компонентін орналастыру жне DataSet асиетіні мніне TТable компоненті атына беру;

  • Data Controls компоненттерін орналастыру жне оларды DataSource компонентімен байланыстыру, яни Д кестелеріндегі деректер экранда кріну шін.

 

TDBGrid компоненті

TDBGrid компоненті TTable немесе TQuery компоненттері деректерін экранда кестелік трде крсетуді амтамасыз етеді. осымшада берілген Д крсету, ою, жою, деу шін TDBGrid олданады. детте TDBGrid DBNavigator-мен бірге олданылады, сонымен атар баса да интерфейстік элементтерді TTable компонентіні First, Last, Next, Ptior, Insert, Delete, Edit, Append, Post, Cancel деуші оиа дістерін осу арылы олдануа болады.

Кестені сырты трін (мысалы, баан таырыбы жазуын) деушіні Columns Editor асиеті арылы згертуге болады. Columns Editor шаыру DBGrid компонетіні контекстті мзірінен сйкес опцияны тадау арылы немесе объектілер инспекторы баанынан Columns асиетіні мнін беру арылы жзеге асады.


4.18-сурет. DBGrid бааны асиетін Columns Editor арылы орнату.


DBGrid сипаттамаларын беруді таы бір жолы TField компоненттері жиыныны статистикалы дістері бойынша. Деректер жиынындаы р ріске рылан TField типіндегі компонент арылы DBGrid-те кріну шін енін, форматын, маскасын, орналасатын жерін жне баса да сипаттамаларын орнатуа болады.

Float, Integer жне Date рістері DisplayMask асиетіне ие. Бл асиетті, деректерді DBGrid компонентінде немесе Data Controls-ты баса компонентінде форматтау шін олдануа болады. Мысалы, дата типті рістерге mm-dd-yy экранды форматын олдануа болады.

Кейбір TField (мысалы, TStringField) компоненттері EditMask асиетіне ие, ол DBGrid жне баса Data Controls компоненттеріне деректерді енгізуді орнатады.

EditMask асиетін орнату шін Object Inspector-дегі Field компонентін орнатып, EditMask асиетін тадау керек, кейін Input Mask Editor диалогты панелі крінеді /4.19-сурет/. деу маскасын тексеру шін Test Input рісіне мн енгізу ажет


4.19-сурет. Input Mask Editor диалогтік панелі


Жаттыу жмыстары


арапайым осымша ру

Д кестелерін деуге арналан арапайым осымша рып крейік. Ол шін BCDEMOS деректер орындаы COUNTRY кестесін олданамыз, C++ Builder комплектісіні рамындаы.

Жаа жоба рамыз жне оны басты формасын COUNT1.CPP деп сатаймыз, ал жобаны зін COUNT.MAK деп сатаймыз. Data Access параыны компоненттер палитрасын олдана отырып, TTable жне DataSource компоненттерін формаа орналастырамыз. Table1 компонентіні Database Name асиетіне BCDEMOS мнін орнатамыз, TableName асиетіне COUNTRY.DB мнін, Active асиетіне true мніне теестіреміз. Ары арай DataSource1 компонентіні DataSet асиетіні мніне Table1 теестіреміз.

Data Controls параыны компоненттер палитрасын олданып, формаа DBGrid жне DBNavigator компоненттерін орналастырамыз. Екі компонентті DataSource асиетіне DataSource1 мнін меншіктейміз.


4.20-сурет. COUNT осымшасыны басты формасы


Алынан жобаны компиляциялауа жне тестілеуге болады.

Бдан баса, осындай осымша руды те арапайым дісі бар. Осы масатта мзірден Database/Explore пунктін тадап, SQL Explorer утилитасын олдануа болады. SQL Explorer терезесіні сол жа блігінен Databases параын тадап жне сйкесінше деректер оры атыны жаындаы "+" белгісін басып, Tables опциясын тадау ажет. Осыдан кейін терезені о жа блігінен Summary бктемесін тадаймыз жне ажетті кесте аты (бізді жадайда COUNTRY.DB) жлдызшасын тышан арылы бос формаа келеміз. Формада TDBGrid, TDataSource жне TTable компоненттері пайда болады. Осыдан кейін DBNavigator-ды осып, оны TDataSource-пен байланыстырамыз жне кестені белсенді етеміз.

4.21-сурет. SQL Explorer


зіндік жмыса тапсырмалар


  1. Студенттерді стипендиясын есептеу. Студенттерге тлейтін стипендияны есептейтін деректер орын ру, онда келесі мліметтер болуы керек: сына кітапшасыны нмірі, фамилиясы, аты, студентті тегі, туан жылы, топ шифры, рейтинг, аы коэффициенті, негізгі степендия, аы суммасы, жалпы сумма, айлы тлем жне т.б. Жоары стипендия алатын студенттер санын, орташа стипендияны, стипендия алмайтындар санын анытау (%-бен), сонымен атар жалпы стипендиялы фондты анытау.

  2. Автотранспортты шаруашылы жмысыны есебі. Келесі мліметтері бар деректер орын ру: жргізушіні табельдік нмірі, фамилия жне инициалы, класс, дата, жру уаыты, тоннасы, жол параыны нмiрi, автомобил типі, нмірі жне т.б. рбір жргізушіге аымдаы айлыын есептеу, 1 км_тоннасы – 3 000 т.

  3. Компьютерлік фирма жмысы есебі. Келесі мліметтері бар деректер орын ру: компьютер маркасы, процессор типі, атты диск жне оперативті жады лшемі , баасы, бастапы саны, сатылу датасы, сатып алушы фамилиясы, сатыландар саны жне т.б. Белгілі уаыт аралыында сатылан бір маркалы компьютерлер санын есептеу жне тізімін шыару.

  4. Аэропорт кассасы жмысыны есебі. Келесі мліметтері бар деректер орын ру: рейс нмірі, белгіленген пункт, шу уаыты, жолаушыларды фамилиясы жне инициялы, документ нмірі, рейске билет ны, рейс билеттеріні сатылу санын анытау

  5. Оытушыларды жктемесiн есептеу. Келесі мліметтер бойынша деректер орын ру: табельдік нмірі, фамилиясы, аты, тегі, жмыса кірген жылы, атаы, ылыми дрежесі, пндері, семестр нмірі, саат саны, экзамен немесе сыны жне т.б. Профессорлер, доценттер жне ассистенттер рамыны пайызын есептеу, сонымен атар р оытушыны жалпы жктемесін саатпен есептеу.

  6. Автосалондаы машиналарды маркасына, шыан жылына жне баасына жне тсіне арай срыптап шыарып беретін деректер оры осымшасын ру.

  7. Поликлиникадаы дрігерлерді аты-жні бойынша, мамандыы бойынша жне ебек тілі бойынша деректер оры осымшасын рыыз.

  8. Кітапханадаы кітаптарды, авторы, шыан жылы, баасы жне тиражы бойынша деректер оры осымшасын рыыз.

  9. Аэропорт анытамалы бюросыны мліметтеріне сйкес рейстерді баыттары бойынша, апта кндері бойынша жне номерлері бойынша деректер оры осымшасын рыыз.

  10. Стоматолога келушілерді тізімі, келген кні бойынша жне дрігері бойынша деректер оры осымшасын рыыз.

 


12 – зертханалы жмыс.

С++ Buildеr 6 ортасында деректер орын басару

</x2)

Borland C++ Builder ортасы деректер орына атынауды лкен ммкіндіктеріне ие. Деректер оры тек сатауа емес, сонымен атар апараттарды тадау жне деуге, маызды аспектілерді бірі олара сраныстар руа арналан.

C++ Builder-дегі сраныстар – зімен бірге деректер жиынын сынатын объект. детте сраныстар ру шін TQuery компоненті – TDataSet абстрактілі класыны тума класстары олданылады.


TQuery компоненті

TQuery компоненті TTable компоненті сияты, TDataSet компонентіні барлы асиеттеріне ие.

TDataSource компоненті Data Controls компоненттері жне TQuery компоненті арасындаы зара рекеттерді басарады. детте осымшада рбір TQuery компонентіне бір DataSource компоненті болады.

TQuery компонентіні жиі олданылатын асиеттері:

Active - берілген сраныс ашы (true) немесе жабы (false) екенін крсетеді.

Eof, Bof – бл асиеттер, аымдаы жазба крсеткіші деректер жиыныны сйкесінше бірінші немесе соы жолында боланда true мнін абылдайды, яни сранысты орындалу нтижесі болатын.

DatabaseName - сраныс жзеге асатын каталог аты немесе ашытаы Д псевдонимі (alias).

DataSource – параметрленген сраныстар шін деректер кзін крсетеді.

Fields – бл асиет тек орындалу уаытында ол жетімді (run-time only) жне реттік нмірі бойынша аныталан рісті модификациялау немесе оу шін олданылады.

Params – рамында параметрленген сраныстар шін параметрлер болады, келесі мысалдаы SomeNo сияты

Select * from Orders where CustNo=:SomeNo

SQL – жолды массив, рамында SQL сраныс операторыны мтіні бар.

TQuery компоненті экранда крінетін деректер жиынын ру жне анытау, жолдарды деу, жою жне ою шін SQL операторларын олдануа рсат береді.

RequestLive – егер бл асиет true мнін иемденсе, сраныс синтаксисіні нтижесі, олданушы деректер згерісін Д-да сатай алады. Егер RequestLive false мнін иемденсе сраныс нтижесі read-only кйіне айтарылады.

TQuery компонентіні келесі дістері жиі олданылады:

ExecSQL – SQL-сраныстарды орындайды. Бл дісті деректерді жою немесе деу, ою кезінде олдану керек. SELECT (деректерді тадау) операторы орындаланда Open дісін олдану керек. Келесі мысал ExecSQL дісін олдануды крсетеді:

Query1->Close();

Query1->SQL->Clear();

Query1->SQL->Add("Delete emp where empno=1010");

Query1->ExecSQL();

Open - TQuery компонентін ашады. Ол Active асиетіне true мнін меншіктеу эквиваленті. Сраныс нтижесі деректер жиыны боланда олданылады (детте мндай сраныстар SELECT операторынан басталады). Open дісін олдану мысалы:

Query1->Open();

Close - TQuery компонентін жабады. Close шаыру эквиваленті Active асиетіне false мнін меншіктеу. Close дісін олдану мысалы:

Query1->Close();

TQuery компоненттеріні жиі олданылатын дістері:

First, Last, Next, Prior аымдаы жазба крсеткішін сйкесінше бірінші, соы, келесі жне алдыны жазбалара ауыстырады.

Insert, Edit, Delete, Append, Post, Cancel – сраныс нтижесін трлендіреді. Insert дісі жол сранысы нтижесіне енгізуге ммкіндік береді, мысалы:

Query2->Insert();

Query2->Fields[0]->AsInteger = 100;

Query2->Fields[1]->AsString =Edit1->Text;

Query2->Post();

Post дісі Insert, Update немесе Delete операцияларын бекітеді. Cancel дісі Insert, Delete, Edit немесе Append аяталмаан операцияларын болдырмайды.

Visual Query Builder

Visual Query Builder (VQB) – SQL-ге негізделген сраныстар руды визуалды ралы болып табылады. Бл рал арылы комплексті сраныстар руа болады.

Visual Query Builder –ді TQuery компонетін тадау арылы жне тышанны о жаын басып, пайда болан контексті мзірден Query Builder опциясын тадау арылы шаыруа болады.

Ескерту. Visual Query Builder - Borland C++ Builder барлы версиясыны комплектісіне кірмеуі немесе орнатылмаан болуы ммкін. Бл жадайда контекстті мзірде сйкес опция болмайды.

Query Builder тадааннан кейін экранда Databases диалогтік панелі пайда болады, ол Д тадауа жне онымен байланысты жзеге асыруа ммкіндік береді /4.22-сурет/.


4.22-сурет. Деректер оры псевдоним тадау


Деректер орымен байланысаннан кейін экранда Visual Query Builder терезесі шыады жне сраныста олданатын кестелерді тадау диалогты панелі пайда болады /4.23-сурет/.


4.23-сурет. Д-мен байланысаннан кейін Visual Query Builder

терезесі жне Add Table диалогты панелі пайда болады.


Visual Query Builder инструменттер панелі кестеде крсетілген.

Батырма Міндеттері
New Жаа сраныс рады.
Open Сраныс файлын ашады.
Save As Сранысты файлда сатайды.
Options Options диалогтік панелін экрана орналастырады, сранысты ртрлі опцияларын орнатуа ммкіндік береді.
Table Table диалогтік панелін экрана орналастырады, SQL оператора кестелер енгізуге ммкіндік береді.
Expression Expression диалогтік панелін экрана орналастырады, ол есептейтін ріс руа ммкіндік береді.
SQL Генерацияланан SQL- сранысты мтіні бар терезе шыарады.
Run Выполняет сгенерированный запрос и выводит на экран результаты.
OK TQuery компонентіні асиетіне генерацияланан сранысты меншіктейді жне Visual Query Builder жабады.
Cancel TQuery компонентіні асиетіне генерацияланан сранысты меншіктеуді болдырмайды жне Visual Query Builder жабады.
Help Visual Query Builder шін жйелік кмекті экрана шыарады.
       

 

Add Table диалогтік панелі /4.23-сурет/ Visual Query Builder ашылан кезде немесе диалогтік панелді сйкес батырмаларын тадаанда пайда болады. Ол сраныса кестелер енгізеді, аымдаы Д барлы кестелер тізімін шыарады. Егер Include System Tables опциясын белгілесек, сраныстар ру шін берілген Д-ны жйелік кестелері ол жетімді болады.


4.24-сурет. Visual Query Builder жмыс бетінде тізімнен

тадаан кесте пайда болады


Сраныса бір немесе бірнеше кесте енгізу шін келесілерді орындау ажет:


  • Егер Add Table диалогтік панелі экранда жо болса, оны экрана шыару шін инструменттер панелінен Table басылады.

  • Диалогты панелдегі кесте тізімінен кесте аты тадалады жне Add батырмасын басамыз. Тадалан кесте рылы сипаттамсы Visual Query Builder терезесіні жоары блігінде крінеді.

  • керекті кестелер сраныса енгізілгенше екінші адам айталана береді, соынан Close батырмасы басылады.


Кестелерді біріні баанын сраныса енгізу шін, баан атын тадау керек жне осы баанды терезені тменгі блігіндегі кестеге орналастырады.


4.25-сурет. Аралас сраныс ру


Бірнеше кестелер апараттарын араластыру шін, ртрлі кестелер алай байланысатынын анытау керек. Visual Query Builder кмегімен кестелер байланысына ызмет ететін баандарды анытауа болады. осы масатта, кестеаралы байланысты жзеге асыратын, байланысан кестелерді бірінен баан атын тадау керек, сосын тышанны сол жаымен басып жне курсорды баса кестені сйкес баанына алып барамыз. Нтижесі – суретте крсетілген.

Кестелерді байланысу критерийін деуге жне круге болады, яни Visual Query Builder терезесіні жоары блігінде байланысты крсететін сызыты екі рет шерту арылы. Осылай Join диалогтік блогы пайда болады /4.26-сурет/:


4.26-сурет. Кестелерді байланысу критерийін тадау


Сранысты срыптау критерийін анытау шін, Visual Query Builder терезесіні тменгі блігіндегі кестеден Criteria жолын олдану керек.

Criteria жолы SQL операторыны WHERE сынан сраныс рнектерін абылдайды, кестеде крсетілген:

рнек Сипаттамасы
= Те
> лкен
< Кіші
!= Те емес
Like лгiмен салыстырылатын символдар жолы
Between Бастапы мннен кіші емес жне соы мннен лкен емес
In Тізім рамында болады
     

 

Есептейтін ріс ру шін батырмамен инструменттер панеліндегі Expression басамыз. Expression диалогтік панелі пайда болады /4.28-сурет/.

4.28-сурет. Expression диалогтік панелін шаыру


Expression диалогтік панелі сраныста арифметикалы операцияларды кбейту, блулер, осу, алу, баандарды аты жне avg, count, min, max, sum сияты рама рнектерді олдануа ммкіндік береді.

Visual Query Builder-мен генерацияланан сраныс орындауа болады. Сраныс нтижесі Result Window (нтижелер терезесі) диалогтік панеліндегі экранда крінеді. Бл терезе баандар сранысы, тадау критерийі, топтастыру жне срыптау критерийлері дрыс аныталанына кз жеткізуге ммкіндік береді. Сранысты орындау шін, батырмамен инструменттер панеліндегі Run-ды басу ажет. Result Window терезесі пайда болады /4.29-сурет/.

4.29-сурет. Сраныс нтижесі Result Window экранында крінеді


4.30-сурет. SQL Statement терезесіндегі

SQL генерацияланан операторы


Сраныс мтінін тексеруге болады, SQL Statement терезесін арау арылы. Бл терезе генерацияланан SQL операторын крсетеді. Сраныстар бааны, тадау критерийі, топтастыру немесе срыптау критерийі згергенде жне осанда SQL Statement терезесі автоматты деледі /4.30-сурет/.

Visual Query Builder жмысын аятау шін инструменттер панеліндегі жасыл белгісі бар батырманы басу керек. Осыдан кейін TQuery компонентіні Visual Query Builder белсенді болан SQL асиетіне SQL-сранысыны генерацияланан мтіні меншіктеледі.


Жаттыу жмыстары


1-жаттыу.


TQuery компонентін олдану

TTable, TQuery, TDataSource, TDBGrid компоненттерін олданып осымша рып крейік. Бл масата Customer.db жне Orders.db кестелерін пайдаланамыз, олар Borland C++ Builder комплектісіне кіретін BCDEMOS деректер орында орналасан. рылан осымша Customer кестесінен клиенттер тізімін, Orders кестесінен оларды тапсырыстарын шыару керек, сонымен атар клиент нмірі диапазонын тадауа рсат беруі ажет.

Жаа прект рамыз жне оны басты формасын CUST1.CPP деп, ал жобаны CUST.MAK деп сатаймыз.

Форма таырыбын "Контроль заказов" таырыбына згертеміз. Формаа TDBGrid компонентін, екі TGroupBox компонентін, бір Ttable компонентін, екі Tquery компонентін, ш TDataSource компонентін орналастырамыз. GroupBox1 компонентіне ш TRadioButton компонентін жне екі TButton компонентін оямыз. GroupBox2 компонентіне екі TEdit компонентін жне бір TButton компонентін оямыз.


4.31-сурет. CUST осымшасы формасына

компоненттерді орналастыру


Бл компоненттерге келесі асиеттерді орнатамыз:

Компонент аты асиеті Мні
Table1 DatabaseName BCDEMOS
TableName CUSTOMER.DB
Active False
DataSource1 DataSet Table1
DBGrid1 DataSource DataSource1
Query1 Database Name BCDEMOS
SQL select * from orders
Active False
DataSource2 DataSet Query1
Query2 DatabaseName BCDEMOS
DataSource3 DataSet Query2
Button1 Caption Открыть список &клиентов
Button2 Caption Открыть список &заказов
RadioButton1 Caption Клиенты
Checked True
RadioButton2 Caption Заказы
GroupBox1 Caption
GroupBox2 Caption
Button3 Caption Установить &диапазон
Edit1 Text
Edit2 Text
Label1 Caption Начало:
Label2 Caption Конец:
RadioButton3 Caption Заказы клиентов

 

Button1 батырмасына OnClick оиасын рамыз:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

if (Table1->Active)

{

Table1->Close();

Button1->Caption = "Ioe?uou nienie &eeeaioia";

}

Else

{

Table1->Open();

Button1->Caption= "Cae?uou nienie &eeeaioia";

}

}

Енді осы батырманы басанда Customer кестесі бірде ашылады, бірде жабылады, сонымен атар батырмадаы жазу згеріп отырады.

Button2 батырмасына OnClick деуші оиасын рамыз :

void __fastcall TForm1::Button2Click(TObject *Sender)

{

if (Query1->Active)

{

Query1->Active = false;

Button2->Caption = "Ioe?uou список &caeacia";

}

Else

{

Query1->Active = true;

Button2->Caption = "Заe?uou список &caeacia";

}

}

Button2 батырмасын басанда Query1 сранысы бірде ашылады, бірде жабылады, рамында тапсырыстар тізімі бар:

RadioButton1 жне RadioButton2 радиобатырмаларына OnClick деуші оиасын рамыз:

void __fastcall TForm1::RadioButton1Click(TObject *Sender)

{

DBGrid1->DataSource = DataSource1;

}

//------------------------------------------------------------------------

void __fastcall TForm1::RadioButton2Click(TObject *Sender)

{

DBGrid1->DataSource =DataSource2;

}

Енді осы радиобатырмалар кмегімен клиенттер тізімі жне тапсырыстар тізімі арасында ауысуа болады.

Button3 батырмасына OnClick деуші оиасын рамыз:

void __fastcall TForm1::Button3Click(TObject *Sender)

{

if (Table1->Active)

{

Table1->SetRangeStart();

Table1->Fields[0]->AsString = Edit1->Text;

Table1->SetRangeEnd();

Table1->Fields[0]->AsString = Edit2->Text;

Table1->ApplyRange();

}

}

Енді Edit1 жне Edit2 деу рістері жне Button3 батырмасы кмегімен клиенттер нмірі диапазонын тадауа болады, яни олар туралы мліметтер DBGrid1 крінуі шін.

Сосын Visual Query Builder арылы Query2 компонентіні SQL асиетін орнатамыз. Деректер оры аты ретінде BCDEMOS тадаймыз жне сраныса CUSTOMER жне ORDERS кестелерін енгіземіз. Ары арай кестелер арасында байланыс орнатамыз.

Сраныса келесі рістерді енгіземіз:


  • Customer.CustNo

  • Customer.Company

  • Orders.OrderNo

  • Orders.AmountPaid

 

4.32-сурет. Аралас сраныс ру шін Visual Query Builder олдану


Енді сраныс нтижесін сатып алушы нмірі бойынша срыптаймыз жне Visual Query Builder –ден шыамыз.

Объектілер инспекторын олданып, Query2 компонентін тадаймыз жне Active асиеті мнін true теестіреміз.

RadioButton3 радиобатырмасына OnClick деуші оиасын рамыз:

void __fastcall TForm1::RadioButton3Click(TObject *Sender)

{

DBGrid1->DataSource= DataSource3;

}

осымшаны компиляциялаймыз. ос деректер жиынын ашу шін. батырмамен "Открыть список заказов" басамыз. Радиобатырмаларды олданып, оларды арасында ауысып креміз.


4.33-сурет. Дайын осымша осылай крінеді


2-жаттыу

Деректер модулі.

Алдыны жаттыуда Data Access беті компоненттерін осымшаны басты формасына орналастырды. Біра мндай жадай, формада кп санды крінбейтін компоненттерді болуы олданушы интерфейсін жобалауды иындатады. Осы масатта C++ Builder-де арнайы деректер модулі - TDataModule типі бар. Осы типтегі компонентті шартты трде форма трі деп арастыруа болады. мндай компонент-контейнер Data Access беті компоненттерін рамында стай алады, ал зі бадарламаны орындалу уаытында олданушыа крінбейді.