015 – Демонстрація методів оперування даними в таблиці бази даних Microsoft Access з допомогою компонента TADOTable




Демонстрація методів оперування даними в таблиці бази даних Microsoft Access з допомогою компонента TADOTable

У даній темі описується використання методів компонента TADOTable для оперування даними в базі даних Microsoft Access.

Продемонстровано використання таких методів:

  • Append – додавання нового запису в кінець таблиці;
  • Insert – вставка нового запису в поточну позицію таблиці;
  • Edit – редагування поточного запису;
  • Post – фіксування змін в базі даних.

Також описано різні методи доступу до значень полів поточного запису таблиці бази даних.

Компонент TADOTable представляє собою одну таблицю бази даних. Цей компонент може здійснювати вставку, редагування, видалення, перегляд, пошук та фільтрування набору записів. Цього є достатньо для однієї таблиці. Але, у випадку обробки даних з декількох об’єднаних таблиць цим компонентом, цю роботу здійснити неможливо. Для цього використовується компонент TADOQuery, який представляє собою запит на мові SQL.

 

Умова задачі

Створити додаток, який реалізує основні операції над таблицею бази даних з використанням методів системи Delphi:

– додавання запису в кінець таблиці бази даних;

– вставка запису в поточну позицію таблиці бази даних;

– редагування запису в таблиці бази даних;

– видалення запису з таблиці бази даних.

Таблиця бази даних має ім’я Table1. Структура таблиці наступна.

01_02_00_015_table_u

Завантажити таблицю бази даних можна тут.

 

Виконання

  1. Завантажити Delphi.

Зберегти проект в деякій папці.

Ім’я головної форми залишити за замовчуванням Form1.

 

  1. Побудова головної форми додатку.

Розмістити на формі компоненти як показано на рисунку 1.

На формі розміщуються компоненти наступних типів:

– компонент типу TLabel для виведення повідомлення. Створюється об’єкт-змінна з іменем Label1;

– чотири компоненти типу TButton. Кожен компонент викликає відповідну команду обробки даних в базі даних. Створюються чотири об’єкти з іменами Button1, Button2, Button3, Button4;

– компонент типу TDBGrid. Використовується для відображення таблиці бази даних. Створюється об’єкт з іменем DBGrid1.

01_02_00_015_01_Рис. 1. Головна форма додатку після винесення компонент

 

  1. Настроювання властивостей форми.

Основні властивості форми настроюються з допомогою Object Inspector. Для настроювання властивостей форми Form1 спочатку потрібно виділити форму. Після здійснити настроювання таких властивостей:

– властивість Caption = «Програма демонстрації методів оперування базою даних»;

– властивість Position = “poScreenCenter”;

– властивість BorderStyle = “bsDialog”.

 

  1. Настроювання властивостей компонент Label1, Button1, Button2, Button3, Button4.

Щоб настроїти властивість заданого компонента потрібно попередньо виділити цей компонент. Настроюються наступні властивості компонент:

– у компоненті Label1 властивість Caption = “Таблиця Table1”;

– у компоненті Button1 властивість Caption = “Додати запис в кінець таблиці”;

– у компоненті Button2 властивість Caption = «Вставити запис в поточну позицію”;

– у компоненті Button3 властивість Caption = «Редагувати запис”;

– у компоненті Button4 властивість Caption = «Видалити запис”;

Також потрібно відкорегувати розміри та позиції компонент на формі.

У результаті форма матиме вигляд як показано на рисунку 2.

01_02_00_015_02uРис. 2. Головна форма додатку

 

 

  1. Підключення бази даних до додатку.

Підключення бази даних до програми здійснюється стандартним способом і представляє собою процес уточнення у вигляді майстра. Детальний приклад підключення наводиться тут.

База даних підключається до додатку з допомогою властивості ConnectionString компонента ADOConnection1.

При підключенні потрібно вибрати:

– у першому вікні Source of Connection = “Use connection string”;

– у першій вкладці другого вікна вибирається постачальник OLE DB = “Microsoft Jet OLE DB Provider”;

– у другій вкладці другого вікна вибирається шлях до файлу бази даних. Рекомендовано зберігати файл бази даних (*.mdb) у папці з розроблюваним додатком.

 

  1. Настроювання компонент для організації роботи з базою даних.

Компоненти ADOConnection1, DataSource1, ADOTable1 здійснюють зв’язок додатку з даними бази даних.

Компонент DBGrid1 відображає дані бази даних у вигляді таблиці.

Потрібно настроїти такі властивості компонент:

– у компоненті ADOConnection1 властивість LoginPrompt = “false”. Ця дія відмінить постійне запитування паролю для доступу до бази даних;

– у компоненті ADOTable1 властивість Connection = “ADOConnection1”;

– у компоненті ADOTable1 властивість TableName = “Table1”;

– у компоненті DataSource1 властивість DataSet = “ADOTable1”;

– у компоненті DBGrid1 властивість DataSource = “DataSource1”;

– у компоненті DBGrid1 з вкладки Options властивість dgEditing = “false”. Це заборонить випадкове редагування комірок таблиці бази даних через DBGrid1.

– у компоненті ADOTable1 властивість Active = “true”. Після виконання цієї операції дані з таблиці Table1 будуть відображені у компоненті DBGrid1.

Після виконаних дій, форма додатку матиме вигляд як показано на рисунку 3.

01_02_00_015_03uРис. 3. Вигляд додатку після настроювання компонент організації зв’язку з базою даних

 

  1. Настроювання вигляду таблиці в DBGrid1.

Таблиця в DBGrid1 відображається не зовсім зручно. Тому, з допомогою редактора полів “Columns Editor …” компонента DBGrid1 можна відредагувати вигляд стовпців таблиці.

Виклик редактора полів здійснюється з допомогою контекстного меню, яке викликається кліком правої кнопки мишки в області компонента DBGrid1.

Детальний опис роботи з редактором полів “Columns Editor” описується тут а також в схожих темах. В результаті отримуємо доступ до можливості редагування ширини кожного поля. У даній темі опускається робота з редактором полів компонента DBGrid1.

Після корегування ширини полів в DBGrid1 форма додатку прийме приблизно такий вигляд (рисунок 4).

01_02_00_015_04u

Рис. 4. Форма додатку та редактор полів після настроювання ширини полів виведення в DBGrid1

 

  1. Побудова другорядної форми Form2.

Форма Form2 буде відображати значення полів запису, що буде додаватись або редагуватись у демонстраційних командах. В залежності від вибраної команди у формі Form1, буде сформовано відповідні значення властивостей компонент форми Form2.

Процес створення нової форми в Embarcadero RAD Studio – Delphi детально описується тут. У результаті новій формі відповідає об’єкт-змінна (екземпляр класу) з іменем Form2. Зберегти форму у файлі (модулі) “Unit2.pas».

З палітри інструментів “Tool Palette” потрібно розмістити на формі Form2 компоненти, що відповідають полям таблиці Table1:

– з вкладки Standard чотири компоненти типу TLabel які відображають пояснюючі повідомлення. Буде створено чотири об’єкти з іменами Label1, Label2, Label3, Label4;

– з вкладки Standard три компоненти типу TEdit. Утвориться три об’єкти з іменами Edit1, Edit2, Edit3;

– з вкладки Win32 компонент типу TDateTimePicker. Утвориться об’єкт з іменем DateTimePicker1. Тут будуть вноситись значення поля DateTimeField;

– з вкладки Standard два компоненти типу TButton. Отримається два об’єкти з іменами Button1 і Button2.

01_02_00_015_05_Рис. 5. Компонент TDateTimePicker з вкладки Win32

 

01_02_00_015_06_Рис. 6. Форма Form2 після розміщення компонент

Настроїти такі властивості форми та компонент:

– у формі Form2 властивість BorderStyle = bsDialog;

– у формі Form2 властивість Position = poScreenCenter;

– у компоненті Button1 властивість Caption = «OK”;

– у компоненті Button1 властивість ModalResult = «mrOk”. Це означає, що при натиску на кнопці Button1 форма закриється з кодом повернення mrOK;

– у компоненті Button2 властивість Caption = «Скасувати”;

– у компоненті Button2 властивість ModalResult = «mrNo”. Це означає, що при натиску на кнопці Button2 форма закриється з кодом повернення mrNo;

– у компоненті Label1 властивість Caption = “TextField = «;

– у компоненті Label2 властивість Caption = «IntegerField = “;

– у компоненті Label3 властивість Caption = «FloatField = “;

– у компоненті Label4 властивість Caption = «DateTimeField = “.

Після встановлення властивостей та незначного корегування позицій та розмірів компонент, форма має вигляд як показано на рисунку 7.

01_02_00_015_07uРис. 7. Форма Form2

Компоненти Edit1, Edit2, Edit3 та Edit4 призначені для відображення значень записів відповідних полів таблиці. Це можуть бути нові значення у випадку додавання, чи існуючі значення у випадку редагування даних.

 

  1. Програмування події кліку на кнопці «Додати запис в кінець таблиці».

З форми Form1 буде викликатись форма Form2. У формі Form2 вводяться дані, що мають бути внесені в таблицю бази даних.

Лістинг обробника події кліку на кнопці Button1 наступний:

procedure TForm1.Button1Click(Sender: TObject);
var
  t_int:integer;
  t_float:real;
  t_string:string;
  t_date:TDateTime;

begin

  // 1. Сформувати властивості форми Form2
  Form2.Caption := 'Додавання запису в кінець таблиці';
  Form2.Edit1.Text := '';
  Form2.Edit2.Text := '0';
  Form2.Edit3.Text := '0,00';
  Form2.DateTimePicker1.Date := Date; // встановити поточну дату

  // 2. Виклик форми з перевіркою на натиск клавіші OK
  if Form2.ShowModal = mrOk then
  begin
    // зчитати дані у тимчасові змінні
    t_string := Form2.Edit1.Text;
    t_int := StrToInt(Form2.Edit2.Text);
    t_float := StrToFloat(Form2.Edit3.Text);
    t_date := Form2.DateTimePicker1.DateTime;

    // додати чистий запис в кінець таблиці
    ADOTable1.Append;

    // заповнити значення полів доданого запису
    ADOTable1.Fields[1].AsString := t_string;
    ADOTable1.Fields[2].AsInteger := t_int;
    ADOTable1.Fields[3].AsFloat := t_float;
    ADOTable1.Fields[4].AsDateTime := t_date;

    // зафіксувати зміни
    ADOTable1.Post;
  end;
end;

Додавання запису в кінець таблиці здійснюється викликом методу Append(), який реалізований в компоненті TADOTable.

Рядок виду

ADOTable1.Fields[1].AsString := t_string;

заносить значення змінної t_string у поле з індексом 1. Цьому полю відповідає поле з назвою TextField у таблиці бази даних.

Вищенаведений рядок можна замінити різними способами, які виконуватимуть ту ж саму роботу:

1)

ADOTable1.Fields[1].Value := t_string;

2)

ADOTable1.FieldByName('TextField').Value := t_string;

3)

ADOTable1.FieldByName('TextField').AsString := t_string;

4)

ADOTable1.FindField('TextField').Value := t_string;

5)

ADOTable1.FindField('TextField').AsString := t_string;

Це саме стосується й змінних інших типів.

Поле з індексом 0 є поле з іменем ID. Оскільки тип цього поля є лічильник, то він формується автоматично і його не потрібно змінювати.

Після внесення змін в таблицю, потрібно їх зафіксувати методом

ADOTable1.Post;

 

  1. Програмування події кліку на кнопці «Вставити запис в поточну позицію».

Обробник події кліку на кнопці Button2 є подібним до обробника, описаного в п. 9.

Лістинг обробника наступний.

procedure TForm1.Button2Click(Sender: TObject);
var
  t_int:integer;
  t_float:real;
  t_string:string;
  t_date:TDateTime;
begin
  // 1. Сформувати властивості форми Form2
  Form2.Caption := 'Вставити запис в поточну позицію';
  Form2.Edit1.Text := '';
  Form2.Edit2.Text := '0';
  Form2.Edit3.Text := '0,00';
  Form2.DateTimePicker1.Date := Date;

  // 2. Виклик форми Form2
  if Form2.ShowModal = mrOk then
  begin
    t_string := Form2.Edit1.Text;
    t_int := StrToInt(Form2.Edit2.Text);
    t_float := StrToFloat(Form2.Edit3.Text);
    t_date := Form2.DateTimePicker1.DateTime;

    ADOTable1.Insert;

    ADOTable1.FieldByName('TextField').Value := t_string;
    ADOTable1.FieldByName('IntegerField').Value := t_int;
    ADOTable1.FindField('FloatField').Value := t_float;

   ADOTable1.FieldByName('DateTimeField').Value := t_date;
    ADOTable1.Post;
  end;
end;

Як видно з лістингу, вставка нового запису в поточну позицію таблиці бази даних здійснюється методом

ADOTable1.Insert;

Однак, в даній таблиці, запис все одно буде вставлятись в кінець таблиці. Це зв’язано з тим, що дані таблиці сортуються за первинним ключем – полем ‘ID’, яке є лічильником.

 

  1. Програмування події кліку на кнопці «Редагувати запис».

Лістинг обробника події кліку на кнопці Button3 наступний.

procedure TForm1.Button3Click(Sender: TObject);
var
  t_int:integer;
  t_float:real;
  t_string:string;
  t_date:TDateTime;
begin
  // 1. Сформувати властивості форми Form2
  Form2.Caption := 'Редагування запису';
  Form2.Edit1.Text := ADOTable1.Fields[1].Value;
  Form2.Edit2.Text := ADOTable1.Fields[2].Value;
  Form2.Edit3.Text := ADOTable1.Fields[3].Value;
  Form2.DateTimePicker1.Date := ADOTable1.Fields[4].Value;

  // 2. Виклик форми 2
  if Form2.ShowModal=mrOk then
  begin
    // сформувати тимчасові змінні
    t_string := Form2.Edit1.Text;
    t_int := StrToInt(Form2.Edit2.Text);
    t_float := StrToFloat(Form2.Edit3.Text);
    t_date := Form2.DateTimePicker1.DateTime;

    // перевести таблицю в режим редагування
    ADOTable1.Edit;

    // внести зміни в поточний запис
    ADOTable1.Fields[1].Value := t_string;
    ADOTable1.Fields[2].Value := t_int;
    ADOTable1.Fields[3].Value := t_float;
    ADOTable1.Fields[4].Value := t_date;

    // зафіксувати зміни
    ADOTable1.Post;
  end;
end;

Для переведення таблиці в режим редагування використовується метод

ADOTable1.Edit;

 

  1. Програмування події кліку на кнопці «Видалити запис».

Лістинг обробника події видалення запису має вигляд.

procedure TForm1.Button4Click(Sender: TObject);
begin
  if ADOTable1.RecordCount<=0 then exit;
  ADOTable1.Delete;
end;

Видалення запису здійснюється методом.

ADOTable1.Delete;

 

  1. Запуск додатку на виконання.

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