Размещение в модуле данных невизуальных компонент 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Размещение в модуле данных невизуальных компонент



для доступа к БД и ее таблицам

 

Разместим в модуле данных один экземпляр компоненты TDatabase со страницы BDE.

У компоненты TDatabase следует установить следующие свойства:

* Database Name -имя БД, его следует набрать - через это имя с компонентой TDatabase будут связываться другие невизуальные компоненты;

* Connected – признак, определяющий активна ли база данных. Его задают равным false при разработке программы, а при выполнении программы, в момент активизации главной формы, задают равным true. Также можно активизировать БД, вызвав метод компоненты Open(), а в момент закрытия главной формы – метод компоненты Close();

* DriverName – выбираетсязначение STANDARD;

* В свойстве Params через редактор параметров следует задать строку

PATH путь к таблицам БД

В модуле данных будут размещаться экземпляры компоненты TTable (таблицы) и связанные с ними экземпляры компоненты TDataSource, а также экземпляры компоненты TQuery (запросы) и связанные с ними экземпляры компоненты TDataSource.

Компонента TDataSource расположена на странице Data Access и представляет собой промежуточное звено для связи невизуальных компонент TTable и TQuery с визуальными компонентами, размещаемыми на формах.

Для компоненты TTable нужно указать свойства:

· DatabaseName - имя БД, установленное в компоненте TDatabase, оно выбирается из списка доступных имен БД;

· TableType – тип таблиц БД, выбирается ttParadox;

· TableName, выбрав имя файла с расширением db из числа созданных таблиц.

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

Это свойство Constraints. При добавлении каждого условия устанавливаются свойства:

· CustomConstraint – некоторое условие, аналогичное where в свойстве SQL компоненты TQuery;

· Error Message – текст сообщения, выдаваемого при возникновении ошибки:

Свойство Active изначально равно false (таблица не открыта); она будет открываться вызовом метода компоненты Open() при показе соответствующей формы, а закрываться – вызовом метода компоненты Close() при закрытии формы.

С каждой компонентой TTable должна быть связана компонента TDataSource, в свойстве DataSet которой нужно выбрать имя соответствующей таблицы.

Для отображения на формах полей из нескольких связанных таблиц необходимо использовать компоненты TQuery.

Для экземпляров компонент TQuery должны быть заданы свойства:

· DatabaseName - имя БД, установленное в компоненте TDatabase, оно выбирается из списка доступных имен БД;

· SQL -для задания оператора языка SQL, который может вернуть набор данных (НД), то есть группу записей из одной или нескольких таблиц БД.

Например, для просмотра таблицы class, в которой желательно видеть названия классов и названия предметов, изучаемых в этом классе, свойство SQL должно быть таким

SELECT * FROM CLASS C, PREDMET P WHERE C.NP=P.NP

В этом примере NP – уникальный номер предмета (его ключ) в таблице PREDMET и поле в таблице CLASS для связи с предметами.

Свойство Active изначально равно false (запрос не открыт); он будет открываться вызовом метода компоненты Open() при показе соответствующей формы, а закрываться – вызовом метода компоненты Close() при закрытии формы.

Для каждой компоненты TQuery и TTable необходимо сделать доступными все поля. Для этого, сделав текущей нужную компоненту, следует нажать правую кнопку мыши и выбрать пункт контекстного меню Fields Editor.

Появится окно:

 
 

 


 

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

Для нашего примера модуль данных будет иметь следующий вид:

НД может находиться в одном из следующих состояний (оно определяется значением свойства State связанной компоненты TDataSource), из каждого его можно перевести в некоторое другое (табл. 4)

Таблица 4

Состояние Краткое описание Способ перевода в другое состояние
dsInactive НД закрыт Перевод в состояние dsBrowse с помощью вызова метода TQuery->Open()илиTTable->Open()
dsBrowse Просмотр данных без изменения (состояние по умолчанию после открытия) Перевод в состояние dsInactive с помощью вызова метода TQuery->Close()или TTable->Close(). Перевод в состояние dsEdit в результате выполнения метода Edit() компоненты TTable. Перевод в состояние dsInsert в результате выполнения метода Insert() компоненты TTable
dsEdit НД находится в состоянии редактирования После вызова метода Post компоненты TTable происходит перевод в состояние dsBrowse
dsInsert НД находится в состоянии добавления новой записи После вызова метода Post() компоненты TTableпроисходит перевод в состояние dsBrowse

Компонента TTable может обрабатываться методами для последовательной обработки НД.

Для этой цели имеются свойства и методы компоненты TTable:

bool Eof Проверка, достигнут ли конец НД (свойство);

First(); Установка указателя на первую запись НД;

Next(); Переход к следующей записи НД;

Last(); Установка указателя на последнюю запись НД;

bool Locate(константа – имя поля или полей, по которым идет поиск, поле или массив полей типа Variant со значениями полей, поле типа TLocateOptions с режимом поиска); Поиск в НД записи, поля которой совпадают с указанными значениями, и установка ее в качестве текущей.

Кроме того, компоненты TQuery и TTable имеют метод FieldByName, аргументом которого является строка с именем поля; метод возвращает значение поля для текущей записи.

Пример:

Variant V; TLocateOptions Opts;

Opts.Clear(); //Очистка режима поиска

V=DM->CHI_CL->FieldByName("ncl")->AsInteger; //Запоминание значения поля текущей записи

DM->CL->First();//Установка таблицы на начало

//Поиск в таблице записи с определенным значением ключа

DM->CL->Locate("ncl",V,Opts);

Пример поиска по совпадению значения двух полей:

TLocateOptions Opts;

Opts.Clear();

Opts << loPartialKey;

Variant locvalues[2];

locvalues[0] = Variant("Sight Diver");

locvalues[1] = Variant("P");

CustTable->Locate("Company;Contact", VarArrayOf(locvalues, 1), Opts);

Функция VarArrayOf возвращает одномерный массив типа Variant с элементами, заданными первым араметром. Второй параметр на 1 меньше числа значений в массиве.

Создание главной формы

Главная форма будет содержать меню с пунктами, соответствующими выводу форм просмотра таблиц и форм вывода отчетов (выходных документов).

Для активизации формы следует выполнить вызов метода этой формы ShowModal():

имя формы->ShowModal();

Для того, чтобы главная форма имела доступ к компонентам, расположенным в модуле данных, следует при создании этой формы выполнить пункт меню File, Include Unit Hd r и выбрать модуль, соответствующий модулю данных. После этого все компоненты модуля данных будут доступны в главном модуле.

В событии OnShow следует выполнить открытие БД:

Имя модуля данных->имя компоненты TDatabase->Open();

В событии OnClose следует выполнить закрытие БД:

Имя модуля данных->имя компоненты TDatabase->Close();



Поделиться:


Последнее изменение этой страницы: 2016-12-16; просмотров: 266; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.14.253.152 (0.009 с.)