Специфические свойства

ADO-наборы имеют непосредственного родителя TCustomADODataSet, от которого они унаследовали многие специфические свойства. Здесь дается общий обзор особенностей ADO-наборов, а также описываются наиболее важные свойства, методы и события класса TCustomADODataSet.

Прежде всего, это свойства Connection и ConnectionString, с помощью которых ADO-набор может самостоятельно связаться с источником данных.

С помощью свойства BlockReadSize программист может создать такой режим работы, когда навигация по данным не приводит к изменениям в связанных с набором визуализирующих компонентах. Для этого в свойстве BlockReadSize следует поместить любое ненулевое значение. В этом случае свойство State автоматически примет значение dsBlockRead и навигация по НД будет проходить значительно быстрее. Чтобы отменить этот режим, достаточно поместить в свойство BlockReadSize значение 0.

В отличие от BDE наборы ADO могут создавать курсоры двух типов — на стороне клиента и на стороне сервера (свойство CursorConnection). В сочетании со свойством CursorType это дает программисту гибкий инструмент влияния на скоростные качества передачи данных и разграничение доступа к данным. С помощью свойства EnabledBCD программист может заменить вещественные данные форматом двоично-десятичных данных (BCD). Этот формат позволяет избежать ошибок округления вещественных чисел.

Новым по сравнению с BDE-компонентами является также свойство LockType, позволяющее повысить скорость работы в многопользовательской среде за счет учета специфики БД.

С помощью свойства MarshalOptions можно несколько снизить нагрузку на сеть при создании курсора на клиентской машине.

Важным отличием является то, что ADO-компоненты имеют свойство Recordset, содержащее ссылку на одноименный базовый объект. Если программист хорошо знаком с технологией ADO, он может напрямую обратиться к этому свойству для более гибкого доступа к данным.

ADO-компоненты способны работать с кэшированными данными, но делают это по-своему. Во-первых, в терминологии ADO вместо термина кэширование данных используется понятие пакетная обработка данных, после завершения которой все сделанные в пакете изменения либо подтверждаются, либо отвергаются. Для работы в пакетном режиме ADO-набор должен:

ü в свойстве CursorType содержать значение ctKeySet, заданное по умолчанию, или значение ctStatic;

ü в свойстве LockType содержать значение ltBatchOptimistic. Кроме того, сами данные должны быть получены с помощью SQL-запроса SELECT. Вот как, например, готовится компонент ADODataSet к работе в пакетном режиме:

withADODataSet1 do begin

CursorLocation := clUseServer;

CursorType := ctKeyset;

LockType. := ltBatchOptimistic;

CommandType : = cmdText;

CommandText := 'SELECT * FROM BOOKS';

Open;

end;

Следует заметить, что поскольку компонент TADOTable не имеет свойств CommandType и CommandText, его перевод в режим пакетной обработки данных имеет свою специфику:

ADOTable1.LockType := ltBatchOptimistik;

ADOTable1.Open;

В пакетном режиме можно по этой же схеме выполнять кэшированные изменения в хранимых процедурах, которые возвращают набор записей:

ADOStoredProc1.ProcedureName : = 'MyBatchQuery';

ADOStoredProc1.LockType := ltBatchOptimistic;

ADOStoredProc1.Open;

После получения пакетного набора записей с помощью свойства RecordStatus можно проверить статус конкретной записи, а с помощью свойства FilterGroup -отфильтровать записи. Подтвердить изменения можно с помощью метода UpdateBatch; прекратить режим пакетной обработки и отказаться от сделанных изменений - с помощью метода CancelBatch. При этом с помощью передаваемых этим методам параметров можно отменить или подтвердить изменения для всех или только для отфильтрованных записей.

Есть определенная специфика в механизме сортировки записей ADO-набора. Для сортировки в свойство Sort помещают список полей сортировки, разделенных запятыми. Каждое поле может дополнительно снабжаться признаками ASCENDING (ASC) или DESCENDING (DESC) для указания соответственно восходящего или нисходящего порядка сортировки (если ни одно из этих слов не указано, реализуется восходящая сортировка), например:

ADOQuery1.Sort := 'LastName ASC, DateDue DESC';

Если в свойство Sort помещена пустая строка, записи не сортируются и предъявляются в том виде, в котором они получены из БД. Если для НД создан клиентский курсор и нет соответствующих индексов для сортировки, на клиентской машине создается временный индекс, который уничтожается при изменении свойства Sort.