![]() |
![]() |
![]() |
Компоненты доступа к данным
Так как компоненты InterBase Express используют для получения набора данных собственный механизм, то иерархия классов-предков включает только обязательный для всех наборов данных TDataSet класс TiBCustomDataSet, который, собственно, и инкапсулирует механизм доступа InterBase Express (см. рис. 12.1).
Для связи с базой данных компоненты InterBase Express применяют компоненты соединения TiBDatabase (см. выше). Для этого они используют свойство
property Database: TiBDatabase;
Доступ к связанной транзакции осуществляется через свойство
property Transaction: TIBTransaction;
Дополнительно к стандартным свойствам и методам, описываемым в гл. 12, класс TiBCustomDataSet имеет свойство
type TIBUpdateRecordTypes = set of (cusModified, cuslnserted, cusDeleted,
cusUnmodified, cusUninserted);
property UpdateRecordTypes: TIBUpdateRecordTypes;
cusModified — модифицированные записи;
cuslnserted — добавленные записи;
cusDeleted — удаленные записи;
cusUnmodified — немодифицированные записи;
cusUninserted — недобавленные записи.
Данное свойство определяет записи набора данных, на которые распространяются операции кэширования.
Свойство
property BufferChunks: Integer;
определяет число записей, которые компонент загружает в собственный локальный буфер для ускорения выполнения стандартных операций.
При использовании компонентов в приложениях необходимо учитывать некоторые особенности.
Обновление набора данных выполняется не при каждом сохранении изменений. Такое поведение компонента определяется свойством
property ForcedRefresh: Boolean;
которое по умолчанию имеет значение False.
Это ускоряет работу компонента. При необходимости выполнять обновление данных с максимальной частотой свойству ForcedRefresh нужно присвоить значение True.
В зависимости от настроек компонента, с ним можно выполнять различные виды операций редактирования, перечень которых содержится в свойстве "только для чтения":
type
TLiveMode = (Imlnsert, ImModify, ImDelete, ImRefresh);
TLiveModes = set of TLiveMode; property LiveMode: TLiveModes;
Так как все эти компоненты предназначены для работы с сервером, то изначально все они поддерживают режим кэширования изменений и имеют соответственные свойства, методы и методы-обработчики событий (табл. 18.2).
Таблица 18.2. Методы-обработчики событий класса TiBCustomDataSet
Объявление |
Описание |
property Af terDatabaseDisconnect: TNotifyEvent; |
Выполняется после закрытия соединения с базой данных |
property AfterTransactionEnd: TNotifyEvent; |
Выполняется по окончании транзакции, с которой связан данный набор данных |
property Bef oreDatabaseDisconnect: TNotifyEvent; |
Выполняется перед закрытием соединения с базой данных |
property BeforeTransactionEnd: TNotifyEvent; |
Выполняется перед окончанием транзакции, с которой связан данный набор данных |
property DatabaseFree: TNotifyEvent; |
Выполняется при обнулении свойства Database компонента набора данных |
type TIBUpdateAction = (uaFail, uaAbort, uaSkip, uaRetry, uaApplied, uaApply) ; TIBUpdateErrorEvent = procedure ( DataSet : TDataSet ; E: EDatabaseError; UpdateKind: TUpdateKind; var UpdateAction: TIBUpdateAction) of object; property OnUpdateError: TIBUpdateErrorEvent ; |
Вызывается при возникновении ошибки сохранения изменений в режиме кэширования |
type TIBUpdateAction = (uaFail, uaAbort, uaSkip, uaRetry, uaApply, uaApplied); TIBUpdateRecordEvent = procedure ( DataSet : TDataSet ; UpdateKind: TUpdateKind; var UpdateAction: TIBUpdateAction) of object; property OnUpdateRecord: TIBUpdateRecordEvent ; |
Вызывается при сохранении изменений в режиме кэширования |
property TransactionFree: TNotifyEvent; |
Выполняется при обнулении свойства Transaction компонента набора данных |
Возможности компонентов TIBTable, TIBQuery, TIBStoredProc, TIBUpdateSQL мало чем отличаются от стандартных, описанных в гл. 12.
Для взаимодействия с сервером компоненты InterBase Express используют два класса, которые инкапсулируют важные структуры API InterBase. Эти структуры обеспечивают передачу серверу параметров запроса и возвращение результата выполнения запроса. Поэтому сначала рассмотрим классы TIBXSQLDA и TIBXSQLVAR, а затем перейдем к компонентам.
![]() |
![]() |
![]() |
Когда тот или иной физик использует понятие "физический вакуум", он либо не понимает абсурдности этого термина, либо лукавит, являясь скрытым или явным приверженцем релятивистской идеологии.
Понять абсурдность этого понятия легче всего обратившись к истокам его возникновения. Рождено оно было Полем Дираком в 1930-х, когда стало ясно, что отрицание эфира в чистом виде, как это делал великий математик, но посредственный физик Анри Пуанкаре, уже нельзя. Слишком много фактов противоречит этому.
Для защиты релятивизма Поль Дирак ввел афизическое и алогичное понятие отрицательной энергии, а затем и существование "моря" двух компенсирующих друг друга энергий в вакууме - положительной и отрицательной, а также "моря" компенсирующих друг друга частиц - виртуальных (то есть кажущихся) электронов и позитронов в вакууме.
Однако такая постановка является внутренне противоречивой (виртуальные частицы ненаблюдаемы и их по произволу можно считать в одном случае отсутствующими, а в другом - присутствующими) и противоречащей релятивизму (то есть отрицанию эфира, так как при наличии таких частиц в вакууме релятивизм уже просто невозможен). Подробнее читайте в FAQ по эфирной физике.
|
![]() |