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

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

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

НД может находиться в одном из следующих режимов:

  • dsInactive – НД закрыт и неактивен, доступ к его данным невозможен.

  • dsBrowse – режим просмотра, в котором осуществляется перемещение по записям НД и просмотр данных.

  • dsEdit – редактирование текущей записи.

  • dsInsert – вставка новой записи.

  • dsSetKey – поиск записи, удовлетворяющей заданному критерию.

  • dsCalcField – выполняется расчет вычисляемых полей.

  • dsFilter – выполняется фильтрация записей.

Связи между режимами наборов данных можно отобразить в виде схемы:

2.5. Практическая работа

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

Поставьте на форму компоненты Table, DataSource, DBGrid для работы с таблицей Tovar.db. Свяжите их между собой.

Поставьте 5 кнопок Button, заголовки которых будут соответственно «Добавить», «Изменить», «Запомнить», «Удалить», «Отменить».

Опишем процедуры для каждой кнопки:

procedure TForm1.Button1Click(Sender: TObject);

begin

if Table1.State= dsBrowse then

Table1.Insert;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

if Table1.State= dsBrowse then

Table1.Edit;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

if Table1.State= dsBrowse then

if MessageDlg ('Удалить запись?', mtConfirmation, [mbYes, mbNo],0)=mrYes then

Table1.Delete;

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

if Table1.State in [dsInsert, dsEdit] then

Table1.Post;

end;

procedure TForm1.Button5Click(Sender: TObject);

begin

if Table1.State in [dsInsert, dsEdit] then

Table1.Cancel;

end;

2.6. Перемещение по записям набора данных

Перемещение по НД заключается в управлении указателем текущей записи (курсором). Этот указатель определяет запись, с которой будут выполняться какие-либо операции.

Перед перемещением указателя текущей записи НД автоматически переводится в режим просмотра.

Для перемещения указателя текущей записи используются методы:

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

Процедура Next – на следующую запись;

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

Процедура Prior – на предыдущую запись;

Функция MoveBy (n:integer): integer – перемещение на число запсией, указанных в параметре n

n>0 – перемещение вперед;

n<0 – назад;

n=0 – нет перемещения. Результат функции – число записей, на которое переместился указатель.

2.7. Практическая работа

Перемещение по записям НД с помощью кнопок.

Расположить на форме следующие компоненты:

Компонент SpinEdit (п. к. Samples) – редактор числа, обеспечивающий отображение и редактирование целого числа с возможностью его изменения с помощью двойной кнопки.

Для компонента Label1 в свойстве Caption оставьте пустую строку.

При помощи рассмотренных методов напишите процедуру для кнопки «Первая запись»:

procedure TForm1.Button1Click (Sender: TObject);

begin

Table1.First;

end;

Процедуры для кнопок «Следующая запись», «Предыдущая запись», «Последняя запись» напишите самостоятельно.

Для перемещения указателя на произвольное число записей используется счетчик SpinEdit1, в поле которого вводится это число. Для кнопки «Перемещение на…записей» напишите процедуру:

procedure TForm1.Button5Click (Sender: TObject);

begin

Table1.MoveBy (SpinEdit1.Value);

end;

Напишите обработчик события OnAfterScroll для компонента Table1. После выполнения события OnAfterScroll информация о текущей записи обновляется сразу после перемещения текущего указателя. Это событие происходит и при открытии НД, когда указатель текущей записи устанавливается на первую запись.

procedure TForm1.Table1AfterScroll (DataSet: TDataSet);

begin

label1.Caption:='Запись номер '+IntToStr(Table1.RecNo);

SpinEdit1.MinValue:= 1-Table1.RecNo;

SpinEdit1.MaxValue:= Table1.RecordCount-Table1.RecNo;

end;