Печатать книгуПечатать книгу

§ 19. Кампаненты для работы з базамі даных

Сайт: Профильное обучение
Курс: Інфарматыка. 11 клас (Павышаны ўзровень)
Книга: § 19. Кампаненты для работы з базамі даных
Напечатано:: Гость
Дата: Пятница, 6 Июнь 2025, 07:54

19.1. Тэхналогія ADO

Сістэмы кіравання базамі даных (СКБД) — гэта праграмныя сродкі, прызначаныя для стварэння, напаўнення, абнаўлення і выдалення баз даных. Па рэалізацыі СКБД можна вылучыць тры асноўных выгляда (прыклад 19.1). Заказныя СКБД патрабуюць істотных выдаткаў пры распрацоўцы, аднак заказныя СКБД у максімальнай ступені ўлічваюць спецыфіку працы заказчыка (таго ці іншага прадпрыемства), іх інтэрфейс звычайна інтуітыўна зразумелы карыстальнікам і не патрабуе ад іх спецыяльных ведаў.

Асяроддзе праграміравання C++Builder валодае магутнымі сродкамі для распрацоўкі СКБД (прыклад 19.2).

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

Тэхналогія ADO (ActiveX Data Object) забяспечвае механізм доступу да даных, які распрацаваны карпарацыяй Microsoft, з дапамогай якога можна звязвацца з рознымі данымі дадаткаў Microsoft. Дазваляе прадстаўляць даныя з разнастайных крыніц (рэляцыйных баз даных, тэкставых файлаў і г. д.) у аб'ектна-арыентаваным выглядзе.

У адпаведнасці з тэрміналогіяй ADO любая крыніца даных з'яўляецца сховішчам даных. Дадатак узаемадзейнічае са сховішчам даных з дапамогай інтэрфейса OLE. Для кожнага тыпу сховішча даных выкарыстоўваецца свой інтэрфейс ADO. Інтэрфейс забяспечвае зварот да даных сховішча з запытамі, інтэрпрэтацыю службовай інфармацыі, якая вяртаецца, і вынікаў выканання запытаў для перадачы іх дадаткам (прыклад 19.3).

Ужываючы тэхналогію ADO, можна ў якасці сховішча даных выкарыстоўваць базы даных, створаныя ў MS Access (прыклад 19.4). Файл БД павінен мець фармат MBD.

Прыклад 19.1. Класіфікацыя СКБД:

Прыклад 19.2. Тэхналогіі працы з БД, якія падтрымліваюцца ў С++Builder:

Прыклад 19.3. Механізм тэхналогіі ADO:

 

Прыклад 19.4. Перавагі БД MS Access:

1) Усе табліцы БД захоўваюцца ў адным файле, што палягчае стварэнне рэзервовых копій, пераноснасць на іншыя камп'ютары.

2) Палі ў табліцы можна называць па-руску.

19.2. Кампаненты для работы з базай даных

Кампаненты для работы знаходзяцца на панэлі 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):

  1. якія забяспечваюць рэалізацыю тэхналогіі ADO;
  2. якія забяспечваюць візуалізацыю таблічных даных;
  3. якія забяспечваюць сувязь паміж тэхналагічнымі і візуальнымі кампанентамі.

Прыклад 19.9. Стварыць праект, які дазволіць праглядаць табліцу базы даных.

Этапы выканання задання

  1. Размясціць на форме кампаненты ADOTable і ADOConnection (палітра dbGo), DataSource (палітра Data Access). DBGrid і DBNavigator (палітра Data Controls), Button і LabeledEdit.
  2. Наладзіць злучэнне з базай даных Акадэмікі.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. На ўкладцы Соединение выбіраем файл з базай даных.
  3. Устанавіць для кампанента ADOTable1 наступныя значэнні ўласцівасцей.           3.1. Connection — ADOConnection1.
     3.2. TableName — выбраць з выпадальнага спіса імя табліцы: Члены-карэспандэнты Акадэміі навук Беларусі.
     3.3. Active — true.
  4. Устанавіць значэнне ADOTable1 для ўласцівасці DataSet кампанента DateSource1.
  5. Устанавіць значэнне DateSource1 для ўласцівасці DateSource кампанентаў DBGrid1 і DBNavigator.
  6. Наладжваем палі табліцы (прыклад 19.11):
     6.1. Двайной пстрычкай па кампаненту DBGrid1 (табліцы) адкрываем спіс палёў.
     6.2. У спісе, які з'явіўся, па чарзе выбіраем кожнае поле і ў інспектары аб'ектаў мяняем уласцівасць DisplayWidth (у залежнасці ад кантэксту).
     6.3. Адключаем уласцівасць Active ў ADOTable1.
  7. Напісаць апрацоўшчык падзеі onClick для кнопкі (прыклад 19.12).

Адна з самых распаўсюджаных аперацый, якая выконваецца з табліцай БД, — гэта пабудова запытаў на пошук запісаў, якія задавальняюць умове. Для гэтага можна праглядзець усе запісы і праверыць значэнні ў адпаведных палях. Для агляду запісаў табліцы выкарыстоўваюць метады кампанента ADOTable: First, Last, Prior, Next, якія перамяшчаюць паказальнік бягучага запісу на першы, апошні, наступны і папярэдні запіс адпаведна.

Для доступу да значэнняў палёў выкарыстоўваецца ўласцівасць Filds, якая захоўвае масіў значэнняў палёў. Зварот да кожнага канкрэтнага поля адбываецца па індэксе.

Прагляд запісаў можа ажыццяўляцца ў цыкле while з умовай, пакуль не будзе дасягнуты канец файла, або ў цыкле for па колькасці запісаў у табліцы.

Прыклад 19.13. Дадаць у праект з прыкладу 19.9 пошук па ўмове:

  1. «количество ученых, получивших звание после введенного года»;
  2. «количество ученых, с указанной специализацией»;
  3. «самый ранний год присвоения звания»;
  4. «количество ученых, родившихся до введенной даты».

Этапы выканання задання

  1. Дадаць на форму кампанент PageControl (кампанент з укладкамі).
  2. З кантэкстнага меню дадаць дзве ўкладкі. Першую ўкладку назваць «Таблица» і перанесці на яе кампаненты DBGrid, DBNavigator, Button і LabeledEdit.
  3. Другую ўкладку назваць «Поиск». Размясціць на ёй тры LabeledEdit (для ўводу ўмоў), чатыры кампаненты Button (для выканання запыту) і чатыры кампаненты Label (для размяшчэння адказу).
  4. Напісаць апрацоўшчык 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;

}

Дадатак у час працы:

19.3. Пабудова запытаў на мове SQL

Пры рэалізацыі праектаў па апрацоўцы БД на форме з'яўляецца вялікая колькасць невізуальных кампанентаў. Для таго каб яны не запаўнялі форму, можна выкарыстоўваць модуль DataModule (прыклад 19.14). Пасля гэтага дадаецца невізуальны модуль Unit2, на якім можна размяшчаць невізуальныя кампаненты (прыклад 19.15). Для таго каб кампаненты былі даступныя модулю Unit1, неабходна яго падключыць:

#include "Unit2.h"

Аналагічна трэба падключыць модуль Unit1 у модулі Unit2.

Базы даных пры выкананні запытаў выкарыстоўваюць мову SQL. Кампанент, які дазваляе выкарыстоўваць запыты на мове SQL, —  ADOQuery. Праца кампанента і настройка аналагічныя кампаненту ADOTable.

Для адлюстравання ўсёй табліцы ва ўласцівасці SQL кампанента павінен быць прапісаны запыт:

Select * From <імя табліцы БД>

Для выканання запыту выкарыстоўваецца метад ExecSQL.

Прыклад 19.16. Стварыць праект, у якім неабходна рэалізаваць магчымасць выканання SQL запытаў да базы даных Country.mdb.

Этапы выканання задання

  1. Дадаць у праект модуль DataModule з кампанентамі ADOConnection, ADOQuery і DataSource. Наладзіць уласцівасці кампанентаў, як у прыкладзе 19.13.
  2. Дадаць на форму кампаненты DBGrid, Memo, Button.
  3. Ва ўласцівасці Active кампанента ADOQuery1 устанавіць значэнне true.
  4. Для адлюстравання ўсёй табліцы ва ўласцівасці SQL кампанента ADOQuery1 прапісаць запыт (прыклад 19.17):
    Select * From Государства
  5. Рэалізаваць магчымасць выканання запыту, запісанага ў Memo, па націску кнопкі (прыклад 19.18). Для гэтага неабходна тэкст з кампанента Мемо перадаць уласцівасці SQL кампанента ADOQuery1 і затым выканаць запыт.

Прыклад 19.14. Даданне модуля DataModule.

  1. Выканаць каманду File→New→Other…
  2. Выбраць С++Builder DataBase.
  3. Выбраць DataModule.
  4. Падключыць Unit1 да Unit2 і Unit2 да Unit1.

Прыклад 19.15. Размяшчэнне невізуальных кампанентаў:

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

Прыклад 19.17. Рэдагаванне запыту для ўласцівасці SQL кампанента:

Прыклад 19.18. Апрацоўшчык падзеі OnClick для кнопкі.

void __fastcall TForm1::Button1Click
                (TObject *Sender)

{

  DataModule2->ADOQuery1->SQL->Clear();

  DataModule2->ADOQuery1->Active = false;

  if (Memo1->Lines->Count > 0) {

    DataModule2->ADOQuery1->SQL->

    AddStrings(Memo1->Lines);

    DataModule2->ADOQuery1->ExecSQL();

    DataModule2->ADOQuery1->Active = true;

  }

}

Дадатак у час працы:

Пытанні да параграфа

1. Якія тэхналогіі прымяняюцца пры стварэнні СКБД сродкамі сістэмы праграміравання C++Builder?

2. Якія кампаненты выкарыстоўваюцца для рэалізацыі тэхналогіі ADO?

3. Як устанаўліваецца сувязь паміж кампанентамі ADO і візуальнымі кампанентамі на форме?

4. Якія метады дазваляюць праглядаць запісы табліцы?

5. Як можна звяртацца да палёў у табліцы?

6. Які кампанент дазваляе выкарыстоўваць запыты SQL?

7. Для чаго прызначаны модуль DataModule?


Практыкаванні

Для праекта з прыкладу 19.13 дадайце наступныя магчымасці:

  1. Дадаць новую ўкладку для кампанента PageControl, якую варта назваць Форма.
  2. Размясціць на ўкладцы «Форма» наступныя кампаненты:

    Кампанент поле DBEdit размешчаны на ўкладцы DataControls. Для такіх кампанентаў можна ўстанавіць сувязі з палямі базы даных, змяніўшы іх уласцівасці ў інспектары аб'ектаў:

    3*. Дадаць магчымасць змены шрыфту і колеру для кампанентаў, размешчаных на форме.

2. Рэалізуйце магчымасць дадання запісаў у табліцу з выкарыстаннем дадатковай формы (для праекта прыкладу 19.13).

    1. Размясціце на ўкладцы «Таблица» кнопку «Добавить запись». Зрабіце яе нябачнай.
    2. Стварыце новую форму ў праекце: File-> New-> VCL Form — C++Builder.
    3. Захавайце форму ў папку з праектам.
    4. Дадайце радок #include "Unit2.h" у файл Unit1.h. (магчымасць доступу да другой формы з першай).
    5. Дадайце радок #include "Unit1.h" у файл Unit2.h. (магчымасць звяртацца да кампанентаў першай формы з другой).
    6. Размясціце на Form2:
      • 5 кампанентаў LabeledEdit (назву размясціць злева: уласцівасць LabelPosition=lpLeft),
      кампанент Button («ОК»).
      Кнопка «Добавить запись» становіцца бачнай пасля адлюстравання табліцы.
    7. Для кнопкі «Добавить запись» напісаць у апрацоўшчыку каманду:
      Form2->Show();
      У апрацоўшчыку кнопкі «ОК» на Form2 прапісаць наступныя каманды:
      Form1->ADOTable1->Active = true;
      Form1->ADOTable1->Fields->Fields[0]->ReadOnly = false;
      Form1->ADOTable1->Fields->Fields[1]->ReadOnly = false;
      Form1->ADOTable1->Fields->Fields[2]->ReadOnly = false;

      Form1->ADOTable1->Insert();
      Form1->ADOTable1->Fields->Fields[0]->Value = Form1->ADOTable1->RecordCount + 1;
      Form1->ADOTable1->Fields->Fields[1]->Value = Form2->LabeledEdit1->Text;

      Form1->ADOTable1->UpdateBatch();//прымяненне абнаўленняў
      Form1->ADOTable1->Refresh();
    8. *Дадайце каманды праверкі карэктнасці дадаваных даных:

1. Прозвішча павінна запісвацца маленькімі літарамі, а пачынацца з вялікай літары.
2. Пасля прозвішча павінен быць адзін прабел.
3. Ініцыялы запісваюцца без прабелу, вялікімі літарамі з кропкай пасля іх.
4. Дата нараджэння мае фармат: 2 лічбы, кропка, 2 лічбы, кропка, чатыры лічбы. Праверыць карэктнасць даты (месяц ад 1 да 12, дзень ад 1 да (28, 29, 30,31), год ад 1900 да 2000).
5. Пол змяшчае адну літару: «м» або «ж».
6. Год прысваення звання — лік з прамежку [1900..20..]. *Правую мяжу прамежку года можна атрымліваць з бягучай даты.
7. Пры незахаванні фармату выдаваць адпаведнае паведамленне.

3. Для праекта з прыкладу 19.16 дадайце наступныя магчымасці:

    1. Дадайце кнопкі «Сохранить Запрос» і «Загрузить Запрос» (выкарыстоўваючы дыялогі работы з файламі).
    2. Стварыце і захавайце 3 запыты:
      1. З палямі Название і Денежная единица, якія адлюстроўваюць краіны, у якіх грашовая адзінка еўра.
      2. З палямі Название і Язык, якія адлюстроўваюць краіны, у якіх назва мовы пачынаецца з літар 'а 'ці 'н'.
      3. Рэалізуйце свой запыт (складальны, адно з палёў павінна быць лічбавым).
    3. Дадайце кнопку «Запрос 2» і тэкставае поле. Рэалізуйце запыт для пошуку краін, першыя літары назваў якіх уведзены ў тэкставае поле.
    4. Дадайце кнопку «Запрос 3», выпадальны спіс і тэкставае поле. У выпадальным спісе змясціце знакі «>, <, =». Рэалізуйце запыт для пошуку краін, плошча якіх — значэнні ( > ,<,=), уведзенага ў тэкставае поле.
    5. Дадайце кнопку «Запрос 4», і два спіса. У першы спіс змясціце назвы палёў, у другі — словы «возрастание», «убывание».  Рэалізуйце запыт, які сартуе табліцу згодна з абраным крытэрыем.