Базы Данных с нуля
Визуальные компоненты работы с данными

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

Одна часть компонентов предназначена для отображения данных текущей записи набора данных или всего набора данных, например, TDBText и TDBGrid. А другая часть компонентов предназначена для навигации по набору данных и редактированию текущей записи, например, TDBNavigator, TDBEdit, TDBMemo, TDBRadioGroup и TDBListBox.

Основными свойствами визуальных компонентов являются DataSource - для указания источника данных, с которым компонент "будет работать" и свойство DataField - для указания конкретного поля, с которым компонент будет связан.

procedure TForm1.FormCreate(Sender: TObject);
begin
 ...
 // Задаем источник данных
 DBText1.DataSource:=DataSource1;
 // Задаем поле
 DBText1.DataField:='Code';
 ...
end;

Одним из самых простых визуальных компонентов является компонент TDBText. Данный компонент предназначен только для отображения значения поля текущей записи набора данных. Этот компонент очень похож на компонент TLabel.

Компоненты TDBEdit и TDBMemo предназначены для отображения значения поля текущей записи набора данных, но с возможностью редактирования этого значения. То есть, значение поля, отображаемое в одном из этих компонентов может быть отредактировано, изменено или добавлено в набор данных, что в некотором роде очень упрощает работу. Как только компонент потеряет фокус, содержащееся в нем значение поля сразу же будет отображено в наборе данных.

Для отображения и редактирования значения логического поля служит компонент TDBCheckBox. Данный компонент похож на аналогичный компонент TCheckBox и представляет собой "флажок" с текстовым заголовком. Если в нем располагается "галочка", то компонент считается включенным, иначе выключенным. Если данный компонент связать с некоторым полем логического или строкового типа, то в зависимости от состояния компонента в поле будет занесено значение True или False. Кроме того, переключатель TDBCheckBox можно применять для отображения обычных текстовых значений. Для этого служат два свойства ValueChecked - для отображения значения во включенном состоянии, и свойство ValueUnChecked - для отображения значения в выключенном состоянии (см. Пример):

procedure TForm1.FormCreate(Sender: TObject);
begin
 // Задаем источник данных
 DBCheckBox1.DataSource:=DataSource1;
 // Задаем поле Базы Данных
 DBCheckBox1.DataField:='Log';
 // Устанавливаем значение во включенном состоянии
 DBCheckBox1.ValueChecked:='Да;Д';
 // Устанавливаем значение в выключенном состоянии
 DBCheckBox1.ValueUnchecked:='Нет;Н';
end;

Иногда требуется организовать выбор значения поля Базы Данных из фиксированного числа значений. Для этого удобно использовать компоненты TDBRadioGroup, TDBComboBox и TDBListBox.

Управлением числом и названием отдельных переключателей компонента TDBRadioGroup служит свойство Items, которое содержит названия заголовков переключателей. Для указания значений выбранных переключателей служит свойство Values. Если происходит переход к некоторой записи набора данных и значение поля, с которым связан компонент, равно значению в списке свойства Values, то соответствующий переключатель будет переведен во включенное состояние. При помощи данного компонента также можно задавать значения поля текущей записи набора данных. Но, изменение значения поля произойдет только при потере фокуса или выборе другого переключателя.

Для задания некоторого фиксированного значения также служат компоненты TDBComboBox и TDBListBox. При выборе некоторого значения одного из этих компонентов это значение сразу же будет занесено в поле Базы Данных. Но, не нужно забывать, что новое значение также будет отображено в наборе данных, только при потере фокуса.

Самым главным компонентом для отображения данных в табличном виде является TDBGrid. Внешне компонент похож на аналогичные компоненты TStringGrid и TDrawGrid, но в функциональном плане они различаются. В TStringGrid можно управлять числом строк и столбцов, а в TDBGrid можно управлять только числом столбцов. Сетка TDBGrid, по умолчанию, отображает структуру Базы Данных: строка сетки - запись БД, столбец - поле БД. С помощью сетки пользователь может визуально управлять набором данных. Для навигации по сетке предусмотрены полосы прокрутки и клавиши управления курсором.

Одним из главных свойств сетки является свойство Columns, которое определяют отдельные столбцы сетки. При помощи данного свойства можно указать заголовок столбца, его ширину, выравнивание и т.д. Рассмотрим пример с оформлением сетки для ранее созданной нами таблицы Базы Данных:

procedure TForm1.FormCreate(Sender: TObject);
begin
 ...
 // Задаем заголовки столбцам сетки
 DBGrid1.Columns[0].Title.Caption:='Номер';
 DBGrid1.Columns[1].Title.Caption:='Имя';
 DBGrid1.Columns[2].Title.Caption:='Фамилия';
 DBGrid1.Columns[3].Title.Caption:='Дата рождения';
 DBGrid1.Columns[4].Title.Caption:='Город';

 // Выравниваем заголовки по центру
 DBGrid1.Columns[0].Title.Alignment:=taCenter;
 DBGrid1.Columns[1].Title.Alignment:=taCenter;
 DBGrid1.Columns[2].Title.Alignment:=taCenter;
 DBGrid1.Columns[3].Title.Alignment:=taCenter;
 DBGrid1.Columns[4].Title.Alignment:=taCenter;

 // Выравниваем текст в столбцах сетки
 DBGrid1.Columns[0].Alignment:=taCenter;
 DBGrid1.Columns[1].Alignment:=taLeftJustify;
 DBGrid1.Columns[2].Alignment:=taLeftJustify;
 DBGrid1.Columns[3].Alignment:=taCenter;
 DBGrid1.Columns[4].Alignment:=taLeftJustify;
 ...
end;

При помощи свойства SelectIndex можно задать или узнать номер текущего столбца. А при помощи свойства FieldCount можно узнать число видимых столбцов. С помощью свойства Fields можно получить доступ к отдельным полям, причем отсчет индекса идет с нуля. Рассмотрим пример, в обработчик события перехода в некоторый столбец сетки отобразим номер текущего столбца и число видимых столбцов сетки:

procedure TForm1.DBGrid1ColEnter(Sender: TObject);
begin
 // Отображаем номер текущего столбца
 Label1.Caption:=IntToStr(DBGrid1.SelectedIndex);
 // Отображаем число видимых столбцов
 Label2.Caption:=IntToStr(DBGrid1.FieldCount);
end;

При помощи свойства Color можно задать цвет сетки, а с помощью свойства FixedColor, можно задать цвет фиксированных заголовком сетки. Чтобы задать шрифт для заголовков сетки нужно воспользоваться свойством TitleFont.

procedure TForm1.Button1Click(Sender: TObject);
begin
 ...
 // Задаем цвет сетки в Lime
 DBGrid1.Color:=clLime;
 // Задаем цвет фиксировонных заголовков в Red
 DBGrid1.FixedColor:=clRed;
 // Задаем шрифт для заголовков сетки
 If FontDialog1.Execute Then DBGrid1.TitleFont:=FontDialog1.Font;
 ...
end;

Доступ к параметрам сетки можно получить при помои свойства Options. Это свойство представляет собой массив из некоторого числа подсвойств:

  • dgEditing - Пользователю разрешено редактирование данных в ячейках сетки.
  • dgAlwaysShowEditor - Сетка всегда находиться в режиме редактирования.
  • dgTitles - Отображение/скрытие заголовков сетки.
  • dgIndicator - Рядом отображается индикатор текущей записи.
  • dgColumnResize - Возможность изменения ширины столбцов сетки.
  • dgColLines - Вывод разделительных линий между столбцами.
  • dgRowLines - Вывод разделительных линий между строками.
  • dgTabs - Возможность использовать клавишу Tab и Shift+Tab для навигации.
  • dgRowSelect - Возможность выделения целой строки.
  • dgAlwaysShowSelection - Сетка при потере фокуса будет отражать текущую ячейку.
  • dgConfirmDelete - Выведение запроса при удалении записи.
  • dgCancelOnExit - При потере фокуса добавленные строки не сохраняются.
  • dgMultiSelect - Возможность выделения сразу нескольких строк сетки.

Как я уже отметил сетка по умолчанию отображает всю структуру Базы Данных, но, тем не менее, можно самим указать те поля БД, которые будут отражены на экране. Для этого нужно использовать так называемые "статические поля". Для создания статических полей нужно использовать Редактор столбцов, который вызывается при помощи двойного щелчка мыши по сетке во время проектирования формы, либо при выборе пункта контекстного меню Columns Editor. При этом на экране появиться специальное окно редактора, в котором можно будет создать необходимое число статических столбцов, удалить эти столбцы или поменять порядок их следования.

Для создания нового статического поля необходимо нажать на кнопку "Add New", находящуюся на Панели инструментов, либо нажать клавишу Insert. Для удаления одного или нескольких выделенных статических полей нужно нажать на кнопку "Delete Selected", находящуюся на Панели инструментов, либо нажать клавишу Delete. Для того чтобы автоматически добавить все поля БД нужно нажать на кнопку "Add All Fields", которая также находиться на Панели инструментов.

Чтобы связать, только что созданные статические поля с полями БД, нужно воспользоваться свойством FieldName. В Инспекторе объектов это свойство представляет собой выпадающий список, в котором содержаться все поля БД. При запуске программы сетка будет отображать ту последовательность полей, которая была задана во время проектирования.

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

procedure TForm1.FormCreate(Sender: TObject);
begin
 ...
 DBGrid1.Columns[1].PickList.Add('Директор');
 DBGrid1.Columns[1].PickList.Add('Бухгалтер');
 DBGrid1.Columns[1].PickList.Add('Менеджер');
 ...
end;

Ну и последним визуальным компонентом, о котором я хочу рассказать, является компонент TDBNavigator. Данный компонент представляет собой последовательность кнопок, которые обеспечивают пользователю выполнение стандартных операции с набором данных. Основными кнопками являются:

  • nbFirst - Переход на первую запись.
  • nbPrior - Переход на предыдущую запись.
  • nbNext - Переход на следующую запись.
  • nbLast - Переход на последнюю запись.
  • nbInsert - Вставка записи в текущую позицию курсора.
  • nbDelete - Удаление текущей записи.
  • nbEdit - Переход в режим редактирования записи.
  • nbPost - Сохранение сделанных изменений.
  • nbCancel - Отмена сделанных изменений.
  • nbRefresh - Обновление набора данных

Управлять составом видимых кнопок нужно при помощи свойства VisibleButton. По умолчанию видны все кнопки. Для того чтобы эмулировать нажатие кнопки необходимо воспользоваться методом BtnClick.

procedure TForm1.Button1Click(Sender: TObject);
begin
 DBNavigator1.BtnClick(nbInsert);
end;

При нажатии на кнопку удаления записи выдается специальный запрос на удаление. Для того чтобы запретить появление этого запроса нужно воспользоваться свойством ConfirmDelete логического типа. Если установить данное свойство в False запись будет удалена без вывода запроса. Данное свойство работает не зависимо от подсвойства dgConfirmDelete свойства сетки DBGrid.

Свойство Flat управляет внешним видом навигатора. Если это свойство установить в False (по умолчанию), то навигатор будет отображаться в объемном виде, иначе в плоском виде. Данное свойство аналогично одноименному свойству кнопки SpeedButton.

Для вывода всплывающей полсказки нужно воспользоваться свойством Hint. А для вывода всплывающих подсказок для каждой кнопки нужно воспользоваться свойством Hints. При выборе данного свойства на экране появиться специальное окно со списком подсказок по умолчанию. Первоначально подсказки на английском языке, но их можно заменить на русский. Для того чтобы разрешить появление подсказок, нужно установить в True свойство ShowHint логического типа.

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

...
procedure TForm1.Button1Click(Sender: TObject);
begin
 Table.First;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 Table.Next;
end;
...

Вернуться в оглавление
Вернуться на главную страницу
Hosted by uCoz