Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Proektirovanie_BD_v_Delphi_VTiP.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.82 Mб
Скачать

8.5Свойства, методы и события ado компонентов-наборов

8.5.1Общие свойства с bde-компонентами

В состав ADO-компонентов входят 4 компонента-набора: TADODataSet, TADOTable, TADOTable и TADOStoredProc. Как и аналогичные BDE‑компоненты, они имеют общего родителя — абстрактный класс TDataSet, и, следовательно, большую часть своих методов, свойств и событий они унаследовали от этого класса, разделяя, таким образом, их со своими BDE‑аналогами (рисунок 10.15).

TComponent

TDataSet

TCastomADODataSet TBDEDataSet

TDBDataSet

ADO-наборы BDE-наборы

Рисунок 10.15 - Фрагмент иерархии наследования ADO и BDE компонентов-наборов

Например, для доступа к данным ADO-компоненты используют те же свойства, что и BDE-компоненты. Следующие операторы аналогичны по функциональности (предполагается, что поле Company — второе по счету в массиве Fields и для него создан объект ADOTable1Company):

Caption := ADOTable1.FieldValues['Company'];

Caption := ADOTable1['Company'];

Caption := ADOTable1.FieldByName('Company').AsString;

Caption := ADOTable1.Fields[1].Value;

Caption := ADOTable1Company.AsString;

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

Модификация данных и навигация по ним также не отличаются от описанных ранее для BDE-компонент:

ADOTable1.Edit;

ADOTable1Company.Value: = 'Новая компания';

ADOTable1.Post;

Или:

ADOTable1.Open;

while not ADOTable1.EOF do begin

ADOTable1.Next

end;

ADO-наборы, так же как BDE- наборы, визуализируют данные через компоненты-посредники TDataSource и компоненты вкладки Data Controls палитры компонентов Delphi.

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

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 к работе в пакетном режиме:

with ADODataSet1 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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]