Кампаненты для работы знаходзяцца на панэлі dbGo (прыклад 19.5).
- ADOConnection — ADO-злучэнне, выкарыстоўваецца для ўстаноўкі злучэння з ADO-крыніцай даных;
- ADODataSet — набор даных ADO;
- ADOTable — табліца ADO, забяспечвае доступ да адной табліцы ADO-крыніцы даных і дазваляе іншым кампанентам кіраваць гэтымі данымі, звязваючыся з кампанентам ADOTable праз кампанент DataSource;
- ADOQuery — запыт ADO, дазваляе выконваць SQL-каманды.
Для візуалізацыі даных выкарыстоўваюцца кампаненты панэлі Data Controls (прыклад 19.6). Для забеспячэння сувязі паміж візуальнымі кампанентамі і кампанентамі, якія забяспечваюць тэхналогію ADO, выкарыстоўваюць кампанент DataSource, размешчаны на ўкладцы Data Access (прыклад 19.7).
Такім чынам, для працы з базамі даных па тэхналогіі ADO на форме неабходна размяшчаць кампаненты (прыклад 19.8):
- якія забяспечваюць рэалізацыю тэхналогіі ADO;
- якія забяспечваюць візуалізацыю таблічных даных;
- якія забяспечваюць сувязь паміж тэхналагічнымі і візуальнымі кампанентамі.
Прыклад 19.9. Стварыць праект, які дазволіць праглядаць табліцу базы даных.
Этапы выканання задання
- Размясціць на форме кампаненты ADOTable і ADOConnection (палітра dbGo), DataSource (палітра Data Access). DBGrid і DBNavigator (палітра Data Controls), Button і LabeledEdit.
- Наладзіць злучэнне з базай даных Акадэмікі.mdb, створанай у Access (файл размясціць у папцы Win32\Debug), выкарыстоўваючы ConnectionString (прыклад 19.10).
2.1. Устанавіць значэнне false для ўласцівасці LoginPromt (для таго, каб пры запуску не запытваўся пароль на доступ да БД). 2.2. Двайная пстрычка па кампаненце ADOConnection1 адкрые акно налад. 2.3. На ўкладцы Поставщик данных выбіраем Microsoft Jet 4.0 OLE DB Provider. 2.4. На ўкладцы Соединение выбіраем файл з базай даных.
- Устанавіць для кампанента ADOTable1 наступныя значэнні ўласцівасцей. 3.1. Connection — ADOConnection1.
3.2. TableName — выбраць з выпадальнага спіса імя табліцы: Члены-карэспандэнты Акадэміі навук Беларусі. 3.3. Active — true.
- Устанавіць значэнне ADOTable1 для ўласцівасці DataSet кампанента DateSource1.
- Устанавіць значэнне DateSource1 для ўласцівасці DateSource кампанентаў DBGrid1 і DBNavigator.
- Наладжваем палі табліцы (прыклад 19.11):
6.1. Двайной пстрычкай па кампаненту DBGrid1 (табліцы) адкрываем спіс палёў. 6.2. У спісе, які з'явіўся, па чарзе выбіраем кожнае поле і ў інспектары аб'ектаў мяняем уласцівасць DisplayWidth (у залежнасці ад кантэксту). 6.3. Адключаем уласцівасць Active ў ADOTable1.
- Напісаць апрацоўшчык падзеі onClick для кнопкі (прыклад 19.12).
Адна з самых распаўсюджаных аперацый, якая выконваецца з табліцай БД, — гэта пабудова запытаў на пошук запісаў, якія задавальняюць умове. Для гэтага можна праглядзець усе запісы і праверыць значэнні ў адпаведных палях. Для агляду запісаў табліцы выкарыстоўваюць метады кампанента ADOTable: First, Last, Prior, Next, якія перамяшчаюць паказальнік бягучага запісу на першы, апошні, наступны і папярэдні запіс адпаведна.
Для доступу да значэнняў палёў выкарыстоўваецца ўласцівасць Filds, якая захоўвае масіў значэнняў палёў. Зварот да кожнага канкрэтнага поля адбываецца па індэксе.
Прагляд запісаў можа ажыццяўляцца ў цыкле while з умовай, пакуль не будзе дасягнуты канец файла, або ў цыкле for па колькасці запісаў у табліцы.
Прыклад 19.13. Дадаць у праект з прыкладу 19.9 пошук па ўмове:
- «количество ученых, получивших звание после введенного года»;
- «количество ученых, с указанной специализацией»;
- «самый ранний год присвоения звания»;
- «количество ученых, родившихся до введенной даты».
Этапы выканання задання
- Дадаць на форму кампанент PageControl (кампанент з укладкамі).
- З кантэкстнага меню дадаць дзве ўкладкі. Першую ўкладку назваць «Таблица» і перанесці на яе кампаненты DBGrid, DBNavigator, Button і LabeledEdit.
- Другую ўкладку назваць «Поиск». Размясціць на ёй тры LabeledEdit (для ўводу ўмоў), чатыры кампаненты Button (для выканання запыту) і чатыры кампаненты Label (для размяшчэння адказу).
- Напісаць апрацоўшчык OnClick для кнопак:
4.1. устанавіць паказальнік на першае поле; 4.2. у цыкле праглядзець усе запісы; 4.3. для кожнага запісу праверыць значэнне ў тым полі, якое паказана па ўмове.
Для кампанента ADOTable вызначаны метады Insert, Edit, Delete, Append, якія пераводзяць табліцу ў рэжымы ўстаўкі, рэдагавання, выдалення, дадання запісу адпаведна. Гэтыя ж метады візуалізаваны ў выглядзе кнопак кампанента DBNavigator.
Метад Post ажыццяўляе фізічнае захаванне змененых даных. Пры выкарыстанні кампанента DBNavigator метад спрацоўвае аўтаматычна.
Метад FieldByName дае магчымасць звароту да даных у палях па імені палі.
Метад Refresh дазваляе абнавіць адрэдактаваную табліцу на форме. |
Прыклад 19.5. Кампаненты для работы з табліцамі БД па тэхналогіі ADO:

Кампанент ADOconnection можа выкарыстоўвацца як пасрэднік паміж данымі і іншымі кампанентамі ADO. Магчымы іншы варыянт арганізацыі сувязяў. Для ўстанаўлення злучэння з крыніцай даных наўпрост кампаненты ADO маюць уласцівасць ConnectionString, з дапамогай якой могуць ствараць свой уласны канал доступу да даных.
Прыклад 19.6. Кампаненты для візуалізацыі даных у табліцах БД:

Прыклад 19.7. Кампанент для ўстаноўкі сувязі:

Прыклад 19.8. Рэалізацыя тэхналогіі ADO у C++Builder:

Прыклад 19.9. Форма на этапе праектавання:

Прыклад 19.10. Налады ADOConnection:

Імя файла лепш паказваць без шляху да БД.

Прыклад 19.11. Налада палёў табліцы:

Прыклад 19.12. Апрацоўшчык падзеі OnClick для кнопкі.
void __fastcall TForm1::
Button1Click(TObject *Sender)
{
ADOTable1 ->Active = true;
LabeledEdit1->Text =
ADOTable1->RecordCount;
}
|
Дадатак у час працы:

Кнопкі навігатара дазваляюць дадаваць і выдаляць радкі ў табліцы. Пры гэтым змены аўтаматычна запісваюцца ў файл БД.
Прыклад 19.13. Форма на этапе праектавання:

Апрацоўшчыкі падзей:
void __fastcall TForm1::
Button2Click(TObject *Sender)
{
int k = 0;
ADOTable1->First();
//пошук па пятым полі
//"Год присвоения звания"
while (!ADOTable1->Eof) {
if (ADOTable1->Fields->
Fields[5]->AsInteger >
LabeledEdit2->Text) {
k++;
}
ADOTable1->Next();
}
Label1->Caption = k;
}
void __fastcall TForm1::
Button3Click(TObject *Sender)
{
int k = 0;
ADOTable1->First();
//пошук па полі "Специализация"
while (!ADOTable1->Eof) {
if (ADOTable1->Fields->
FieldByName("Специализация")->
AsString ==
LabeledEdit3->Text) {
k++;
}
ADOTable1->Next();
}
Label2->Caption = k;
}
void __fastcall TForm1::
Button4Click(TObject *Sender)
{
int k = 3000;
ADOTable1->First();
//пошук па пятым полі
//"Год присвоения звания"
while (!ADOTable1->Eof) {
if (ADOTable1->Fields->
Fields[5]->AsInteger < k) {
k = ADOTable1->Fields->
Fields[5]->AsInteger;
}
ADOTable1->Next();
}
Label3->Caption = k;
}
void __fastcall TForm1::
Button5Click(TObject *Sender)
{
int k = 0;
ADOTable1->First();
//пошук па другім полі
//"Дата рождения"
for (int i = 0; i < ADOTable1->RecordCount; i++) {
if (ADOTable1->Fields->
Fields[2]->AsDateTime <
StrToDate(LabeledEdit4->Text)) {
k++;
}
ADOTable1->Next();
}
Label4->Caption = k;
}
|
Дадатак у час працы:

|