Лекция N6.Механизмы доступа к БД с использованием технологий ODBC и ADO Доступ к БД через ODBC Если созданное с помощью С++ Builder приложение в процессе работы обращается к базам данных, оно, как правило, использует для этой цели библиотеку BDE (Borland Database Engine), основанную на технологии IDAPI (Integrated Database Application Program Interface). Эта библиотека устанавливается автоматически при установке С++ Builder. По умолчанию она устанавливается в каталог C:\Program Files\Borland\Common Files\BDE. Следует отметить, что файлы, входящие в состав библиотеки BDE, предназначены для использования не только приложениями, созданными с помощью С++ Builder, но и многими другими продуктами Borland (Visual dBase, Paradox, Delphi, Borland C++, IntraBuilder), созданными на их основе приложениями, а также офисными приложениями Corel (например, электронной таблицей Quattro Pro), генератором отчетов Crystal Reports (Seagate Software) . Поэтому при наличии нескольких использующих BDE приложений все 32-разрядные приложения (в том числе C++ Builder) используют установленную последней 32-разрядную версию BDE. В этом случае по умолчанию программа установки C++ Builder предложит поставить BDE в каталог, где установлена уже используемая версия BDE. Рис.1. Связь приложений с источниками данных с помощью BDE BDE обеспечивает для созданных приложений: непосредственный доступ к локальным базам данных (dBase, Paradox, текстовые файлы) доступ к SQL-серверам (Oracle, Sybase, MS SQL Server, InterBase, Informix, DB2) с помощью драйверов Borland SQL Links доступ к любым источникам данных, имеющим драйвер ODBC (Open DataBase Connectivity), например, к файлам электронных таблиц (Excel, Lotus 1-2-3), серверам баз данных, не имеющим драйверов SQL Links (например, Gupta/Centura) создание приложений клиент-сервер, использующих разнородные данные высокую производительность при работе с плоскими таблицами использование SQL (Structured Query Language - язык запросов к серверным СУБД), в том числе при работе с локальными данными изоляцию приложения от средств языковой поддержки изоляцию приложения от конфигурации системы и сети Утилита настройки BDE При возникновении необходимости доступа к данным в большинстве случаев для их источника (как правило, это какая-либо конкретная база данных) создается псевдоним (alias), имя которого используется приложением. Параметры этого и других псевдонимов, а также параметры настройки драйверов баз данных содержатся в файле idapi32.cfg, расположенном в том же каталоге, что и файлы BDE. Для изменения содержания этого файла, а также значений соответствующих этой библиотеке ключей реестра Windows 95 и Windows NT используется утилита конфигурации BDE - BDECFG32.EXE. Утилита конфигурации состоит из одной формы, содержащей блокнот из шести страниц. Страница Drivers содержит параметры доступа к различным типам данных. Страница Aliases содержит сведения о псевдонимах источников данных, к которым посредством BDE обращаются приложения, установленные на данном компьютере. Страница System содержит параметры настройки работы самой библиотеки BDE, связанные с использованием памяти, сетевого окружения и других ресурсов, доступных использующим BDE приложениям. Эти параметры содержатся в реестре Windows 95 (или Windows NT). Страницы Date, Time, Number содержат правила отображения в приложениях календарных дат, времени и числовых данных в соответствии с правилами, принятыми в той или иной стране. Настройка драйверов баз данных Для настройки драйверов баз данных используется страница Drivers утилиты настройки BDE. В левой части этой страницы имеется список доступных для BDE драйверов, куда входят драйверы для dBase и Paradox, установленные на данном компьютере драйверы SQL Links для доступа к серверным СУБД, а также имена ODBC-источников данных, созданные с помощью 32-разрядного администратора ODBC панели управления Windows (рис. 5.2). Рис. 2. Настройка драйверов баз данных При нажатии на кнопку New ODBC Driver можно добавить в список новый ODBCисточник данных (перед этим, естественно, следует установить соответствующий ODBCдрайвер и описать источник данных с помощью ODBC-администратора в панели управления Windows). Можно также удалить ODBC-драйвер из файла конфигурации BDE (Delete ODBC Driver). В правой части страницы Drivers указаны параметры выбранного в списке драйвера. При настройке драйверов следует заменить параметры, указанные по умолчанию, на значения, специфические для выбранного источника данных (например, языковый драйвер, правила обработки запросов, имя сервера и базы данных, тип сетевого протокола для доступа к серверу, номер версии). Эти наборы параметров различны для различных драйверов баз данных . Создание и настройка псевдонимов баз данных Для доступа приложений к данным средства разработки Borland используют механизм псевдонимов, описывающих доступ к конкретным источникам данных. Создать описание нового источника данных можно, нажав кнопку New Alias в левой части окна (рис. 6.3, 6.4). Рис. 3. Выбор псевдонима БД и установка параметров После этого в появившейся диалоговой панели следует ввести имя-псевдоним для этого источника и выбрать нужный драйвер из предложенного списка (того, что определен на странице Drivers). Имя STANDARD в этом случае соответствует таблицам dBase, Paradox и текстовым файлам (в формате CSV - Comma Separated Value). Рис. 4.Создание нового псевдонима БД В правой части страницы Aliases содержатся параметры конкретных источников данных, которые можно модифицировать, заменяя значения по умолчанию (в том числе унаследованные с предыдущей страницы), например, имена каталогов, серверов, имя пользователя по умолчанию, языковый драйвер и др. Системные настройки BDE Страница системных настроек позволяет указать параметры системы используемые BDE и хранящиеся в реестре Windows (рис. 5, табл. 1). и сети, Рис. 5. Страница System утилиты конфигурации BDE. Таблица 1. Параметры системы и сети, используемые BDE. Параметр Описание Значение умолчанию VERSION версия BDE LOCAL SHARE Если этот параметр равен true, можно FALSE использовать одни и те же данные приложениями, использующими BDE, и приложениями, не использующими BDE MINBUFSIZE Минимальный размер буфера оперативной памяти для кэширования данных из БД. Возможные значения - от 32 до 65535 Кб, но не более, чем объем доступной Windows оперативной памяти MAXBUFSIZE Максимальный размер буфера оперативной 2048 памяти для кэширования данных из БД. Должен быть выше, чем MINBUFSIZE, но не более, чем объем доступной Windows оперативной памяти. Должен быть кратен 128. по LANGDRIVER Языковый драйвер, соответствующий национальной версии операционной системы MAXFILEHANDLES Максимальное число файлов, открываемых 48 BDE. Может принимать целые значения от 5 до 256 SYSFLAGS Внутренний параметр BDE LOW MEMORY USAGE Максимально допустимый объем основной 32 LIMIT памяти, используемый BDE AUTO ODBC если этот параметр принимает значение FALSE true, используются все ODBC-источники из файла ODBC.INI DEFAULT DRIVER драйвер, используемый первым, если тип БД - FILE, и имя таблицы не имеет расширения. SQLQRYMODE Метод исполнения запросов к серверам. NULL Может принимать значения NULL, SERVER, LOCAL SHAREDMEMSIZE Максимальный размер для разделяемой 2048 оперативной памяти SHAREDMEMLOCATION Предпочтительный адрес для размещения E000 (Windows разделяемой области памяти. 95) 7000(Windows NT) Настройка параметров отображения даты, времени и чисел Страница Date позволяет указать параметры отображения дат (см. табл.2). Таблица 2. Параметры настройки отображения дат Параметр Описание Значение по умолчанию SEPARATOR Символ-разделитель числа, месяца и года Значение, содержащееся в настройках панели управления Windows 95/NT MODE Параметр, определяющий порядок Значение, содержащееся в следования числа. месяца и года. Может настройках панели принимать значения: 0(MDY), 1( DMY), управления Windows 95/NT 2(YMD). FOURDIGITYEAR Параметр, определяющий отображаемое TRUE число цифр года. Может принимать значения: TRUE (4 цифры), FALSE (2 цифры) YEARBIASED Параметр, определяющий, прибавлять TRUE или нет 1900 к значению года, если предыдущий параметр равен FALSE LEADINGZEROM Параметр, определяющий, указывать ли FALSE лидирующие нули перед значением месяца, если оно является однозначным числом. LEADINGZEROD Параметр, определяющий, указывать ли FALSE лидирующие нули перед значением числа, если оно является однозначным числом. Страница Time позволяет указать параметры отображения времени (см. табл. 3). Таблица 3. Параметры настройки отображения времени Параметр Описание Значение умолчанию TWELVEHOUR Параметр, определяющий интервал часов: 0-12 (TRUE) или 0-24 (FALSE) по отображения TRUE AMSTRING Символьная строка для указания первой половины AM дня, если TWELVEHOUR=TRUE PMSTRING Символьная строка для указания второй половины PM дня, если TWELVEHOUR=TRUE SECONDS Параметр, определяющий, указывать ли секунды в TRUE значении времени MILSECONDS Параметр, определяющий, указывать миллисекунды в значении времени . ли FALSE Страница Number позволяет указать параметры отображения числовых данных (табл. 4). Таблица 4. Параметры настройки отображения чисел Параметр Описание Значение по умолчанию DECIMALSEPARATOR Символ, отделяющий Значение, содержащееся в дробную часть числа настройках панели управления Windows 95/NT THOUSANDSEPARATOR Символ, отделяющий друг Значение, содержащееся в от друга "тройки" настройках панели управления разрядов в многозначных Windows 95/NT числах DECIMALDIGITS Максимальное число 2 десятичных разрядов числа, полученного при преобразовании символьной строки LEADINGZERON Параметр, определяющий, TRUE указывать ли нуль перед дробной частью числа, чье абсолютное значение меньше единицы Немного о средствах языковой настройки BDE Средства языковой настройки BDE представляют собой набор так называемых языковых драйверов, устанавливающих набор символов, используемых в данных, и порядок алфавитной сортировки для используемого языка. Языковые драйверы Borland существуют для большого количества языков, в том числе и для русского. При описании параметров драйвера баз данных (страница Drivers) следует указывать языковый драйвер, предлагаемый для баз данных этого типа по умолчанию. При создании нового псевдонима (страница Aliases) следует указывать, какой языковый драйвер используется в базе данных, иначе будет использоваться языковый драйвер, установленный по умолчанию для данного драйвера баз данных. Отметим, что в общем случае языковая настройка баз данных и использующих их приложений включает в себя не только настройку параметра LANGDRIVER на страницах Drivers, Aliases и System. Некоторые СУБД имеют свои средства языковой настройки, причем эти средства могут быть многоуровневыми. Например, в случае использования какой-либо серверной СУБД может потребоваться, помимо настройки BDE, настройка языковых параметров сервера, настройка аналогичных параметров клиентской части или даже выбор соответствующей языковой версии сервера. Подробнее эти проблемы будут рассмотрены чуть позже. Помимо этого, существует проблема, связанная с различиями DOS- и Windows-кодировок для русского языка. Языковые драйверы BDE существуют для обеих кодировок. Какой из них выбрать, зависит от многих факторов: наличия и объема унаследованных данных, наличия других приложений, использующих эти же данные и др. Например, разумно, используя таблицы формата dBase III совместно с приложениями для DOS, созданными на Clipper, применить DOS-кодировку для этих таблиц. ODBC-источники При работе с ODBC-источниками требуется настройка следующих параметров: Параметр Описание VERSION Внутренний параметр BDE Значение по умолчанию 1.0 TYPE Идентификатор ODBC-источника FILE DLL Имя 16-разрядной динамической библиотеки, содержащей драйвер IDODBC16.DLL DLL32 Имя 32-разрядной динамической библиотеки, содержащей драйвер IDODBC32.DLL ODBC DRIVER ODBC-драйвер для соединения с сервером DRIVER FLAGS Внутренний параметр BDE USER NAME Имя пользователя в диалоге ввода пароля ODBS DSN Имя источника данных, описанного в администраторе ODBC OPEN MODE Параметр, определяющий, в каком режиме READ/WRITE открываются таблицы - READ/WRITE eee READ ONLY LANGDRIVER Языковый драйвер, определяющий набор символов и порядок алфавитной сортировки SCHEMA CASHE SIZE Число таблиц, чья структура кэшируется. Возможные значения - от 0 до 32 SQLQRYMODE Метод выполнения запросов. Возможные значения: LOCAL - запрос обрабатывается только клиентским приложением, SERVER - запрос выполняется только сервером, NULL (пустая строка) - запрос передается клиенту, если сервер не может его обработать. 'ascii'ANSI 8 NULL SQLPASSTHRU Определяет режим совместного использования одного и SHARED MODE того же псевдонима направляемыми на сервер и AUTOCOMMIT локальными запросами: NOT SHARED - совместное использование запрещено, SHARED AUTOCOMMIT совместное использованием разрешено с автоматическим завершением транзакций, SHARED NOAUTOCOMMIT - совместное использованием разрешено с завершением транзакций по правилам сервера. TRACE MODE Численное значение, определяющее уровень вывода отладочной информации. SCHEMA CACHE TIME Время нахождения информации о структуре таблиц в -1 кэше в секундах от 1 до 2147483647. Другие значения: 1 - до закрытия БД, 0 - информация не кэшируется BATCH COUNT Число записей, помещаемых в пакет до завершения транзакции Число записей, умещающихся в 32 К. MAX ROWS Максимальное число записей, которые драйвер может доставить на рабочую станцию при выполнении одиночного SQL-запроса -1 (нет ограничений) ROWSET SIZE Число записей, доставляемых в одном блоке данных (поддерживается не всеми ODBC- драйверами). 20 При создании псевдонимов баз данных на страницу Aliases по умолчанию заносятся параметры со страницы Drivers для соответствующего ODBC-драйвера. При необходимости многие из них можно переопределить. Ряд ODBC-источников требует указания параметра PATH - пути к каталогу, где находится база данных. Следует обратить внимание на то, что перед описанием ODBC-источника в файле конфигурации BDE обязательно нужно установить соответствующий ODBC-драйвер и описать соответствующий источник данных в панели управления Windows 95/NT, используя соответствующий ODBC-администратор. При этом следует обратить внимание на некоторую терминологическую неувязку. Дело в том, что ODBC-драйвер с точки зрения BDE, создаваемый при нажатии кнопки New ODBC Driver на странице Drivers утилиты конфигурации BDE, на самом деле представляет собой указание не на реальный ODBC-драйвер, установленный в панели управления Windows, а на конкретный источник данных, доступ к которому осуществляется с помощью реального ODBC-драйвера (с точки зрения панели управления). При этом следует еще создать и соответствующий псевдоним базы данных, что окончательно сбивает с толку некоторых начинающих пользователей. Таким образом, последовательность действий при осуществлении доступа к ODBC-источникам следующая: Установить нужный ODBC-драйвер (и, возможно, соответствующий ODBCадминистратор для панели управления Windows). Описать с помощью ODBC-администратора необходимый источник данных в панели управления. Запустить утилиту конфигурации BDE и нажать кнопку New ODBC Driver на странице Drivers. Придумать и ввести имя так называемого ODBC-драйвера с точки зрения BDE Выбрать "настоящий" ODBC-драйвер из установленных в операционной системе Выбрать имя источника данных Нажать OK. В списке драйверов появится новый так называемый ODBC-драйвер (с точки зрения BDE). Перейти на страницу Aliases и создать псевдоним, связанный со вновь созданным драйвером с точки зрения BDE. Рис. 6. Описание нового ODBC-драйвера "с точки зрения BDE". Отметим, что в версии BDE, поставляемой с Delphi 3.0, вся эта терминологическая путаница ликвидирована, а все описанные в реестре Windows источники данных добавляются в список псевдонимов, и тем самым ликвидируется необходимость выполнения описанной выше инструкции. Остается надеяться, что в следующей версии C++ Builder доступ к ODBC-источникам упростится таким же образом Для корректного отображения русских букв и установки правильного порядка алфавитной сортировки можно попытаться использовать какой-либо из русскоязычных драйверов dBase или Paradox. Однако следует помнить, что некоторые ODBC-драйверы имеют свои процедуры настройки, которые могут, в частности, включать опцию перекодировки OEM>ANSI (т.е. DOS->Windows). Кроме того, если доступ через ODBC осуществляется к какой-либо серверной СУБД, следует обратить внимание на возможности языковой настройки сервера и клиентской части. Использование технологии ADO Компонент DataBaseAccess предназначен для обеспечения доступа к информации, хранимой в базах данных, и использует ActiveXDataObjects (ADO). Данный раздел посвящен технологии ADO и возможностям ее использования в рамках активных серверных страниц. Технология ADO позволяет писать клиентские приложения для доступа и манипулирования данными, хранящимися в БД. Основные преимущества ADO: простота использования, высокая скорость, требуемый малый объем верхней памяти и дискового пространства. Здесь мы рассмотрим одну из реализаций ADO - ADODB, оптимизированную для работы с MicrosoftOLEDB, включая MicrosoftODBC для OLEDB. Объекты Connection, Recordset и Command - основные элементы ADO для взаимодействия с данными. Каждый из перечисленных объектов имеет коллекцию Properties. Структурная модель объектов ADO приведена ниже на рисунке. Рассмотрим по порядку все три объекта. Объект Connection Объект Connection представляет соединение с источником данных OLEDB. Объекты Connection можно создавать независимо от ранее созданных объектов. Объект Connection представляет собой выделенный сеанс связи с источником данных. В случае архитектуры клиент/сервер этот объект может выступать эквивалентом соединения с сервером. Используя коллекции, методы и свойства объекта Connection, можно выполнять следующее: конфигурировать соединение перед его ConnectionString, ConnectionTimeout и Mode; с помощью свойства DefaultDatabaseуказывать базу данных, которая будет использоваться по умолчанию; устанавливать уровень изоляции для транзакций с помощью свойства IsolationLevel; выбирать OLEDB-провайдера, используя свойство Provider; устанавливать, а затем разрывать физическое соединение с источником данных, используя методы Openи Close; выполнять команды для установленного соединения, используя метод Execute, и управлять их выполнением с помощью свойства CommandTimeout; установкой с помощью свойств управлять транзакциями, включая вложенные транзакции, если провайдер поддерживает их, с использованием методов BeginTrans, CommitTrans и RollbackTrans и свойства Attributes; обрабатывать ошибки, возвращаемые источником данных, используя коллекцию Errors; с помощью свойства Version определять версию ADO. Коллекция Errors содержит в себе все объекты Error, которые относятся к одиночным операциям. Любая операция ADO может генерировать одну или несколько ошибок. При появлении ошибки один или несколько объектов Error могут быть помещены в коллекцию Errors. Когда другая операция генерирует ошибку, то коллекция Errors очищается, и в нее могут быть помещены новые объекты Error. Для принудительной очистки коллекции Errors используется метод Clear. Некоторые свойства и методы возвращают предупреждения, которые не прерывают выполнение программы. Для получения детального описания каждой ошибки можно воспользоваться следующими свойствами: Description- содержит описание возникновения ошибки; Number - содержит номер ошибки (число типа Long); Source - идентифицирует объект, породивший ошибку; это особенно полезно, когда имеется несколько объектов Error в коллекции Errors; HelpFile и HelpContext - указывают на файл и раздел помощи MicrosoftWindows описания ошибки, соответственно; SQLState и NativeError- принимают информацию от источника данных ODBC. В таблице приведены три примера используемых ошибок: Имя константы Номер ошибки Описание AdErrInvalidArgument 3001 Неправильный аргумент AdErrNoCurrentRecord 3021 Нет текущей записи для операции AdErrIllegalOperation Неправильная операция 3219 Объект Command Объект Command можно создавать независимо от ранее созданных объектов Connection, определив его свойство ActiveConnection в строке команды. Когда ADO создает объект Connection, он не устанавливает соответствие между этим объектом и переменными объекта. Кроме того, когда ставится в соответствие составной объект Command соединению, необходимо отдельно создать и открыть объект Connection; это назначит свойство для переменной объекта. Если не установить свойство ActiveConnectionобъекта Command в переменную объекта, то ADO создаст новый объект Connection для каждого объекта Command, даже при использовании той же строчки. Объекты Command используются для получения записей и создания объектов Recordset, для выполнения больших операций или для изменения структуры БД. Используя коллекции, методы и свойства объекта Command можно производить следующие действия: указывать на установленное соединение и объект Command с помощью свойства ActiveConnection; определять тип команды (например, SQL-предложение), используя свойство CommandText; устанавливать время задержки выполнения команды, используя свойство CommandTimeout; с помощью свойства CommandType определять тип команды, описанной в свойстве CommandText для определения приоритета выполнения; с помощью свойства Preparedопределять, установлен ли приоритет выполнения команд; с помощью коллекции Parametersуправлять аргументами, передаваемыми провайдеру и получаемыми от него; выполнять команды и возвращать объект Recordset, используя метод Execute. Объект Command содержит коллекцию Parameters. Используя метод Refresh коллекции Parameters можно получить информацию о параметрах хранящихся процедур или для параметризации запроса, определенным в объекте Command. Если не определен объект Parameter и обращение идет к коллекции Parameters перед вызовом метода Refresh, то ADO автоматически вызывает этот метод и заполняет коллекцию Parameters. Зная имена свойств параметров хранимой процедуры или параметризированного запроса, который нужно вызвать, можно создать объекты Parameter с соответствующими свойствами и, используя метод Append, добавить их в коллекцию Parameters. Это позволит устанавливать и возвращать значения параметров без вызова метода Refreshдля коллекции Parameters для получения от провайдера информации о параметрах. Для удаления объектов Parameter из коллекции Parameters используется метод Delete. Используя различные коллекции, методы и свойства объектов Parameter можно выполнять следующее: устанавливать или возвращать имя параметра, используя свойство Name; устанавливать или возвращать значение параметра, используя свойство Value; устанавливать или возвращать характеристики параметров, используя свойства Attributes и Direction, Precision, NumericScale, Size и Type; используя метод AppendChunk можно посылать параметру длинные двоичные или текстовые данные. Для обращения к объекту Parameter по его порядковому номеру или имени можно использовать следующие варианты: command.Parameters(0) command.Parameters("name") command(0) command("name") command![name] Объект Recordset Объект Recordset представляет полный набор записей таблицы данных или результат выполненной команды. В любое время объект Recordset ссылается только на одну запись из текущего набора. Объекты Recordset можно создавать независимо от ранее созданных объектов Connection путем указания метода Open в строке команды. Когда ADO создает объект Connection, он не устанавливает соответствие между этим объектом и переменными объекта. Кроме того, при открытии составного объектаRecordset нужно отдельно создать и открыть объект Connection; это назначит свойство для переменной объекта. Если не используется переменная объекта, когда открывается объект Recordset, то ADO создает новый объект Connection для каждого нового объекта Recordset, даже если пропущена эта операция. Объекты Recordset используют для управления данными на уровне записей. При использовании ADO, почти всегда управление данными происходит с помощью объектов Recordset. Все объекты Recordset строятся с использованием записей (строк) и полей (столбцов). Возможно использование четырех различных типов курсора при открытии объекта Recordset: 1. Dynamiccursor- позволяет просматривать добавления, изменения и удаления, сделанные другими пользователями; позволяет любые виды перемещений внутри Recordset, которые не используют закладок; разрешает использовать закладки, если провайдер их поддерживает; 2. Keysetcursor - ведет себя как и Dynamiccursor, за исключением того, что предотвращает просмотр записей, добавленных другими пользователями, и защищает от доступа к записям, удаленным другими пользователями из набора Recordset; всегда поддерживает закладки и любые типы перемещений внутри Recordset; данные, измененные другими пользователями, будут видны; 3. Staticcursor - обеспечивает статическую копию набора записей, используемую для поиска данных или генерации отчета; добавления, изменения и удаления других пользователей здесь не видны; 4. Forward-onlycursor - ведет себя идентично Staticcursor за исключением того, что позволяет просматривать записи только в одном направлении - вперед. Это улучшает выполнение в случае когда нужно "пробежаться" по всем записям только один раз. Установить необходимый тип курсора можно с помощью свойства CursorType объекта Recordset или указать одноименный аргумент при вызове метода Open. Если пользователь не определил тип курсора, то ADO по умолчанию открывает курсор типа Forwardonlycursor. Пользователь может создавать столько объектов Recordset, сколько ему нужно. Различные объекты Recordset могут обращаться к одним и тем же таблицам и записям, не конфликтуя при этом. При создании объекта Recordset текущая запись отмечается как первая запись, а свойства BOF и EOF устанавливаются False. Если не существует ни одной записи, то свойство RecordCount устанавливается в 0, а свойства BOF и EOF устанавливаются True. Наряду с методом Moveможно использовать методы MoveFirst, MoveLast, MoveNext и MovePrevious, а также свойства AbsolutePosition, AbsolutePage и Filter для переопределения текущей записи. При использовании курсора типа Forward-onlycursor можно пользоваться только методом MoveNext. При использовании метода Move для обращения к каждой записи, нужно использовать свойства BOFи EOF для определения достижения начала или конца объекта Recordset. Объект Recordset поддерживает два способа обновления данных: прямое и пакетное. При прямом обновлении все изменения в данных записываются в основной источник данных сразу же после вызова метода Update. В случае пакетного обновления, провайдер сначала кэширует все произведенные изменения, а затем одним вызовом метода UpdateBatch пересылает их в базу данных. После вызова метода UpdateBatch для проверки возможного конфликта данных используется свойство Status. Заметим, что пакетный метод обновления можно использовать только при двух типах курсора: Keysetcursor и Staticcursor. Коллекция Fields содержит все объекты Field объекта Recordset. Каждый объект Field соответствует столбцу во множестве Recordset. Используя свойство Value объекта Field, можно устанавливать или возвращать данные для текущей записи. Используя коллекции, методы и свойства объекта Field, можно выполнять следующие действия: возвращать имя поля с помощью свойства Name; просматривать или изменять данные во множестве Recordset с помощью свойства Value; возвращать основные характеристики поля, используя свойства Type, Precision и NumericScale; возвращать объявленный размер поля с помощью свойства DefinedSize; возвращать действительный размер данных во взятом поле с помощью свойства ActualSize; используя свойство Attribute, определить типы функций, которые можно выполнить с данным полем; с помощью методов AppendChunk и GetChunk, управлять значениями полей, содержащих длинную двоичную или текстовую информацию; используя свойства OriginalValue и UnderlyingValue, разрешать разногласия в значениях полей при пакетном обновлении данных. Для обращения к объекту Field в коллекции по порядковому номеру или имени используются следующие способы: recordset.Fields(0) recordset.Fields("name") recordset(0) recordset("name") recordset![name] Коллекция Properties Объекты ADO имеют два типа свойств: встроенные и динамические. Встроенные свойства - это свойства, реализованные в ADO и доступные для любого нового объекта. Кроме того, встроенные свойства не являются объектами Property в коллекции Properties, поэтому пользователь может изменять их значения, но не может изменять их характеристики или удалять их. Многие провайдеры OLEDB предоставляют дополнительные свойства объектов. Такие дополнительные свойства называются динамическими и являются объектами Property в коллекции Properties. Объекты Property имеют четыре встроенных свойства: свойство Name - строка, уникально идентифицирующая динамическое свойство; свойство Type- целое число, определяющее тип данных динамического свойства; свойство Value - переменная, содержащая значение динамического свойства; свойство Attribute - значение типа Long, определяющее характеристики динамического свойства. Каждый объект Property соответствует какой-либо характеристике объекта ADO. Для обращения к объекту Property из коллекции по имени используется следующий способ: object.Properties("name") Для обращения, например, к свойствуValue объекта Property используется такое же выражение. По контексту обращения определяется: обращаетесь ли Вы к самому объекту Property или к свойству Value объекта Property.