Компонент TDataSource

Компонент TDataSource. Компонент DataSource действует как посредник между компонентами TDataSet (TTable, TQuery, TStoredProc) и компонентами Data Controls - элементами управления, обеспечивающими представление данных на форме. Компоненты TDataSet управляют связями с библиотекой Borland Database Engine (BDE), а компонент DataSource управляет связями с данными в компонентах Data Controls.

В типичных приложениях БД компонент DataSource, как правило, связан с одним компоненом TDataSet (TTable или TQuery) и с одним или более компонентами Data Controls (такими, как DBGrid, DBEdit и др.). Связь этого компонента с компонентами TDataSet и DataControls осуществляется с использованием следующих свойств и событий: • Свойство DataSet компонента DataSource идентифицирует имя компонента TDataSet. Можно присвоить значение свойству DataSet на этапе выполнения или с помощью инспектора объектов на этапе проектирования. • Свойство Enabled компонента DataSource активизирует или останавливает взаимосвязь между компонентами TDataSource и Data Controls.

Если значение свойства Enabled равно true, то компоненты Data Controls, связанные с TDataSource, воспринимают изменения набора данных. Использование свойства Enabled позволяет временно разъединять визуальные компоненты Data Controls и TDataSource, например, для того, чтобы в случае поиска в таблице с большим количеством записей не отображать на экране пролистывание всей таблицы. • Свойство AutoEdit компонента DataSource контролирует, как инициируется редактирование в компонентах Data Controls.

Если значение свойства AutoEdit равно true, то режим редактирования начинается непосредственно при получении фокуса компонентом Data Controls, связанным с данным компонентом TDataSet. В противном случае режим редактирования начинается, когда вызывается метод Edit компонента TDataSet, например, после нажатия пользователем кнопки Edit на компоненте DBNavigator. • Событие OnDataChange компонента DataSource наступает, когда происходит изменение значения поля, записи, таблицы, запроса. • Событие OnUpdateData компонента DataSource наступает, когда пользователь пытается изменить текущую запись в TDataSet. Обработчик этого события следует создавать, когда требуется соблюсти условия ссылочной целостности или ограничения, накладываемые на значения полей изменяемой базы данных.

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

Для этой цели наиболее часто используются следующие свойства: • Active - указывает, открыта (true) или нет (false) данная таблица. • DatabaseName - имя каталога, содержащего искомую таблицу, либо псевдоним (alias) удаленной БД (псевдонимы устанавливаются с помощью утилиты конфигурации BDE, описание которой присутствует во многих источниках, посвященных продуктам Borland, либо с помощью SQL Explorer, вызываемого с помощью пункта меню Database/Explore). Это свойство может быть изменено только в случае, если таблица закрыта (ее свойство Active равно false), например: Table1->Active = false; Table1->DatabaseName = "BCDEMOS" Table1->Active = true; • TableName - имя таблицы. • Exclusive - если это свойство принимает значение true, то никакой другой пользователь не может открыть таблицу, если она открыта данным приложением.

Если это свойство равно false (значение по умолчанию), то другие пользователи могут открывать эту таблицу. • IndexName - идентифицирует вторичный индекс для таблицы. Это свойство нельзя изменить, пока таблица открыта. • MasterFields - определяет имя поля для создания связи с другой таблицей. • MasterSource - имя компонента TDataSource, с помощью которого TTable будет получать данные из связанной таблицы. • ReadOnly - если это свойство равно true, таблица открыта в режиме "только для чтения". Нельзя изменить свойство ReadOnly, пока таблица открыта. • Eof, Bof - эти свойства принимают значение true, когда указатель текущей записи расположен на последней или соответственно первой записи таблицы. • Fields - массив объектов TField. Используя это свойство, можно обращаться к полям по номеру, что удобно, когда заранее неизвестна структура таблицы: Edit1->Text=Table1->Fields[2]-> AsString; Наиболее часто при работе с компонентом TTable используются следующие методы: • Open и Close устанавливают значения свойства Active равными True и False соответственно. • Refresh позволяет заново считать набор данных из БД. • First, Last, Next, Prior перемещают указатель текущей записи на первую, последнюю, следующую и предыдущую записи соответственно, например: Table1-> First(); while (!Table1->Eof) { //что-то делаем Table1->Next(); }; • MoveBy перемещает указатель на указанное число строк (оно может быть и отрицательным) в пределах таблицы • Insert, Edit, Delete, Append - переводят таблицу в режимы вставки записи, редактирования, удаления, добавления записи соответственно. • Post - осуществляет физическое сохранение измененных данных.

Например: Table2->Insert(); Table2->Fields[0]-> AsInteger = 100; Table2->Fields[1]->AsString =Edit1->Text; Table2->Post(); • Cancel - отменяет внесенные изменения, не сохраненные физически. • FieldByName - предоставляет возможность обращения к данным в полях по имени поля: S=Table1->FieldByName("area&quot ;)->AsString; • SetKey переключает таблицу в режим поиска. • GotoKey начинает поиск строки, значение Fields[n] которой равно выбранному, где n - номер колонки таблицы, начиная с 0: Table1->SetKey(); Table1->Fields[0]->AsString=Edit1- >Text; Table1->GotoKey(); • SetRangeStart, SetRangeEnd, ApplyRange позволяют выбрать нужные строки на основе диапазона значений какого-либо поля. Table1->SetRangeStart(); Table1->Fields[0]-> AsString = Edit1->Text; Table1->SetRangeEnd(); Table1->Fields[0]->AsString = Edit2->Text; Table1->ApplyRange(); • FreeBookmark, GetBookmark, GotoBookmark- позволяют создать помеченную строку в таблице и затем вернуться к ней позже.

Методы Bookmark используют класс TBookmark.

Метод GetBookmark устанавливает закладку на текущей cтроке таблицы.

GotoBookmark осуществляет перемещение в таблице к строке, ранее отмеченной закладкой.

Метод FreeBookmark используется для уничтожения объекта типа TBookmark: TBookmark Marker =Table1->GetBookmark(); Table1->GotoBookmark(Marker); Table1->FreeBookmark(Marker); Cобытия компонента TTable позволяют строить и контролировать поведение приложе ий БД. Например, событие BeforePost наступает перед вставкой или изменением записи, событие AfterPost - после сохранения вставленной или измененной записи, событие AfterDelete - после удаления записи и т.д. Чтобы внести компонент TTable в форму, нужно выполнить следующее: 1. Используя страницу Data Access палитры компонентов, разместить компонент TTable на форме или в модуле данных. 2. Свойству DatabaseName присвоить имя каталога, где находится БД, либо псевдо има БД. 3. Свойству TableName присвоить имя таблицы или выбрать таблицу из выпадающего списка. 4. Внести в форму компонент DataSource и установить значение свойства DataSet равным имени компонента TTable. 5. Внести компоненты Data Controls и связать их с компонентом DataSource для того, чтобы отобразить на экране данные из таблицы БД.