Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
База данных / Разработка клиентского приложения для работа с базой данных в Turbo Delphi.doc
Скачиваний:
91
Добавлен:
18.03.2015
Размер:
911.87 Кб
Скачать

Табличное представление данных Компонент tdbGrid

Этот компонент инкапсулирует двумерную таблицу, в которой строки пред­ставляют собой записи, а столбцы — поля набора данных.

Разместим в главном модуле проекта MainFormкомпонентTDGrid. Данный компонент пока является пустым, т.е. не подключен к источнику данныхDataSource.

Будем выводить в данную таблицу сводную ведомость по сданным экзаменам. Укажем в свойстве DataSourceDataModule1.DataSourceExamVed(т.е. подключили таблицуExamVed).

Теперь активируем связь переведя свойство ActiveвTrue. Таблица заполниться данными.

Теперь сделаем еще одно действие. Щелкните по таблице правой кнопкой. Перед вами откроется всплывающее окно. Нажмите AddAllFields. В дальнейшем вы сможете скрыть не нжные для отображения поля указав для них Visible –Fale.

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

0сновныесвойства,включающиемеханизм синхронногопросмотра

property KeyField: string; Ключевое поле таблицы синхронного просмотра

property KeyValue: Variant;Текущее значение ключевого поля

property ListField: string Поле или список полей синхронного просмотра в таблице синхронного просмотра

property listSource: TDataSource; Указывает на компонент TDataSource, связанный с таблицей синхронного просмотра

Для создания полей синхронного просмотра выберем компонент ADODataSetExamVed, два раза щелкнем по нему. ВыберемNew field…

Откроется окно

Создадим поле синхронного просмотра для поля Prepod. Для этого укажем следующие свойства:

Name– имя поля синхронного просмотра.

Type– тип поля

Size– размер поля

Укажем, что поле будет синхронным Lookup.

Key Fields– ключевое поле в текущей таблице (т.е. вExamVed)

DataSet– набор из которого будем подставлять (т.еADODataSetPrepod)

Lookup Keys– тот ключ с которым будем сравнивать поле из текущей таблице (ExamVed) с синхронной таблицей (Prepod)

Result Field– поле которое будем подставлять из синхронной таблицы для отображения, вместо текущего поля (будем отображать фамилию).

Аналогично реализуем синхронный просмотр для полей Студент (Student), Предмет (Subject).

Вновь активируем ADODataSet... для каждого компонента. И прейдем в главный модуль. Вновь добавим все поля в таблицу. И скроем те поля которые не нужно отображать (ключевые), вместо них оставим поля синхронного просмотра.

Вернемся в компонент ADODataSetExamVedи для поляExameDataукажем шаблон ввода данных (т.к. вводится дата), для этого воспользуемся свойствомEditMask

Теперь готовая таблица ExamVedбудет выглядеть следующим образом.

Можно выбирать необходимые поля из всплывающего списка, а дату заполнять по предложенному шаблону.

Данные сохраняются только после перехода на следующее поле.

Мы не предусмотрели связанной таблицы для оценок. Реализуем возможность выбора из списка.

Для этого занесем в соответствующую колонку (свойство Colums) значения оценок. Т.к. колонка оценок 4-ая, а нумирация колонок начинается с 0, то можно записать следующий код отрабатываемый один раз при создании формы.

procedure TMainForm.FormShow(Sender: TObject);

begin

DBGrid2.Columns.Items[3].PickList.Add('0');

DBGrid2.Columns.Items[3].PickList.Add('1');

DBGrid2.Columns.Items[3].PickList.Add('2');

DBGrid2.Columns.Items[3].PickList.Add('3');

DBGrid2.Columns.Items[3].PickList.Add('4');

DBGrid2.Columns.Items[3].PickList.Add('5');

end;

Для перемещения по таблице и ее редактирования можно использовать компонент DBNavigator

Он связывается с компонентом DataSetи позволяет управлять данными.

Доступны следующие кнопки:

В начало таблицы,

на шаг назад,

на шаг вперед,

в конец таблицы,

добавить поле,

удалить поле,

режим редактирования,

подтвердить изменения,

отменить изменения,

обновить данные.

Кнопки, которые необходимо отобразить указывается в свойстве VisibleButtons.

Компонент связывается с наборам данных с помощью свойства DataSource

Реализуем доступ к остальным таблицам приложения.

Разместим Объект MainMenuи укажем следующие пункты.

Таблица студенты.

Пусть форма доступа к таблице студенты имеет следующий вид

Имеется компонент DBGrid, связанный с DataSourceStudents. Для предотращения редактирования данных напрямую через таблицу у нее в свойстве ReadOnly укажем True. Редактирование будем осуществлять с помощью следующих компонентов.

DBEdit – связано с полем фамилии студента (FName). Для этого указаны следующие свойства:

DataSource: DataModule1.DataSourceStudents

DataField: Fname

DBEditсвязано с полем имени студента (LName). Для этого указаны следующие свойства:

DataSource: DataModule1.DataSourceStudents

DataField: Lname

DBEditсвязано с полем возраста студента (Age). Для этого указаны следующие свойства:

DataSource: DataModule1.DataSourceStudents

DataField: AGE

DBLookupComboBox – выпадающий список с синхронным просмотром. В группе таблицы Студенты указана не номер группы, а ссылка на него. Т.е. необходимо отобразить все возможные группы для данного поля. Для этого укажем следующие поля

DataSource: DataModule1.DataSourceStudentsто откуда берем значения полей.

DataField: GROUPS_IDданные поля (внешний ключ)

ListSOURCE:DataModule1.DataSourceGroups–источник полей для подстановки (номера всех групп)

KeyField:GROUPS_ID– первичные ключи синхронной таблицы. По которым идет сравнение с внешним ключем

ListField:GROUPNAME–то что будет видно в списке (т.е. номера групп)

Компонент DBNavigator связан с ADODataSourceStudents.

!!!! не забывайте подключать модуль данных в каждом из модулей форм!!!!

Добавим компонент Edit с помощью которого осуществим возможность фильтрации студентов по фамилии.

Наиболее эффективным способом отбора записей в набор данных (особен­но из больших таблиц) является создание и выполнение соответствующего запроса SQL. Но что делать, если набор данных функционирует на базе таб­личного компонента? В этом случае на помощь приходит встроенный в на­бор данных механизм фильтрации данных.

Применение фильтра основано всего на двух основных свойствах и одном вспомогательном. Текст фильтра должен содержаться в свойстве Filter, а свойство Filtered включает и выключает фильтр.

При создании текста фильтра для свойства Filter используются имена по­лей соответствующей таблицы БД, а для задания отношений применяются все операторы сравнения (>, >=, <, <= =, о) и логические операторы (AND. OR. NOT). Напишем обработчик события onChange компонента Edit:

procedure TFormStud.EdFindChange(Sender: TObject);

begin

//оператор присоединения

with DataMod.DataModule1.ADODataSetStudents do

//если поле пустое то фильтрацию отменяем

if EdFind.Text<>'' then begin

//отключаем фильтр

Filtered:=False;

//добавляем поисковую строку, в ней сравнивается вхождение введенной строки в фамилию FNAME

Filter:='FNAME LIKE '''+'%'+EdFind.Text+'%'+'''';

//включаем фильтр

Filtered:=True

end

else

Filtered:=False;

end;

Ниже показан пример работы

Для вызова данного модуля создадим обработчик нажатия на пункте меню

procedure TMainForm.N8Click(Sender: TObject);

begin

FormStud.ShowModal;

end;

Аналогично реализуем модуль для доступа к таблице Преподаватель.