Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 Практический раздел.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
5.18 Mб
Скачать

Лабораторная работа №19

Тема: Использование основных приемов работы с наборами данных.

Цель работы: Научиться использовать основные приемы работы с наборами данных из баз данных.

Время работы: 2 учебных часа.

Правила по ТБ: Общие.

Оборудование рабочего места: Практикум, ПК.

Программное обеспечение: Windows, MS Office, Delphi

Вопросы входного контроля:

    1. Расскажите о главных компонентах для подключения БД.

  1. Расскажите, для чего используют компонент ADOConnection.

  2. Опишите свойства компонента ADOConnection.

  3. Расскажите, для чего используют компонент DateSource.

  4. Опишите свойства компонента DateSource.

  5. Расскажите, для чего используют компонент IBDatabase

КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

Работа с данными

Теперь, когда нам известны все основные компоненты, необходимые для работы с СУБД - как обеспечивающие доступ к данным, так и их отображение, можно перейти к вопросам практического характера. Прежде всего, это вопросы, касающиеся полей данных, а так же состояния наборов данных, программная навигация, сортировка, поиск и фильтрация. Так же, разумеется, будут рассмотрены правка, добавление и удаление записей.

Состояния и режимы набора данных

Как мы уже знаем, одним из основных компонентов Delphi для доступа к данным является Table. Этот компонент происходит от общего для всех наборов данных класса - TDataSet - набор данных. Именно на уровне набора данных информация из БД представляются как совокупность строк и столбцов. В этом базовом классе так же сосредоточены все основные свойства и методы для работы с наборами данных, включая управление состоянием набора, поиск, фильтрацию, сортировку и изменение данных.

ВНИМАНИЕ

Набор данных в Delphi - это некая логическая таблица, с которой может работать приложение. При этом порядок следования записей в наборе данных может отличаться от имеющегося в реальной таблице, поскольку зависит от того, используется ли сортировка. Равно как и количество записей в наборе зависит от наличия и параметров фильтрации.

Основными свойствами набора данных как такового являются Active и State, а применительно к записям - RecordCount и RecNo. В частности, свойство RecordCount указывает на текущее количество записей в наборе данных (которое может не совпадать с количеством записей в таблице БД благодаря возможной фильтрации), а свойство RecNo указывает на индекс активной записи.

Что касается свойства Active, то мы уже рассматривали его в контексте компонента Table и знаем, что оно отвечает за непосредственное подключение к БД. Значение этого свойства может быть установлено как на этапе разработки приложения, так и во время выполнения. При этом следует учитывать, что попытка установить свойство Active в истину может вызвать исключительную ситуацию, если не указана, как минимум, физическая таблица с данными (при помощи свойства TableName):

Table1.TableName='..\DB1\bill.db';//указываем физическую таблицу БД

Table1.Active:=true; // делаем набор активным

Если же поддерживать активное соединение по ходу дальнейшего выполнения программы нет необходимости, то можно вернуть состояние в неактивное, присвоив свойству Active значение ложь. Эту операцию необходимо сделать и в том случае, если требуется изменить исходный источник с данными:

Table1.Active:=false; // отключаемся

Table1.TableName='..\DB1\customer.db'; // меняем таблицу БД

Table1.Active:=true; // включаем внось

Альтернативным методом изменения состояния набора данных является использование методов Open и Close:

Table1.Close; // отключаемся

Table1.TableName='..\DB1\customer.db'; // меняем таблицу БД

Table1.Open; // включаем внось

Фактически, эти методы выполняют ту же работу, что и изменение свойства Active, т.е. обращение к методу Open устанавливает свойство Active в истину, а Close - в ложь. При написании программного кода принято использовать именно эти методы, а не изменять значение свойства Active.

Другое свойство набора данных - State - показывает текущее состояние набора данных, или режим его работы. Оно имеет тип TDataSetState и доступно для чтения во время выполнения программы. Основными значениями State являются следующие:

  • dsInactive - набор данных закрыт;

  • dsBrowse - набор данных доступен для промотра, но не находится в состоянии изменения;

  • dsEdit - текущая запись может быть изменена;

  • dsInsert - добавлена, но еще не отправлена в таблицу новая запись;

  • dsSetKey - осуществляется поиск записи (только для Table);

  • dsCalcFields - осуществляется расчет полей;

  • dsFilter - производится фильтрация записей;

  • dsOpening - начат но еще не завершен процесс открытия набора данных.

При помощи свойства State во время выполнения программы можно получить текущее состояние набора данных, а само изменение состояние инициализирует событие OnStateChange, которое происходит для связанного с источником данных компонента DataSource.

Рассмотрим работу с источником данных на примере, для которого нам потребуются компоненты Table, DataSource, DBGrid и OpenDialog. При этом компоненты для баз данных должны быть связаны между собой, т.е. у DataSource1 в свойстве DataSet должно быть указано Table1, а у DBGrid1 свойство DataSource должно иметь значение DataSource1. Теперь разместим на форме кнопку (Button), которая будет вызывать диалог выбора файла и производить работу по подключению данных, для чего нам понадобится обработчик события OnClick. А для компонента DataSource1 мы сделает обработчик события OnStatusChange, который будет выводить текущее состояние набора данных в заголовок окна. Вариант кода приведен в листинге 19.1.

Листинг 19.1. Подключение источника данных и слежение за его состоянием

procedure TForm1.Button1Click(Sender: TObject);

begin

if not OpenDialog1.Execute then

exit;

Table1.Close;

Table1.TableName:=OpenDialog1.FileName;

Table1.Open;

end;

procedure TForm1.DataSource1StateChange(Sender: TObject);

begin

case DataSource1.State of

dsInactive: Caption:='Отключено';

dsBrowse: Caption:='Просмотр данных';

dsEdit: Caption:='Правка данных';

dsInsert: Caption:='Вставка данных';

dsOpening: Caption:='Открытие источника данных';

else Caption:='Состояние неопределено';

end;

end;

Пример программы находится в каталоге Demo\Part4\DataSource.