Демонстрация методов оперирования данными в таблице базы данных Microsoft Access с помощью компонента TADOTable
В данной теме описывается использование методов компонента TADOTable для работы с данными в базе данных Microsoft Access.
Продемонстрированы следующие методы:
– Append – добавление новой записи в конец таблицы;
– Insert – вставка новой записи в текущую позицию таблицы;
– Edit – редактирование текущей записи;
– Post – фиксирование изменений в базе данных.
Также описаны разные методы доступа к значениям полей текущей записи таблицы базы данных.
Компонент TADOTable представляет собой одну таблицу базы данных. Этот компонент может осуществлять вставку, редактирование, удаление, просмотр, поиск и фильтрование набора записей. Этого достаточно для одной таблицы. Но, в случае обработки данных с нескольких объединенных таблиц, эту работу компонентом TADOTable осуществить невозможно. Для этого используется компонент-запрос TADOQuery, который использует язык баз данных SQL.
Условие задачи
Создать приложение, реализующее основные операции над таблицей базы данных с использованием методов системы Delphi:
– добавление записи в конец таблицы базы данных;
– вставка записи в текущую позицию таблицы базы данных;
– редактирование записи в таблице базы данных;
– удаление записи из таблицы базы данных.
Демонстрационная таблица базы данных носит имя Table1. Структура таблицы следующая.
Скачать таблицу можно здесь.
Выполнение
Сохранить проект в некоторой папке.
Имя главной формы оставить по умолчанию Form1.
- Построение главной формы приложения.
Разместить на форме компоненты как показано на рисунке 1.
На форме размещаются компоненты следующих типов:
– компонент типа TLabel для вывода сообщения. Создается объект-переменная с именем Label1;
– четыре компонента типа TButton. Каждый компонент вызовет соответствующую команду обработки данных в базе данных. Создаются четыре объекта с именами Button1, Button2, Button3, Button4;
– компонент типа TDBGrid. Используется для отображения таблицы базы данных. Создается объект с именем DBGrid1.
Рис. 1. Главная форма приложения после размещения компонент
- Настройка свойств формы.
Основные свойства формы настраиваются с помощью Object Inspector. Для настройки свойств формы Form1 сначала нужно выделить форму. После осуществить настройку следующих свойств:
– свойство Caption = «Программа демонстрации методов оперирования базой данных»;
– свойство Position = “poScreenCenter”;
– свойство BorderStyle = “bsDialog”.
- Настройка свойств компонентов Label1, Button1, Button2, Button3, Button4.
Чтобы настроить свойство заданного компонента нужно предварительно выделить этот компонент. Настраиваются следующие свойства компонент:
– в компоненте Label1 свойство Caption = “Таблица Table1”;
– в компоненте Button1 свойство Caption = “Добавить запись в конец таблицы”;
– в компоненте Button2 свойство Caption = «Вставить запись в текущую позицию”;
– в компоненте Button3 свойство Caption = «Редактировать запись”;
– в компоненте Button4 свойство Caption = «Удалить запись”;
Также нужно откорректировать размеры и позиции компонент на форме.
В результате форма будет иметь вид, как показано на рисунке 2.
Рис. 2. Главная форма приложения
- Подключение базы данных к приложению.
Подключение базы данных к приложению осуществляется стандартным способом и представляет собой процесс уточнения в виде мастера. Подробный пример подключения описан здесь.
База данных подключается к приложению с помощью свойства ConnectionString компонента ADOConnection1.
При подключении нужно выбрать:
– в первом окне Source of Connection = “Use connection string”;
– в первой вкладке второго окна выбирается поставщик OLE DB = “Microsoft Jet OLE DB Provider”;
– в второй вкладке второго окна выбирается путь к файлу базы данных. Рекомендуется сохранять файл базы данных (*.mdb) в папке с разрабатываемым приложением.
- Настройка компонент для организации работы с базой данных.
Компоненты 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.
Рис. 3. Вид приложения после настройки компонент организации связи с базой данных
- Настройка вида таблицы в DBGrid1.
Таблица в DBGrid1 отображается не совсем удобно. Поэтому, с помощью редактора полей “Columns Editor …” компонента DBGrid1 можно отредактировать вид столбцов таблицы.
Вызов редактора полей осуществляется с помощью контекстного меню, которое вызовется кликом правой кнопки мышки в области компонента DBGrid1.
Подробное описание работы с редактором полей “Columns Editor” описывается здесь а также в похожих темах. В результате, получаем доступ к возможности редактирования ширины каждого поля. В данной теме работа с редактором полей компонента DBGrid1 не описывается.
После корректировки ширины полей в DBGrid1 форма приложения примет приблизительно следующий вид (рисунок 4).
Рис. 4. Форма приложения и редактор полей после настройки ширины полей вывода в DBGrid1
- Создание второстепенной формы 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.
Рис. 5. Компонент TDateTimePicker из вкладки Win32
Рис. 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.
Рис. 7. Форма Form2
Компоненты Edit1, Edit2, Edit3 и Edit4 предназначены для отображения значений записей соответствующих полей таблицы. Это могут быть новые значения в случае добавления, или существующие значения в случае редактирования данных.
- Программирование события клика на кнопке «Добавить запись в конец таблицы».
Из формы 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;
- Программирование события клика на кнопке «Вставить запись в текущую позицию».
Обработчик события клика на кнопке 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’, которое есть счетчиком.
- Программирование события клика на кнопке «Редактировать запись».
Листинг обработчика события клика на кнопке 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;
- Программирование события клика на кнопке «Удалить запись».
Листинг обработчика события удаления записи имеет вид.
procedure TForm1.Button4Click(Sender: TObject); begin if ADOTable1.RecordCount<=0 then exit; ADOTable1.Delete; end;
Удаление записи осуществляется методом.
ADOTable1.Delete;
- Запуск приложения на выполнение.
Теперь можно запустить приложение и исследовать его работу.