Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛБ(ПРИС)_Файл-сервер_2016.doc
Скачиваний:
5
Добавлен:
17.06.2023
Размер:
5.49 Mб
Скачать
      1. Размеры и положение

Для корректного отображения подчинённой формы желательно, чтобы её размеры должны быть несколько меньше, чем у главной формы. Кроме того, для подчинённой формы вполне достаточно одной системной кнопки закрытия окна, для чего свойство формы Border Style в значение bsDialog. Выводиться она должна по центру главной формы. Для этого следует установить свойство Position в значение poMainFormCenter. Таким образом, приложение должно иметь следующий вид, представленный на рисунке 11.

Рисунок 11 – Размеры подчинённой формы

  1. Работа приложения с бд

    1. Доступ к таблицам бд. Компоненты доступа к данным. Приложение

AdoDataSet (Набор данных) или adoQuery (Запрос)

Схема взаимодействия программы и элементов управления с БД

Связываться с БД будем по технологии ADO. Компоненты, которые мы будем использовать, расположены на вкладках ADO, Data Access, Data Controls палитры компонентов (см. рисунок).

Основные компоненты

Желательно все не визуальные компоненты вынести в модуль данных, уже из него вызывать их. Поэтому создаём новый модуль данных (FileNewData Module), появится форма с белым фоном, и назовём его DM (свойство Name).

Примечание: Не забудьте в тех модулях, где будет использоваться модуль данных в разделе implementation указать Uses и имя файла модуля данных (именно то имя, которое принадлежит файлу модуля данных имя.pas).

Поместим в него компоненты ADOConnection , 4 компонента ADOQuery с вкладки ADO, и 4 компонента DataSource с вкладки Data Access. Переименуем каждый компонент ADOQuery в SotrQuery, HobbyQuery, DolgnostQuery, Hobby_SotrADOQuery и каждый компонент DataSource в SotrDataSource, HobbyDataSource, DolgnostDataSource, Hobby_SotrDataSource соответственно. В результате должно получиться примерно, как показано на рисунке 12.

Рисунок 12 – Модуль данных

В свойстве DataSet компонента SotrDataSource из выпадающего списка выберем SotrQuery, в свойстве Connection компонента SotrQuery из выпадающего списка выберем ADOConnection1.

Примечание.

Обратите внимание, что свойство DataSet компонента SotrDataSource должно быть заполнено из выпадающего списка. И туда мы разместим либо набор данных запрос (в нашем случае SotrQuery), либо набор данных DataSet.(см.рисунок).

В свою очередь свойство DataSource компонента SotrQuery должно остаться незаполненным (см.рисунок).

В свойстве LoginPrompt компонента ADOConnection1 установить значение False (см. рисунок). Аналогично с HobbyDataSource и HobbyQuery, DolgnostDataSource, Hobby_SotrDataSource и DolgnostQuery.

ДЛЯ СВЯЗИ С БАЗОЙ ДАННЫХ

Для связи с БД необходимо указать строку подключения в строковом свойстве ConnectionString в компоненте ADOConnection1. Её можно создать двумя способами:

1)либо составив с помощью стандартного конструктора (этот способ применяется пока ещё идёт отладка программы). Последовательность шагов представлена ниже.

1 шаг: нажать на кнопку с тремя точками в строке подключения.

2 шаг: построить..

3 шаг: выбор драйвера БД

4 шаг: указать путь БД и проверить подключение

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

В событии BeforeConnect компонента ADOConnection1 следует вставить следующий код:

procedure TDM.ADOConnection1BeforeConnect(Sender: TObject);

var

DBPath:widestring; // путь к БД

begin

DBPath:=’{здесь необходимо указать путь к БД оканчивающийся «\», например C:\DB\}’;

//составляем ConnectionString

ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+DBPath+'SOTRUDNIKI.mdb;Persist Security Info=False';

end;

Теперь поместим на форму S_sotrudnikiForm визуальный компонент отображения DBGrid с вкладки Data Controls. В его свойстве DataSource из выпадающего списка выбираем DM.SotrDataSource, предварительно указав DataModule в разделе Uses. В свойстве Options установить значение параметра dgEditing в False, для невозможности редактирования данных пользователем.

После раздела Public объявим константу, соответствующую запросу выбора всех записей из таблицы SOTR, т.к. обращение к этому запросу будет происходить неоднократно в процессе работы:

public

{ Public declarations }

end;

const

SOTR_SQL='SELECT * FROM SOTR ';

Введение данной константы необходимо ТОЛЬКО для уменьшения программного кода и, в общем случае, не является обязательным.

В событии onCreate формы S_sotrudnikiForm наберём следующий код:

procedure TS_sotrudnikiForm.FormCreate(Sender: TObject);

var i:integer;

begin

//подключение к БД

DM.ADOConnection1.Connected:=true;

//очистка текста запроса

DM.SotrQuery.SQL.Clear;

DM.HobbyQuery.SQL.Clear;

DM.DolgnostQuery.SQL.Clear;

//формирование запроса

DM.SotrQuery.SQL.Add(SOTR_SQL+';');

DM.HobbyQuery.SQL.Add('SELECT * FROM HOBBY;');

DM.DolgnostQuery.SQL.Add('SELECT * FROM DOLGNOST;');

//исполнение запроса и вывод результата

DM.SotrQuery.Open;

DM.HobbyQuery.Open;

DM.DolgnostQuery.Open;

! ! ! Таким образом, и в дальнейшем, при работе с тем или иным запросом, сначала его необходимо очистить (SQL.Clear), затем – добавить сам текст запроса (SQL.Add), а затем – открыть (Open) или просто исполнить без открытия (ExecSQL).

Кроме того, при работе со связанными таблицами в той или иной форме, необходимо описать ВСЕ запросы, соответствующие связанным таблицам в событии FormCreate.

При выборе пункта главного меню «Сотрудники» отобразится форма представленная на рисунке 13.

Рисунок 13 – Справочник - сотрудники

Связанные поля из набора данных выводятся не значением этого поля, а кодом его связи. Этого можно избежать либо путем создания запроса, выводящего значения связных полей и обращением DBGridа к этому запросу, либо путем вывода связанных полей не в DBGrid, а в другие визуальные компоненты (на этом способе мы и остановимся).

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

        1. программно (реализован в примере для справочников «Сотрудники» и «Должности») – заполнение заголовков таблицы и обеспечение невидимости связанных и рабочих столбцов прописывается в событии OnFormCreate формы Сотрудники;

// Заполняем заголовки DBGrid1

// Эти заголовки будут отображаться вместо имен полей в таблице БД

DBGrid1.Columns.Items[0].Title.Caption:='Код';

DBGrid1.Columns.Items[1].Title.Caption:='Фамилия';

DBGrid1.Columns.Items[2].Title.Caption:='Имя';

DBGrid1.Columns.Items[3].Title.Caption:='Отчество';

DBGrid1.Columns.Items[4].Title.Caption:='Дата рождения';

// делаем невидимыми последние 3 столбца: Код Должности, Признак редактирования, и Формат фото

for i:=1 to 3 do DBGrid1.Columns.Items[DBGrid1.Columns.Count-i].Visible:=false;

        1. с помощью настроек компонента (редактор столбцов) – в программном коде ничего не прописывается. В примере этот способ реализован для справочника «Хобби». Для этого необходимо вызвать редактор столбцов либо путем двойным нажатием левой клавиши мыши, либо нажатием правой и выбором из меню Columns Editor. В появившемся диалоговом окне устанавливаются свойства столбцов. Для добавления столбца необходимо нажать кнопку Add. Тогда будет создан столбец, не связанный ни с каким набором данных. Для его связи с тем или иным полем набора данных необходимо обратится к свойству Field Name и внести имя поля, которое соответствует данному столбцу (например, H_ID). Настройка заголовка столбца происходит в свойстве Title (рисунок 14) – здесь в свойстве Captoin мы задаём имя столбца, которое будет видно пользователю (например, для поля H_ID – «код»). Для того, чтобы сделать столбец невидимым, необходимо свойству visible присвоить значение false (например, для поля EDIT и для всех полей из связанных таблиц). Таким образом, столбцы можно располагать в любом порядке и ненужные не выводить (рисунок 15).

Рисунок 14 – Настройка свойств заголовка столбца

Рисунок 15 – Настройка столбцов таблицы

В таблице 1 представлены назначения подсвойств свойства Title.

Таблица 1 – Назначения подсвойств свойства Title

Aligment

Выравнивание заголовка. По умолчанию – влево

Caption

Определяет текст заголовка

Color

Определяет цвет фона заголовка

Font

Определяет тип, размер и цвет шрифта

Вывод связанных полей рассмотрим в пункте 4.3.

При каждом закрытии формы (событие onClose) необходимо закрывать соединение с базой:

DM.SotrQuery.Close; (было реализовано в примере для каждой формы)

или

DM.ADOConnection1.Close;

или

DM.ADOConnection1.Connected:=false;

Создадим процедуру Refresh, которая будет обновлять записи при ее вызове (реализовано в основном для многопользовательского режима).

Объявим данную процедуру в разделе private:

private

{ Private declarations }

procedure Refresh;

Далее опишем эту процедуру сразу после раздела uses:

uses DataModule;

{$R *.dfm}

procedure TS_sotrudnikiForm.Refresh;

var i:integer;

begin

DM.SotrQuery.Close;

DM.SotrQuery.Open;

// Заполняем заголовки DBGrid1

// Эти заголовки будут отображаться вместо имен полей в таблице БД

DBGrid1.Columns.Items[0].Title.Caption:='Код';

DBGrid1.Columns.Items[1].Title.Caption:='Фамилия';

DBGrid1.Columns.Items[2].Title.Caption:='Имя';

DBGrid1.Columns.Items[3].Title.Caption:='Отчество';

DBGrid1.Columns.Items[4].Title.Caption:='Дата рождения';

for i:=1 to 2 do // делаем невидимыми последние 2 столбца

DBGrid1.Columns.Items[DBGrid1.Columns.Count-i].Visible:=false;

end;

Если настройка столбцов DBGrid осуществлялась программно (в примере реализованно для справочников «Сотрудники» и «Должности»), то при закрытии и открытии запроса вновь будут показаны все поля запроса, в чем нет надобности, т.к. поля код должности, признак редактирования и расширение фото должны быть невидимыми пользователю, поэтому их снова скрываем программно, точно так же, как и в событии OnCreate объекта S_SotrudnikiForm.

Если настройка столбцов DBGrid осуществлялась с помощью настроек самого компонента, то нет необходимости делать невидимыми последние столбцы, т.к. этот компонент их выводить не будет (см. пример справочник «Хобби»).