Шаг 10.
Технология ADO.
Компонент TADODataSet

    На этом шаге мы рассмотрим компонент TADODataSet.

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

    Компонент TADODataSet обеспечивает доступ к одной или нескольким таблицам базы данных с помощью запроса типа Select. Компонент рассчитан на возвращение набора данных, поэтому его нельзя использовать для выполнения подмножества операторов DDL. В компоненте есть свойство CommandText, однако в него можно поместить только оператор Select. Для выполнения DDL-предложений языка SQL можно использовать метод Execute компонента TADOCommand или метод ExecSQL компонента TADOQuery.

    Свойства компонента TADODataset, многие из которых компонент наследует от своих предков TCustomADODataSet и TDataSet, приведены в таблице 1.

   
Таблица 1.Свойства компонента TADODataSet
Свойство Описание
property Active: Boolean;
Указывает, открыт ли набор данных. Значения свойства изменяют методы Open и Close.
property CacheSize: Integer;
Определяет размер локального клиентского буфера, в котором размещаются записи набора данных после передачи клиенту. Значение свойства есть число записей, помещаемых в локальный буфер, и оно не может быть меньше 1. Очевидно, что при достаточно большом размере буфера компонент будет обращаться к источнику данных не так часто, но при этом большой буфер заметно замедлит открытие набора данных.
property CommandText: WideString;
Указывает, какая команда должна выполняться с помощью метода Execute. Это может быть строка, содержащая SQL-оператор, имя таблицы или хранимой процедуры. Для обеспечения более высокой производительности необходимо указывать тип команды в свойстве CommandType.
property CommandTimeout: Integer;
Указывает количество времени в секундах, после которого команда будет отменена, умолчанию 30 с.
property CommandType: TCommandType;
Определяет тип команды, заданной в свойстве CommandText. Возможные значения:
  • mdUnknown - тип заданной команды неизвестен;
  • cmdText - текстовое представление команды или хранимой процедуры;
  • cmdTable - в свойстве CommandText указано имя таблицы, образующей обрабатываемый набор;
  • cmdStoredProc - в свойстве CommandText указано имя хранимой процедуры, создающей набор данных;
  • cmdFile - в свойстве CommandText указано имя файла с сохраненным набором записей;
  • cmdTableDirect - в свойстве CommandText указано имя таблицы.
property Connection: TADOConnection;
Используется для указания компоненты TADOConnection, предназначенной для соединения с базой данных.
property ConnectionString: WideString;
Используется для указания подробной информации о соединениях с источником данных. Применяется вместо использования компонента TADOConnection.
property CursorLocation: TCursorLocation;
Указывает местоположение механизма управления курсором.
  • clUseClient - клиентский курсор. Позволяет выполнять любые операции с данными, в том числе не поддерживаемые сервером;
  • clUseServer - серверный курсор. Реализует только возможности сервера, но обеспечивает быструю обработку больших массивов данных.
property CursorType: TCursotType;
Указывает тип используемого курсора в наборе данных ADO. Возможные значения:
  • ctDynamic - позволяет видеть добавления, изменения и удаления, сделанные другими пользователями, а также позволяет делать все типы перемещения по записям, не полагаясь на закладки;
  • ctKeyset - ведет себя подобно динамическому курсору, за исключением того, что нельзя видеть записи, которые добавляют другие пользователи, а также не возможно получить доступ к записям, которые удаляются другими пользователями. Изменения данных, выполненные другими пользователями будут видимы. Этот тип всегда поддерживает закладки и поэтому позволяет все типы перемещения по записям);
  • ctStatic - обеспечивает статическую копию набора записей, чтобы использовать её для поиска данных и генерации отчётов. Данный тип всегда разрешает закладки и поэтому позволяет все типы движения по записям. Добавления, изменения, или удаления другими пользователями не будут видимы.
  • ctOpenForwardOnly - ведет себя идентично динамическому курсору, за исключением того, что позволяет пролистывать набор данных по записям только вперед. Это увеличивает производительность в ситуациях, где необходимо делать только один проход по набору записей.
Если курсор расположен на клиенте (CursorType = clUseClient), то для него доступен только один тип - ctStatic.
property ExecuteOptions: TExecuteOptions;
Используется для установки режимов, влияющих на выполнение команды, указанной в свойстве CommandText. Возможные значения:
  • eoAsyncExecute - асинхронное выполнение команды;
  • eoAsyncFetch - асинхронное выполнение команды на обновление набора данных;
  • eoAsyncFetch-NonBlocking - асинхронное выполнение команды на обновление набора данных без установки блокировки;
  • eoExecuteNoRecords - команда или хранимая процедура ничего не возвращает; если получены какие-то строки, то они игнорируются;
property Filter: String;
Используется для указания критерия отбора данных в набор.
property Filtered: Boolean;
Используется для активации текущего фильтра.
property FilterGroup: TFilterGroup;
Используется для указания фильтра на основе статуса обновленных строк. Возможные значения:
  • fgUnassigned - показывает, что фильтр не указан;
  • fgPendingRecords - фильтр показывает строки, которые были изменены, но еще не обновлены (метод UpdateBatch) или отменены (метод CancelBatch);
  • fgNone - отключает фильтр, и все записи становятся видимыми;
  • fgAffectedRecords - фильтр показывает последние обновленные записи;
  • fgFetchedRecords - фильтр показывает записи в текущем кэше обновления. Это строки, полученные при последнем запросе;
  • fgPredicate - фильтр показывает удаленные записи;
  • fgConflictingRecords - фильтр показывает строки, которые были изменены, но не были обновлены из-за ошибок;
property IndexFieldNames: String;
Содержит список имен столбцов, используемых в текущем индексе.
property IndexName: String;
Содержит имя текущего индекса.
property LockType: TADOLockType;
Указывает режим блокировки записей для операций редактирования. Для того чтобы установка блокировки сработала, свойство LockType должно быть обязательно модифицировано до открытия набора данных. Возможные значения:
  • ltOptimistic - оптимистическая блокировка; блокирует запись только в том случае, если она была физически изменена. Этот тип блокировки полезен, если существует очень маленький шанс того, что второй пользователь может модифицировать строку в интервале между тем,когда курсор открыт, и когда строка окончательно модифицирована. Текущие значения в строке сравниваются со значениями, полученным когда строка была последний раз выбрана;
  • ltPessimistic - блокирует каждую запись, до тех пор пока она находится в процессе редактирования. Эта опция заставляет ADO устанавливать исключительную блокировку на строку, когда пользователь делает любое изменения в любом столбце записи;
  • ltReadOnly - не позволяет редактировать данные. Полезна в тех случаях, когда приложение должно временно предотвратить изменение данных, при этом чтение данной записи разрешено;
  • ltBatchOptimistic - используется в клиентских курсорах. Наборы записей с данным курсором обновляются локально, и все изменения отправляются в базу данных пакетами.
property MarshalOptions: TMarshalOption;
Управляет обменом данных клиента с сервером. Возможные значения:
  • moMarshalAll - разрешает возврат серверу всех записей набора данных;
  • moMarshalModifiedOnly - обеспечивает возврат только модифицированных клиентом записей.
property Sort: WideString;
Используется для указания порядка сортировки. Содержит список из пар из имен полей и направления сортировки (ASC, DESC).
property Parameters;
Используется для установки значений параметров, необходимых для выполнения SQL-запроса или же хранимой процедуры.
property Prepared: Boolean;
Значение данного свойства нужно установить в True, перед вызовом команды, для указания того, что скомпилированная версия данной команды перед выполнением должна быть сохранена для ускорения последующих вызовов.

    На следующем шаге мы рассмотрим компоненты TADOTable, TADOQuery и TADOStoredProc.




Предыдущий шаг Содержание Следующий шаг