Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_БД.doc
Скачиваний:
28
Добавлен:
04.05.2019
Размер:
4.03 Mб
Скачать
    1. Компоненты доступа и работы с данными. Тема: Наборы данных. Состояние и режимы наборов данных.

БД – это совокупность таблиц – физических объектов, находящихся на диске. В приложениях Delphi для работы с таблицами создаются наборы данных. Набор данных – это логическая таблица, с которой можно работать при выполнении приложения. Записи в набор данных отбираются по определенным правилам из одной или нескольких таблиц БД.

Для работы с наборами данных служат компоненты Table, Query, UpdateSQL, DecisionQuery, StoredProc.

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

Для локальных БД используется навигационный способ доступа к данным, при котором обрабатывается каждая отдельная запись. Каждый набор данных имеет невидимый указатель текущей записи, для которой выполняется редактирование или удаление. Например, компонент DBGrid указывает текущую запись с помощью специального маркера.

Класс TTable используется для доступа к БД через BDE и позволяет работать с таблицами Paradox, dBase, Access, FoxPro. Компоненты класса поддерживают следующие операции над наборами данных:

  • Навигация по записям

  • Модификация, добавление и удаление записей

  • Установка и использование фильтра

  • Использование индексов

  • Отображение упорядоченных данных.

Свойства.

DatabaseName, TableName, Activeрассмотрены в предыдущей теме.

RecordCount:Longint (только для чтения) – количество записей, составляющих набор данных. Управление числом записей выполняется косвенно. Для таблиц dBase и Paradox записи нумеруются с 1.

RecNo:Longintномер текущей записи в наборе данных, свойство доступно во время выполнения приложения. Например,

// переход к нужной записи

Table1.RecNo:=StrToInt(Edit1.Text);

// вывод номера текущей записи

Label1.Caption:=IntToStr(Table1.RecNo);

ReadOnly:Boolean – позволяет установить режим доступа только для чтения;

CanModify:Boolean (только для чтения) определяет, может ли приложение выполнять вставку, редактирование и удаление записей в таблице. На значение свойства влияет свойство ReadOnly.

Методы

процедура Firstустановка на первую запись;

процедура Nextустановка на следующую запись; для последней записи указатель не перемещается;

процедура Last – установка на последнюю запись;

процедура Prior – установка на предыдущую запись; для первой записи указатель не перемещается;

функция MoveBy (Distance: Integer): Integer; – перемещение на количество записей, указанное параметром функции. Например,

procedure TForm1.Button1Click(Sender: TObject);

begin

DataModule2.Table1.MoveBy(2);

Label1.Caption:=IntToStr(DataModule2.Table1.RecNo);

end;

Пример.

// перебор всех записей набора данных

var i: integer;

Table1.First;

For i:=1 to Table1.RecordCount do begin

// обработка i-ой записи

Table1.Next;

End;

Набор данных может находиться в открытом (Table1.Active:= True) или закрытом (Table1.Active:= False) состояниях.

процедура Open – открывает набор данных, например,

Table1.Open;

процедура Close – закрывает набор данных, например,

Table1.Close;

или Table1.Active:=False;

процедура EmptyTable – удаляет из таблицы все записи;

процедура Post; overrideзаписывает измененную запись в базу данных;

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

Режимы набора данных

dsInactive – неактивность, набор данных закрыт и доступ к данным не возможен. Набор данных переходит в этот режим, если Active:=False;

dsBrowse – осуществляется навигация по записям набора данных и просмотр. Переходит:

из режима dsInactive – если Active:=true;

из режима dsEdit – при вызове метода Post или Cancel;

из режима dsInsert - при вызове метода Post или Cancel;

dsEdit – редактирование текущей записи. Переходит из режима dsBrowse при вызове метода Edit.

dsInsert – вставка новой записи. Переходит из режима dsBrowse при вызове методов Insert, InsertRecord, Append или AppendRecord.

dsSetKey – поиск записи, удовлетворяющей заданному критерию. Переходит из dsBrowse при вызове методов SetKey, SetRangeXXX, FindKey, GotoKey, FindNearest, GotoNearest.

dsCalcFields - расчет вычисляемых полей. Используется обработчик события OnCalcFields.

dsFilter - фильтрация записей. Автоматически переходит из режима dsBrowse при выполнении обработчика события OnFilterRecord.

При выполнении программы режим набора данных можно определить с помощью свойства State:TDataSetState компонента DataSourse.

Например,

procedure TDataModule2.DataSource1StateChange(Sender: TObject);

begin

case DataSource1.State of

dsInactive: Form1.Label1.Caption:=’НД закрыт';

dsBrowse: Form1.Label1.Caption:='Просмотр НД';

dsEdit: Form1.Label1.Caption:='Редактирование';

dsInsert: Form1.Label1.Caption:='Вставка';

else Form1.Label1.Caption:=Режим не определен!'

end;

end;

События

BeforeOpen возникает непосредственно перед открытием набора данных. В его обработчике можно выполнить проверку каких-либо условий, и если они не соблюдены, то открытие набора данных можно запретить, например, с помощью процедуры Abort.

AfterOpen – возникает сразу после открытия набора данных.

BeforeClose и AfterCloseвозникают при закрытии набора данных.

Закрытие набора данных автоматически не сохраняет текущую запись, то есть произведенные изменения при редактировании или вставки для текущей записи будут потеряны. Поэтому перед закрытием набора данных нужно вызвать метод Post.

Например,

procedure TDataModule2.Table1BeforeClose(DataSet: TDataSet);

begin

if (Table1.State=dsEdit) or (Table1.State=dsInsert)

then Table1.Post;

end;