Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ВУМИП 2012-07-06.doc
Скачиваний:
66
Добавлен:
13.05.2015
Размер:
9.35 Mб
Скачать

3.3. Создание модуля данных

Модуль данных содержит объекты, связанные с базой, и исполь­зует­ся для централизованного управления этими объектами. Его создание произ­во­дится командой File/New/Data Module(рис. 3.3.1). Имя создан­ного модуля данных лучше сохранить для наглядности под новым именем, на­при­мер:DataModulStroiki. Разместим компонентTableс панелиDataAc­­cessна стра­­ни­цеComponents(рис. 3.3.1) и выделим его. Зададим свой­ства:DataBaseName=Stroiki(псевдоним базы),TableName=Stroiki(имя табли­цы),Name=Stroiki(имя компонента приравняем имени таблицы для наг­ляд­ности),Active=True(чтобы можно было обращаться к таблице из прог­рам­мы). Аналогично сде­­лаем для двух остав­ши­х­ся таблиц. Да­лее раз­местим компо­нентData Source(ис­точ­­ник дан­­ных) и вы­делим его. За­да­дим свойства:Da­ta­­­Set=Stroiki(имя таб­­­­­­­­лицы) (п.3.4.2),Name=Sourcestroiki(имя ком­­­понента).

Рис. 3.3.1. Окно модуля данных

То же проделаем и cдругими таблицами. Получим модуль (рис.3.3.1). Источник данных служит посредником между таблицей базы и экранными формами, что позволяет переходить на другие СУБД, меняя только настройку компонента ‑ источника данных, а не программы. После открытия проекта нужно вызвать этот модуль командойView/Units/Unit2.

Поля в таблице можно использовать как динамические (dynamic) либо как постоянные (persistent).Динамические полядолжны быть в таблице, и их можно редактировать.Постоянные поля(виртуальные или псевдополя) могут отсутствовать в таблице, и их значения вычисляются. К имени постоян­ного поля автоматически добавляется имя компонентаTable. Для примера все поля таблицы строек сделаем постоянными и добавим псевдополеOs(Os=Ss‑Fs). Для этого щелкнем правой кнопкой мыши на таблицеStroikiв окне модуля данных и выберем командуField Editor (редактор полей), появится пустое окнoDataModule2.Stroiki. Из контекст­ного меню этого окна выберем командуAdd all fields(добавить все поля). КомандойNew Fieldвызовем окно для формирования вычисляемого (Calculated) псевдополяOsтипа Сurrency. Составим процедуру обработки событияOnCalcFields(п. 3.4.1) таблицыStroikiдля вычисления значения (свойствоValue) псевдополяOs:

Procedure TDataModule2.StroikiCalcFields(DataSet: TDataSet);

Begin StroikiOs.Value:=StroikiSs.Value‑StroikiFs.Value; End;

При ссылках на объекты модуля данных объект уточняется именем модуляDataModule2 (DataModule2.SourceStroiki).

Рекомендуетсядля всех полей задавать сло­вес­ные наимено­ва­ния полей в их свойствахDisplayLabel через редактор по­лей, которые вы­во­дятся в формах и компонентах вместо латинских имен полей.

Рекомендуетсямодуль базы данных создавать под содержа­тель­ным име­нем в пап­ке с базой, включать его в новый проект коман­дойProject/Add to pro­ject и подключать его к головному или друго­му модулю командойFile/Use Unit.

3.4. Компоненты доступа к данным (DataAccess)

3.4.1. Таблица (Table)

Компонент отвечает за связь с таблицами базы данных и за допол­ни­тель­ное описание свойств полей базы данных.

Основные свойства

DataBaseName, TableNameпсевдоним базы, имя таблицы в базе.

ReadOnly, TableType­таблица доступна только для чтения, тип таблицы.

Active, State‑ таблица открыта, состояние таблицы (открыта, редактируется).

Bof/Eof‑ указатель находится на первой/последней записи таблицы.

CanModify,Exists‑ разрешение на редактирование, наличие таблицы в базе.

DefaultIndex‑ при открытии таблица сортируется по ключу.

Exclusive‑ монопольный режим использования таблицы.

FieldCount,FieldList‑ число записей в таблице, массив названий полей.

Fields[i]‑ доступ кi‑му полю (отсчет с 0).

FieldValues[‘<имя поля>’]‑ доступ к значению поля под указанным именем.

Found, Modify‑ признак успешного поиска записи и изменения записи.

IndexDefsмассив определений ключей (элемент типаTIndexDef).

IndexNameимя текущего индекса, заданного при создании таблицы.

IndexFieldNamesимена полей через «;» текущего существующего индекса.

IndexFieldCount‑ число полей для текущего индекса.

KeyExclusive‑ границы диапазона записей, не входящих в этот диапазон.

KeyFieldCount‑ число полей ключа, участвующих в поиске записей.

MasterSource/MasterFieldимя источника/поля главной таблицы (п. 3.5).

RecNo‑ номер текущей записи.

RecordCount, RecordSize‑ число записей, длина записи в байтах.

Основные методы

Append/Insert‑ добавление записи в конец/в текущую позицию таблицы.

AppendRecord/InsertRecord(V:array of const)‑ добавление новой записи в конец/в текущую позицию таблицы со значениями полей из массиваV.

ClearFields, Delete‑ очистка, удаление текущей записи.

CreateTable/DeleteTable‑ создание/удаление таблицы в программе.

DisableControlsотключение всех визуальных компонентов связанных с таблицей с целью ускорения работы и удаления мерцания на экране при перемещении по записям таблицы (п. 3.8).

EnableControls ‑ подключение всех визуальных компонентов, связанных с таблицей после их отключения методомDisableControls(п. 3.8).

Edit,Cancel, Post‑ начало редактирования, отмена, сохранение изменений.

EmptyTable‑ удаление всех записей таблицы.

FlushBuffers‑ запись всех изменений в базу данных.

FieldByName(‘<имя поля>’)‑ доступ к полю под указанным именем (DataModule2.Stroiki.FieldByName(‘Kz’).AsInteger:=2).

FindField(S):TField‑ поиск поля под именемS. При отсутствии имени возвращаетсяNil(DataModule2.Stroiki.FindField(‘Ss’).AsCurrency:=100000).

GetFieldNames(List:TString)‑ возвращается массивListcназваниями полей.

IsEmpty‑ признак пустой таблицы

Open, Close‑ открытие, закрытие таблицы.

Refresh‑ обновление таблицы и загрузка обновленных записей.

RenameTable(S)‑ переименование таблицы вS(дляParadox,dBase).

SetFields(V:array of const)‑ заполнение текущей записи значениями изV.

Основные события

After/Before Cancel/Close/Delete/Edit/Insert/Open/Post/Refresh/Scroll‑ пос­ле/до отмены изменений/закрытия/удаления записи/редактирования записи/ от­кры­тия/сохранения изменений/обновления данных/переме­ще­ния указа­теля к новой записи.

OnCalcFields‑ формирование значений псевдополей (п. 3.3).

OnDeleteError/OnEditError/OnPostError‑ ошибка при удалении / редак­тиро­вании /сохранении записи.

OnFilterRecord‑ процедура фильтрации (свойствоFiltered=True).

OnNewRecord‑ вставка или добавление новой записи.