015 — Демонстрация методов оперирования данными в таблице базы данных Microsoft Access с помощью компонента TADOTable




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

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

Продемонстрированы следующие методы:

Append – добавление новой записи в конец таблицы;

Insert – вставка новой записи в текущую позицию таблицы;

Edit – редактирование текущей записи;

Post – фиксирование изменений в базе данных.

Также описаны разные методы доступа к значениям полей текущей записи таблицы базы данных.

Компонент TADOTable представляет собой одну таблицу базы данных. Этот компонент может осуществлять вставку, редактирование, удаление, просмотр, поиск и фильтрование набора записей. Этого достаточно для одной таблицы. Но, в случае обработки данных с нескольких объединенных таблиц, эту работу компонентом TADOTable осуществить невозможно. Для этого используется компонент-запрос TADOQuery, который использует язык баз данных SQL.

 

Условие задачи

Создать приложение, реализующее основные операции над таблицей базы данных с использованием методов системы Delphi:

– добавление записи в конец таблицы базы данных;

– вставка записи в текущую позицию таблицы базы данных;

– редактирование записи в таблице базы данных;

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

Демонстрационная таблица базы данных носит имя Table1. Структура таблицы следующая.

01_02_00_015_table_rСкачать таблицу можно здесь.

 

Выполнение

  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_02r

Рис. 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_03rРис. 3. Вид приложения после настройки компонент организации связи с базой данных

 

  1. Настройка вида таблицы в DBGrid1.

Таблица в DBGrid1 отображается не совсем удобно. Поэтому, с помощью редактора полей “Columns Editor …” компонента DBGrid1 можно отредактировать вид столбцов таблицы.

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

Подробное описание работы с редактором полей “Columns Editor” описывается здесь а также в похожих темах. В результате, получаем доступ к возможности редактирования ширины каждого поля. В данной теме работа с редактором полей компонента DBGrid1 не описывается.

После корректировки ширины полей в DBGrid1 форма приложения примет приблизительно следующий вид (рисунок 4).

01_02_00_015_04rРис. 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_07rРис. 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. Запуск приложения на выполнение.

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