Иллюстрированный самоучитель по Delphi 7 для профессионалов

Использование ADO средствами Delphi

  • Основы ADO

    Наряду с традиционными инструментами доступа к данным Borland Database Engine и ODBC в приложениях Delphi можно применять технологию Microsoft ActiveX Data Objects (ADO), которая основана на возможностях СОМ, а именно интерфейсов OLE DB.
  • Перечислители. Объекты соединения с источниками данных.

    Объекты-перечислители обеспечивают поиск любых объектов ADO, которые имеют доступ к источникам данных. При этом другие перечислители также видны в данном перечислителе. | Первичный поиск источников данных осуществляется в провайдере ADO.
  • Сессия. Транзакции. Наборы рядов.

    Из объекта-источника данных можно создавать объекты-сессии. Для этого используется метод: | function CreateSession | (const punkOuter: lUnknown; const riid: TGUID; out ppDBSession: lUnknown): | HResult; stdcall; | …интерфейса iDBCreateSession.
  • Команды

    Программные средства ADO были бы неполными, если бы не имели возможности использовать для работы с данными язык SQL. Операторы DML и DDL, ряд специальных операторов ADO носят общее название текстовых команд.
  • Провайдеры ADO

    Провайдеры ADO обеспечивают соединение приложения, использующего данные через ADO, с источником данных (сервером SQL, локальной СУБД, файловой системой и т. д.). Для каждого типа хранилища данных должен существовать провайдер ADO.
  • Реализация ADO в Delphi

    Механизм доступа к данным через ADO и многочисленные объекты и интерфейсы реализованы в VCL Delphi в виде набора компонентов, расположенных на странице ADO. Все необходимые интерфейсы, обеспечивающие работу компонентов, объявлены и описаны в файлах OleDB.pas и ADODB.pas в папке \Delphi7\Source\Vcl.
  • Компонент TADOConnection. Настройка соединения.

    Компонент TADOConnection предназначен для управления соединением с объектами хранилища данных ADO. Он обеспечивает доступ к хранилищу данных компонентам ADO, инкапсулирующим набор данных (см. ниже). | Применение этого компонента дает разработчику ряд преимуществ:
  • Управление соединением

    Соединение с хранилищем данных ADO открывается и закрывается при помощи свойства: | property Connected: Boolean; | …или методов: | procedure Open; overload; | procedure Openfconst UserlD: WideString; const Password: WideString); overload; | …и: | procedure Close;
  • Доступ к связанным наборам данных и командам ADO

    Компонент TADOconnection обеспечивает доступ ко всем компонентам, которые используют его для доступа к хранилищу данных ADO. Все открытые таким образом наборы данных доступны через индексированное свойство: | property DataSets[Index: Integer]: TCustomADODataSet;
  • Объект ошибок ADO. Транзакции.

    Все ошибки времени выполнения, возникающие при открытом соединении, сохраняются в специальном объекте ADO, инкапсулирующем коллекцию сообщений об ошибках. | Доступ к объекту возможен через свойство: | property Errors: Errors; | Подробнее об объекте ошибок ADO см. ниже.
  • Наборы данных ADO

    На странице ADO Палитры компонентов Delphi, кроме компонентов соединения есть стандартные компоненты, инкапсулирующие набор данных и адаптированные для работы с хранилищем данных ADO (рис. 19.7). Это компоненты: | TADODataSet – универсальный набор данных; | TАоотаblе – таблица БД;
  • Класс TCustomADODataSet. Набор данных.

    Класс TCustomADODataSet инкапсулирует механизм доступа к хранилищу данных через ADO. Этот класс наполняет абстрактные методы общего предка TDataSet функциями конкретного механизма доступа к данным. | Поэтому здесь мы рассмотрим только уникальные свойства и методы класса TCustomADODataSet, обеспечивающие работу с ADO.
  • Курсор набора данных

    Для набора данных ADO в зависимости от его назначения можно выбрать тип и местоположение используемого курсора. Местоположение курсора задается свойством: | type TCursorLocation = (clUseServer, clUseClient); property CursorLocation: TCursorLocation;
  • Локальный буфер

    После передачи клиенту записи набора данных размещаются в локальном буфере, размер которого определяется свойством: | property CacheSize: Integer; | Значение свойства есть число записей, помещаемых в локальный буфер, и оно не может быть меньше 1.
  • Состояние записи

    Класс TCustomADODataSet обладает дополнительными возможностями, которые позволяют отслеживать состояние каждой записи. | Для текущей записи набора данных можно определить ее состояние.
  • Фильтрация

    Помимо обычной фильтрации, основанной на свойствах Filter, Filtered и методе-обработчике onFilterRecord, класс TCustomADODataSet предоставляет разработчику дополнительные возможности. | Свойство: | TFilterGroup = (fgUnassigned, fgNone, fgPendingRecords, fgAffectedRecords, | fgFetchedRecords, fgPredicate, fgConflictingRecords); | property FilterGroup: TFilterGroup;
  • Поиск. Сортировка.

    Быстрый и гибкий поиск по полям текущего индекса набора данных обеспечивает метод: | SeekOption = (soFirstEQ, soLastEQ, soAfterEQ, soAfter, soBeforeEQ, soBefore); | function Seek(const KeyValues: Variant; SeekOption: TSeekOption = soFirstEQ): Boolean;
  • Команда ADO

    Для выполнения запросов к источнику данных любой компонент ADO инкапсулирует специальный объект команды ADO. | При использовании компонентов-потомков класса TCustomADODataSet обычно нет необходимости применять объект команды напрямую.
  • Групповые операции

    Как уже рассказывалось выше, наборы данных ADO используют на клиентской стороне локальный кэш для хранения данных и сделанных изменений. Благодаря наличию этого кэша и появилась возможность реализовать групповые операции.
  • Параметры. Класс TParameters.

    Многие компоненты ADO, инкапсулирующие набор записей, должны обеспечивать применение параметров запросов. Для этого в них используется специальный класс TParameters. | Для каждого параметра из коллекции класса TParameters создается отдельный класс TParameter.
  • Класс TParameter

    Класс TParameter инкапсулирует отдельный параметр. Имя параметра определяется свойством: | property Name: WideString; | Тип данных, которому должно соответствовать его значение, задается свойством: | TDataType = TFieldType; property DataType: TDataType;
  • Компонент TADODataSet

    Компонент TADODataSet предназначен для представления набора данных из хранилища данных ADO. Он прост в использовании, имея только несколько собственных свойств и методов, и применяет функции своего предка – класса TCustomADODataSet.
  • Компоненты TADOTable, TADOQuery иTADOStoredProc

    Компонент ТАDOTаblе обеспечивает использование в приложениях Delphi таблиц БД, подключенных через провайдеры OLE DB. По своим функциональным возможностям и применению он подобен стандартному табличному компоненту (см. гл. 11).
  • Команды ADO

    Команде ADO, которой мы уделяли так много внимания в этой главе в VCL Delphi, соответствует компонент TADOCormand. Методы этого компонента во многом совпадают с методами класса TCustomADODataSet, хотя этот класс не является предком компонента (рис. 19.8).
  • Объект ошибок ADO

    При рассказе о компонентах ADO в данной главе мы довольно часто упоминали об объектах ошибок ADO. Эти объекты содержат информацию об ошибке, возникшей при выполнении операции каким-либо объектом ADO. | В Delphi для объекта ошибки не предусмотрен специальный тип, но разработчик может использовать его методы интерфейса Error, предоставляемого многими методами других объектов ADO.
  • Пример приложения ADO

    Теперь попробуем применить на практике представленную в этой главе информацию о реализации ADO в Delphi. В качестве примера создадим простое приложение ADO Demo, которое "умеет" отображать пару таблиц БД, сохранять изменения при помощи групповых операций, сортировать записи и устанавливать фильтры на выбранные записи (рис. 19.9). | Рис. 19.9.
  • Соединение с источником данных

    Для связывания приложения с источником данных используем компонент TADOConnection и настроим соединения, щелкнув на кнопке свойства connectionstring в Инспекторе объектов. | Перейдя в редактор Data Link Properties, выберем провайдер Microsoft OLE DB Provider for OLE DB Drivers (см. рис. 19.3).
  • Групповые операции. Фильтрация. Сортировка.

    Компонент tbiindustry предназначен для выполнения групповых операций. Поэтому его свойство LociType имеет значение itBatchOptimistic. Для свойства CursorLocation установлено значение ciuseclient, чтобы обеспечить использование набора данных на клиенте.
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.