Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебники 60105.doc
Скачиваний:
10
Добавлен:
01.05.2022
Размер:
827.9 Кб
Скачать
  1. Форма с компонентами Table, DataSource и dbGrid

Теперь приложение можно запустить на выполнение и убедиться, что в таблице можно просматривать и изменять данные.

Чтобы запретить пользователю редактировать данные, нужно установить свойство DBGrid ReadOnly в true.

Для редактирования отдельных полей служит Редактор полей, который вызывается двойным нажатием на компоненте Table1. Сначала редактор пуст. Для добавления полей нужно в контекстном меню редактора выбрать команду Add fields (добавить поля). Появится диалоговое окно, содержащее список всех полей таблицы. С помощью курсора выделим в нем все поля, кроме Id. Дальше работать можно будет только с ними. После нажатия кнопки ОК выбранные поля будут добавлены в основное окно редактора (рис. 27).

  1. Редактор полей таблицы

При выделении в редакторе какого-либо поля его свойства отображаются в Инспекторе объектов, причем точный набор свойств определяется типом данных поля. К числу наиболее важных свойств относятся:

  • Alignment – определяет выравнивание отображаемого текста внутри колонки таблицы;

  • DisplayLabel – определяет отображаемый заголовок столбца;

  • DisplayWidth – определяет ширину колонки в символах;

  • ReadOnly – определяет, является ли поле редактируемым или только для чтения;

  • Visible – определяет видимость поля.

Добавим на форму еще один компонент, управляющий работой с таблицей – навигатор DBNavigator. Компонент имеет ряд кнопок, служащих для управления данными (табл. 3).

Сделать некоторые кнопки невидимыми можно с помощью свойства VisibleButtons.

Кнопка

Команда

переход к первой записи

переход к предыдущей записи

переход к следующей записи

переход к последней записи

добавление новой записи перед текущей

удаление текущей записи

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

пересылка отредактированной информации в БД

отмена результатов редактирования или добавления новой записи

очистить буфер, связанный с набором данных

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

Готовая форма с отредактированной таблицей и навигатором изображена на рис. 28.

  1. Пример таблицы с измененными свойствами

Чтобы не занимать БД в процессе проектирования приложения, можно присвоить свойству Active компонента Table1 значение false и устанавливать соединение с БД в момент запуска приложения, а при закрытии формы разрывать его:

// - - - - Object Pascal - - - -

procedure TForm1.FormCreate(Sender: TObject);

begin

Table1.Open;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Table1.Close;

end;

// - - - - - - - C++ - - - - - - -

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Table1->Open();

}

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)

{

Table1->Close();

}

В примерах показано использование методов Open и Close, назначение которых аналогично присвоению свойству Active значений true и false.

Компонент Table позволяет не только отображать, редактировать и упорядочивать данные, но и отфильтровывать записи по определенным критериям. Для задания фильтра используются свойства Filter, Filtered и FilterOptions.

Свойство Filtered включает или выключает использование фильтра, а сами фильтр записывается в свойство Filter в виде ограничений на значения полей. Например, можно задать в свойстве Filter значение

Surname = 'Павлов'

и в таблице отобразятся только записи, поле Surname которых равно указанному значению.

При записи условий можно использовать операции отношения (=, >, <, >=, <=, <>), а также логические операции and, or и not. Кроме того, в условиях сравнения строк можно использовать символ *, который обозначает, что на его месте могут находиться любые символы в любом количестве.

Например, при задании фильтра

Surname = 'C*'

в таблице отобразятся все записи, в которых фамилия начинается с буквы C.

Свойства фильтрации могут задаваться не только при проектировании приложения, но и во время выполнения программы. Например, пусть в таблице отображаются только записи, фамилии в которых соответствуют значению в поле Edit:

// - - - - Object Pascal - - - -

Table1.Filtered := false;

Table1.Filter := 'Surname = ''' + Edit.Text + '''';

Table1.Filtered := true;

// - - - - - - - C++ - - - - - - -

Table1->Filtered = false;

Table1->Filter = "Surname = '" + Edit1->Text + "'";

Table1->Filtered = true;

Для программного перемещения по записям таблицы можно использовать следующие методы Table:

  • First – перемещение к первой записи;

  • Last – перемещение к последней записи;

  • Next – перемещение к следующей записи;

  • Prior – перемещение к предыдущей записи.

Как и в случае файлов, компонент Table имеет функцию Eof, возвращающую true, если достигнут конец таблицы и false в противном случае.

Для того чтобы узнать значения какого-либо поля для текущей записи, можно использовать свойство FieldByName, но при этом необходимо обеспечить преобразование типов с помощью свойств AsString, AsInteger, AsFloat и др.

Например, перенесем все значения из поля Surname в расположенный на форме компонент Memo1:

// - - - - Object Pascal - - - -

Table1.First;

while not Table1.Eof do

begin

Memo1.Lines.Add(

Table1.FieldByName('Surname').AsString);

Table1.Next;

end;

// - - - - - - - C++ - - - - - - -

Table1->First();

while (!Table1->Eof)

{

Memo1->Lines->Add(

Table1->FieldByName("Surname")->AsString);

Table1->Next();

}

  1. Лабораторное задание

Написать программу для работы с БД, реализующую следующие функции:

  • добавление, изменение, удаление записей;

  • фильтрация по всем полям;

  • проверка вводимых значений;

  • сохранение всех полей БД в текстовый файл.

  1. Указания по оформлению отчета

Отчет должен содержать:

  • наименование и цель работы;

  • краткие теоретические сведения;

  • задание на лабораторную работу;

  • результаты выполнения лабораторной работы.

  1. контрольные вопросы

  1. На какие группы можно разделить компоненты Delphi, предназначенные для работы с БД?

  2. Как связать визуальный компонент с таблицей БД?

  3. С помощью каких свойств таблицы можно осуществить фильтрацию данных?

  4. Какие методы компонента Table позволяют перемещаться по записям таблицы?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]