Напомним, что все эти механизмы не созданы "с нуля", а только дополнены обращениями к функциям BDE в необходимых местах методов, изначально описанных в классе
TDataSet. Например, для обеспечения фильтрации записей набора данных к классу добавлено новое свойство:
Оно определяет дополнительные параметры отбора записей по фильтру (чувствительность к регистру символов и отбор по текстовому шаблону).
Дополнительно к существующим добавлен механизм кэширования изменений. Теперь все вносимые пользователем изменения могут накапливаться в специальном буфере, а их передачей в базу данных можно управлять.
Для обеспечения использования функций API BDE на программном уровне добавлено свойство, содержащее дескриптор курсора, соответствующего текущей записи набора данных:
Также класс обеспечивает возможность программного управления вторичными индексами набора данных в зависимости от типа таблицы базы данных.
|
|
|
|
property BlockReadSize: Integer;
|
|
Определяет размер буфера при блочном чтении данных. Такой режим используется для быстрого перемещения по большим массивам данных. Если значение свойства больше нуля, навигация по набору данных осуществляется без изменения состояния компонентов отображения данных и вызова методов-обработчиков событий
|
property CacheBlobs: Boolean;
|
|
Разрешает использование буфера памяти для данных типа BLOB
|
property CachedUpdates: Boolean;
|
|
Включает или отключает режим кэширования изменений в наборе данных. Используется в клиентских приложениях архитектуры клиент/сервер
|
property CanModify: Boolean;
|
|
Если набор данных позволяет делать изменения, свойство возвращает
True, иначе — False
|
property Explndex: Boolean;
|
|
Показывает, используются ли в наборе данных индексы dBASE
|
|
|
Содержит выражение для фильтра набора данных
|
property Filtered: Boolean;
|
|
Управляет включением фильтра набора данных
|
TFilterOption = (foCaselnsensitive, foNoPartialCompare) ;
property FilterOptions: TFilterOptions;
|
|
Определяет параметры фильтра:
- foCaselnsensitive — строковые
значения фильтруются без учета регистра;
- foNoPartialCompare
— при фильтрации символ "*" рассматривается как обычный
символ, иначе он означает, что на этом месте может находиться произвольное
подмножество любых символов
|
type HDBICur: Longint; property Handle: HDBICur;
|
|
Указатель на курсор ВОЕ, связанный с текущей записью набора данных
|
|
|
Содержит размер ключа для текущего индекса набора данных
|
type TLocale: Pointer; property Locale: TLocale;
|
|
Указатель на языковый драйвер ВОЕ
|
|
|
Номер текущей записи набора данных
|
property RecordCount: Longint;
|
|
Содержит число записей в наборе данных
|
property RecordSize: Word;
|
|
Содержит размер одной записи набора данных
|
property UpdateObject: TDataSetUpdateObject;
|
|
Экземпляр объекта TUpdateObject, используемого при кэшировании изменений
|
type TUpdateRecordTypes = set of (rtModified, rtlnserted, rtDeleted, rtUnmodified) ;
property UpdateRecordTypes : TUpdateRecordTypes ;
|
|
Определяет видимость записей в режиме кэширования изменений в зависимости от их состояния:
- rtModified — доступны измененные
записи;
- rtinserted — доступны
добавленные записи;
- rtDeleted — доступны
удаленные записи;
- rtUnmodified —
доступны немодифицированные записи
|
property UpdatesPending: Boolean;
|
|
Значение True говорит о том, что буфер изменений при кэшировании содержит не сохраненные на сервере изменения
|
|
|
|
Записывает изменения из буфера в базу данных в режиме кэширования
|
function BookmarkValid (Bookmark : TBookmark): Boolean; overrider
|
|
Проверяет существование экземпляра закладки, передаваемого в параметре
Bookmark
|
|
|
Отменяет все изменения, сделанные в текущей записи с момента последнего сохранения
|
|
|
Отменяет все изменения, сделанные с момента последней записи в базу данных и очищает буфер в режиме кэширования
|
|
|
Очищает буфер изменений в режиме кэширования
|
function CompareBookmarks (Bookmarkl, Bookmark2: TBookmark): Integer;
|
|
Проверяет идентичность закладок, указанных в параметрах
Bookmark1 и Bookmark2. При значении сигнализирует о наличии отличий в двух закладках
|
function ConstraintCallBack (Req: DsInfoReq; var ADataSources : DataSources) : DBIResult; stdcall;
|
|
Обеспечивает доступ к функциям ограничения данных API BDE
|
function ConstraintsDisabled: Boolean;
|
|
Показывает, включены или отключены ограничения данных
|
function CreateBlobStream ( Field : TField; Mode: TblobStreamMode) : TStream; override;
|
|
Создает поток для чтения/записи данных типа BLOB
|
procedure DisableConstraints;
|
|
Отключает ограничения данных
|
procedure EnableConstraints;
|
|
Включает ограничения данных
|
|
|
Переносит все изменения из буфера и восстанавливает все записи от текущей позиции до конца набора данных
|
|
|
Передает в базу данных все изменения из буфера записи
|
function GetBlobFieldData (FieldNo: Integer; var Buffer: TblobByteData): Integer; override;
|
|
Читает все данные BLOB из поля
FieldNo В буфер Buffer
|
function GetCurrentRecord (Buffer : PChar) : Boolean
|
|
Помещает текущую строку в буфер Buffer
|
|
|
Обновляет информацию о текущем индексе набора данных
|
function IsSequenced: Boolean; override;
|
|
Определяет, поддерживает ли таблица БД нумерацию последовательности записей. В классе
TDataSet всегда возвращает
True, т. к. абстрактный набор данных свободен от конкретной реализации БД и всегда нумерует записи
|
function Locate (const KeyFields: string; const KeyValues : Variant; Options: TlocateOptions) : Boolean;
|
|
Осуществляет поиск в наборе данных. Параметр
KeyFields содержит список полей, по которым ведется поиск. Параметр
KeyValues содержит значения полей для поиска. Параметр
Options определяет условия поиска. Если запись найдена, курсор набора данных устанавливается на эту запись и возвращается
True (см. гл. 14)
|
function Lookup (const KeyFields: string; const KeyValues : Variant; const ResultFields: string): Variant;
|
|
Осуществляет поиск в наборе данных. Возвращает массив значений требуемых полей найденной записи. Параметры аналогичны методу
Locate (см. гл. 14)
|
procedure Post; override;
|
|
Пересылает сделанные в текущей записи изменения в базу данных
|
|
|
Отменяет все изменения в текущей строке при работающем буфере изменений
|
procedure Translate (Src, Dest : PChar; ToOem: Boolean); override;
|
|
Форматирует текст. Если параметр ToOem =
True, текст Src в формате ANSI переводится в текст
Dest в формате OEM и наоборот
|
function UpdateStatus: TUpdateStatus;
|
|
Возвращает тип сохраняемых в буфере изменений данных (см. табл. 16.1)
|
Методы-обработчики событий
|
TUpdateAction = (uaFail, uaAbort, uaSkip, uaRetry, uaApplied);
TUpdateErrorEvent = procedure (DataSet: TDataSet; E: EDatabaseError; UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction) of object;
property OnUpdateError: TUpdateErrorEvent;
|
|
Вызывается при возникновении ошибки переноса кэшированных в буфере изменений в таблицу базы данных
|
type TUpdateAction = (uaFail, uaAbort, uaSkip, uaRetry, uaApplied) ;
TUpdateRecordEvent = procedure ( DataSet : TDataSet ; UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction) of object;
property OnUpdateRecord : TUpdateRecordEvent ;
|
|
Вызывается при сохранении кэшированных в буфере изменений для отдельной записи.
Применяется для организации дополнительного управления этим процессом, например для контроля какого-либо конкретного значения
|