Установка связей между компонентами и базой данных, навигация по таблице
В качестве набора данных используем компонент Table. Источником данных будет компонент DataSource. Это невизуальные компоненты.
В качестве компонента визуализации: DBGrid, в котором будут отображаться данные.
Установим цепочку связей между этими компонентами в соответствии со схемой взаимодействия компонентов с базой данных:
Связь между визуальным компонентом и источником данных: свойству DataSourceу компонента DBGrid1 в инспекторе объектов присвоить значение из выпадающего списка DataSource1.
Связь между источником данных и набором данных: свойству DataSet у компонента DataSource1 в инспекторе объектов присвоить значение из выпадающего списка Table1.
Связь между набором данных и необходимой таблицей базы данных: для этого предназначены два свойства компонента Table – DatabaseName и TableName. В выпадающем списке свойства DatabaseName показываются все доступные BDE псевдонимы баз данных. Выбрать ранее созданный псевдоним dbP(рис.). После этого в выпадающем списке свойства TableName появятся таблицы, доступные в данной базе данных. Выберите таблицу Pers.
Можно связаться с таблицей в процессе проектирования, если установить свойство таблицы Table1 Active в true.
Запустив приложение можно просматривать данные, редактировать их (отредактированные данные будут помещаться в базу данных в момент перехода от редактируемой записи к любой другой). Поле Num невозможно изменить, поскольку оно автоматически изменяется и доступно только для чтения. Нельзя задать произвольное имя подразделения Dep, так как имеется таблица Dep, задана целостность на уровне ссылок и допустимы только те значения Dep, которые имеются в головной таблице Dep.
Заранее выставлять для таблиц Active = true допустимо только в процессе настройки и отладки приложения, работающего с локальными базами данных.
В законченном приложении во всех таблицах сначала должно быть установлено Active = false, затем при событии формы onCreate эти свойства могут быть установлены в true, а при событии формы onDestroy эти свойства опять должны быть установлены в false. Это исключит неоправданное поддержание связи с базой данных, которое занимает ресурсы, а при работе в сети мешает доступу к базе данных других пользователей.
Некоторые свойства компонента DBGrid: ReadOnly – запрещение редактирования данных, тот же эффект дает для свойства Options – dgEditing=false.
У компонента Table есть булево свойство Exclusive – определяет доступ к используемой таблице при одновременном обращении к ней нескольких приложений (например, при работе в сети или в многозадачном режиме). Exclusive=true – таблица будет закрыта для других приложений, это свойство можно менять только при Active=false.
Рассмотрим еще один компонент, управляющий работой с таблицей – навигатор DBNavigator (со страницы Data Control). DBNavigator имеет кнопки для управления данными:
nbFirst - перемещение к первой записи
nbPrior - перемещение к предыдущей записи
nbNext - перемещение к следующей записи
nbLast - перемещение к последней записи
nbInsert - вставить новую запись перед текущей
nbDelete - удалить текущую запись
nbEdit - редактировать текущую запись
nbPost - послать отредактированную информацию в базу данных
nbCancel - отменить результаты редактирования или добавления новой записи
bnRefresh - очистить буфер, связанный с набором данных
DBNavigator имеет свойство VisibleButtons, пользуясь которым можно убрать любые ненужные в данном приложении кнопки. Если нужно запретить пользователю вводить новые записи – nbInsert=false. Если нужно запретить редактирование – оставить только кнопки – nbFirst, nbPrior, nbNext, nbLast.
DBNavigator связывается с источником данных также через свойство DataSource. При работе с DBNavigator внесенные изменения зафиксируются в таблице после нажатия кнопки nbPost.
Свойства полей
У компонента Table есть свойства IndexName и IndexFieldName.
Свойство IndexNameсодержит выпадающий список индексов, созданных для таблицы. Если выбрать индекс FIO, записи будут представленными упорядоченными по алфавиту. Индекс depfio упорядочивает по подразделениям, а внутри подразделения по алфавиту. В свойстве IndexFieldName просто перечислены предусмотренные в индексах комбинации полей, если вы забыли. что обозначают имена индексов.
Для редактирования отдельных полей имеется Редактор Полей, вызывается двойным щелчком на компоненте Table.
Каждое поле – это объект, свойства которого отображаются в Инспекторе объектов. Класс поля зависит от типа поле: TStringField, TSmallIntField, TBooleanField и т.п. Эти классы являются производными от класса TField – базового класса полей.
Некоторые основные свойства полей:
Alignment –выравнивание отображаемого текста внутри колонки: влево, вправо, по центру
DisplayLabel –заголовок столбца данного поля
DisplayWidth –ширина колонки – число символов
EditMask, EditFormat –форматы отображения данных
DisplayValue –для логических полей: какие значения должны отображаться, если поле имеет значение true или false.
ReadOnly –при значании true запрещает вводить данные в поле
Visible –при значении false делает поле невидимым
Вид приложения после установки всех необходимых свойств: