Лекция 3: 2 Для создания возможности использования объектов файловой системы нужно подключить библиотеку DLL, содержащую эти объекты: меню Разработать > Ccылки > Microsoft Scriptlet Component (сделать щелчок на соответствующем элементе управления CheckBox). Не могу найти меню Разработать (Develop)>Links и т.д. |
Базы данных
ADO
Общие сведения
Модель ADO - ActiveX Data Objects разработанная корпорацией Microsoft представляет собой семейство объектов, используемых для работы с источниками данных.
OLE DB - основа универсальной модели доступа к данным представляет собой набор интерфейсов COM, которые обеспечивают доступ программ к данным. Способ использования приложением функциональных возможностей ADO частично определяется наличием поставщика OLE DB для данных. ADO разработан для работы с OLE DB, если поставщик OLE DB недоступен, можно использовать ADO для непосредственного соединения с помощью драйвера ODBC.
Наиболее простое средство реализации ADO в приложениях - использование элемента управления ADO Data.
Когда ADO связывается с базой данных, работа происходит через сетевую библиотеку. Выбор сетевой библиотеки определяется поставщиком и конфигурацией системы.
Объекты
-
Объект Connection - соединение позволяет приложениям установить связь с источником данных. После этого объект Connection можно употреблять для исполнения SQL-запросов, он может также использоваться объектами Command и Recordset. Для установления соединения с источником данных используется метод Open, для закрытия соединения - метод Close.
Свойства объекта Connection:
- ConnectionTimeout. Указывает время ожидания выполнения операции установки связи с базой данных в секундах. По истечению заданного интервала генерируется ошибка,
- ConnectionString. Предоставляет информацию, необходимую для установки связи с базой данных,
- CursorLocation. Указывает позицию курсора,
- DefaultDatabase. Указывает базу данных, заданную для данного объекта Connection по умолчанию,
- Mode. Определяет права доступа на запись и чтение данных. Присвоить значение этому свойству можно только до установки связи с источником данных. В случае с удаленными службами данных его значение должно быть adModeUnknown,
- State. Возвращает текущее состояние связи - значение adStateClosed, adStateOpen, adStateExecuting, adStateConnecting.
Методы объекта Connection:
- BeginTrans. Используется, чтобы начать транзакцию,
- Cancel. Прекращает выполнение текущей асинхронной операции,
- CommitTrans. Фиксирует все изменения в объекте Connection,
-
Execute. Выполняет команду, представленную в виде объекта Command. Формат обращения к этому объекту имеет вид:
Connection.Еxecute CommandText, RecordsAffected, Options здесь: CommandText - это выражение SQL, имя таблицы, имя хранимой процедуры или иной текст команды. RecordsAffected возвращает количество записей, обработанных командой. В качестве значения параметра Options используют константу adExecuteSync, чтобы стартовать асинхронную операцию, или adFetchAsync, указывающее, что строки, остающиеся после заполнения буфера, должны возвращаться асинхронно,
-
Open. Устанавливает связь с источником данных. При использовании удаленных служб данных связь не устанавливается, пока не открыт набор записей Recordset. Формат обращения к методу Open:
Сonnection.Open ConnectionString, UserID, Password, Option
Аргументы UserID и Password задают соответственно учетную запись и пароль пользователя. Значение аргумента Option может быть установлено равным константе adAsyncConnect, чтобы установка связи происходила асинхронно. Все аргументы являются необязательными
, - OpenSchema. Возвращает информацию о схеме базы данных, например, о структуре таблицы,
- RollbackTrans. Отменяет все изменения в текущем объекте Connection,
-
Объект Command.Объект Command используется для передачи команд в источник данных. Для источников данных типа SQL Server состоят из динамических команд SQL, подготовленных команд SQL или вызовов хранимых процедур (Хранимая процедура предствляет собой откомпилированное заранее семейство инструкций SQL и необязательных инструкций управления порядком выполнения, хранимое под некоторым именем и обрабатываемое как единое целое). Свойство Текст команды (CommandText) содержит саму команду, а метод Исполнить (Execute) ее стартует.
Некоторые свойства:
- ActiveConnection. Ассоциирует объект Command с объектом Connection,
- CommandText. Является текстовой строкой, содержащей команду, которая должна быть выполнена, например, инструкция языка SQL SELECT: acmd.CommandText = "SELECT * FROM empl"
- CommandTimeout. Указывает период времени в секундах, предоставленный команде на выполнение. Если значение данного поля равно 0, то время ожидания не ограничено. Значение по умолчанию - 30,
- CommandType. Описывает тип команды,
- Prepared. Является значением типа Boolean, указывающим, нужно ли перед выполнением команды ее скомпилировать,
-
State. Указывает текущее состояние объекта.
Методы объекта Command. У объекта Command есть три метода. Метод Execute используется для старта команд. Если команда возвращает строки таблицы, ее результат должен быть присвоен объекту Recordset: Set ars = acmd.Execute ars - объект типа Recordset, acmd - объект типа Command Метод Cancel используется для остановки выполнения текущей команды. Метод CreateParametеr используется для создания нового объекта Parameter: Set Parameter = command.CreateParameter (Name, Type, Direction, Size, Value)
-
Коллекция. Parameters и объект Parameter Коллекция Parameters представляет все параметры или аргументы запроса или сохраненной процедуры. У каждого объекта Parameter есть коллекция Parameters. Свойства объекта Parameter:
- Attributes. Описывает объект Parameter при помощи одной из следующих констант: adParamSigned - параметр принимает числовые значения со знаком, adParamNullable - параметр может принимать значение Null, adParamLong - объект может принимать значение двоичных или символьных данных очень большого размера через метод AppendChunk,
- Direction. Указывает направленность параметра, то есть определяет, является объект Parameter входным или выходным, или изменяемым параметром, или результатом выполнения хранимой процедуры базы данных,
- NumericScale. Является переменной типа Byte, указывающей количество десятичных знаков для представления значения числового параметра,
- Size. Указывает максимальный размер параметра в байтах,
- Type. Указывает тип объекта Parameter,
-
Value. Задает и возвращает значение объекта Parameter. Тип этого свойства - Variant.
Методы объекта Parameter: имеется один метод AppendChunk. Используемый формат: object.AppendChunk Data, здесь Data - данные, добавляемые к значению свойства Value объекта Parameter. При первом вызове этого метода данные не добавляются, они переписываются вместо старых данных. При последующих вызовах данные добавляются к концу существующих. Этот метод используется для размещения в объекте Parameter большого количества текстовой или двоичной информации.
-
Объект Recordset. Представляет набор записей той или иной базы данных либо набор записей, являющийся результатом выполнения определенной команды. Объект Recordset позволяет преходить от одной записи к другой, редактировать и удалять записи. В модели ADO для объектов Recordset применяются четыре различные типа курсора:
- динамический курсор. Позволяет произвольно перемещаться по записям объекта,
- индексный курсор. Аналогичен динамическому, но запрещает доступ к записям, добавленным или удаленным другими пользователями,
- статический курсор. Создает Объект Recordset, который допускает неограниченное перемещение по объекту, однако изменения, вставки и удаления записей, произведенные другими пользователями невидимы,
- однонаправленный курсор. Идентичен статическому курсору с той разницей, что по записям объекта можно двигаться только вперед.
Свойства объекта Recordset:
- AbsolutePosition. Возвращает или устанавливает абсолютный номер текущей записи. (Число типа Long, нумерация записей ведется с 1). Может также возвращать одну из следующих констант:
- AdPosBOF указывает, что достигнуто начало файла,
- AdPosEOF указывает, что достигнут конец файла,
- adPosUnknown указывает, что позиция текущей записи неизвестна,
- BOF. Будучи установленным True, указывает, что курсор указывает на начальную запись набора Recordset,
- Bookmark. Устанавливает или возвращает значение типа Variant, содержащее определенную позицию (положение текущей записи) в базе данных. С помощью закладки можно запомнить текущую позицию и впоследствии вернуться к ней,
- CacheSize. Устанавливает или возвращает количество локально буферируемых записей. Например, если установить значение этого свойства равным 20, то при открытии объекта Recordset в локальную память будет скопировано 20 записей. Чтобы в уже находящихся в буфере записях отобразились изменения, произведенные другими пользователями, нужно использовать метод Resync,
- CursorLocation. Устанавливает или возвращает размещение механизма курсора. Значение adUseServer указывает, что должен использоваться курсор, базирующийся на сервере. Значение adUseClient указывает, что курсор должен управляться локально,
- CursorType. Устанавливает или возвращает тип курсора. Может принимать значения: adOpenForwardOnly (однонаправленный), adOpenKeyset (индексный), adOpenDynamic (динамический), adOpenStatic (статический),
- EditMode. Возвращает режим обработки текущей записи,
- EOF. Если значение - True, то курсор находится в конце набора записей Recordset,
- Filter. Устанавливает или возвращает значение типа Variant, которое может содержать текстовую строку критерия отбора записей (например, "emp_Gender = "ж" OR emp_Salary > 8000" ), массив закладок или одну из констант. Для отмены действия условия отбора нужно присвоить этому свойству значение пустой строки "" или константу adFilterNone,
- LockType. Устанавливает или возвращает тип блокировки, присущий данной записи,
- MaxRecords. Ограничивает количество записей, предоставляемых по одному запросу,
-
PageSize. Позволяет разбить набор записей на логические страницы. Например, если вы хотите, чтобы на экране одновременно отображалось 20 записей, можно установить значение этого параметра равным 20. Можно пользоваться свойством AbsolutePage, для перехода на указанную страницу:
' задать 20 страниц и перейти на 3-ю ars.PageSize = 20 ars.AbsolutePage = 3
- PageCount возвращает количество страниц в базе данных,
- RecordCount. Возвращает количество записей в базе данных,
- Sort. Позволяет сортировать объект Recordset по любому полю или набору полей. Сортировка доступна, если значение свойства CursorLocation равно adUseClient. С помощью ключевого слова ASCENDING или DESCENDING может быть указан порядок сортировки. Например: ars.sort = "emp_gender", Ascending
- Source. Устанавливает и возвращает источник данных,
- State. Возвращает информацию о текущем состоянии объекта,
-
Status. Возвращает сведения о текущей записи в виде комбинации констант (табл. 4.8):
Таблица 4.8. Сведения о текущей записи в виде комбинации констант Константа Описание adRecOK Запись была обновлена успешно adRecNew Запись только что создана adRecModified Запись была изменена adRecDeleted Запись была удалена adRecUnmodified Запись не была изменена adRecInvalid Запись не была сохранена, поскольку закладка неверна adRecMultipleChanges Запись не была сохранена, т.к. сохранение затронуло бы несколько записей adRecPendingChanges Запись не была сохранена по причинам, связанным с отложенной вставкой adRecCanceled Запись не была сохранена, т.к. операция была отменена adRecCantRelease Новая запись не была сохранена из-за блокирования записей adRecConcurrencyViolation Запись не была сохранена, т.к. применялась оптимистическая стратегия параллельного доступа к данным adRecIntegrityViolation Запись не была сохранена, т.к. пользователь нарушил условие непротиворечивости данных adRecMaxChangesExceeded Запись не была сохранена, т.к. было слишком много незаконченных изменений adRecObjectOpen Запись не была сохранена из-за конфликта с открытым объектом хранения adRecOutOfMemory Запись не была сохранена, т.к. у компьютера закончились ресурсы свободной памяти adRecPermissionDenied Запись не была сохранена из-за недостаточности полномочий пользователя adRecSchemaViolation Запись не была сохранена, т.к. она нарушает структуру базы данных adRecDBDeleted Запись уже удалена из источника данных -
Методы объекта Recordset:
AddNew. Добавляет новую запись. Дополнительно можно указать значения полей записи. При этом имена полей и их значений указываются с помощью функции Array:ars.AddNew Array ("emp_salary", "emp_gender"), Array (55000, "m" )
- CancelBatch. Отменяет незавершенное пакетное обновление,
- CancelUpdate. Отменяет незавершенные изменения,
- Clone. Создает копию объекта Recordset со всеми сохраненными закладками,
- Delete. Удаляет текущую запись,
-
Find - поиск. Синтаксис обращения:
Find (criteria, SkipRows, searchDirection, start), здесь: criteria - допустимое выражение инструкции WHERE SQL (без самого ключевого слова WHERE ), например, "emp_gender = 'g""
Ключевое слово Like может применяться для поиска похожих текстовых строк, например: ars.find ("emp_name Like 'F_*").
Аргумент SkipRows указывает количество строк таблицы, которые необходимо пропустить, начиная с заданной позиции. Аргумент SearchDirection указывает направление поиска. С помощью аргумента start можно передать закладку, с которой нужно начинать поиск,
- Move. Позволяет переместить текущую позицию курсора,
- MoveFirst, MoveLast, MoveNext, MovePrevious. Методы позволяют установить текущую позицию на первую, последнюю, следующую и предыдущую соответственно,
- Requiry. Обновляет данные в объекте Recordset, выполняя запрос повторно,
- Resync. Обновляет данные в объекте Recordset, отображая изменения, произведенные другими пользователями,
-
Save. Сохраняет объект Recordset в виде файла. Если установлено какое-либо условие отбора, то сохраняются только записи, удовлетворяющие ему. Файл не закрывается до тех пор, пока не будет закрыт объект Recordset.
Синтаксис: Recordset.Save FileName, PersistFormat, здесь PersistFormat указывает формат файла.
- Supports. Указывает, обладает ли объект Recordset определенными функциональными возможностями,
- Update. Сохраняет изменения текущей записи. При перемещении от одной записи к другой программное обеспечение ADO автоматически вызывает метод Update,
- UpdateBatch. Сохраняет все пакетные изменения на диске.
-
Коллекция Fields и объект Field. У каждого объекта Recordset есть коллекция Fields, состоящая из объектов Field. Каждый объект Field представляет отдельное поле объекта Recordset. Объект Field содержит основную информацию о поле (значение, тип данных и размер). Каждый объект Field содержит коллекцию Properties.
-
Свойства объекта Field:
ActualSize. Возвращает количество байт, хранящихся в поле,
- Attributes. Описывает характеристики объекта. Используются некоторые константы, значение которых может принимать,
- adFldUpdatable. Объект Field может быть обновлен,
- adFldFixed. Объект Field содержит данные фиксированной длины,
- adFldNullable. Объект Field может содержать значение Null,
- adFldRowVersion. Объект Field содержит номер версии или отметку времени,
- DefinedSize. Содержит максимальный размер объекта Field (в байтах),
- Name. Содержит имя поля в базе данных или в команде выборки данных,
- OriginalValue. Содержит значение объекта Field, присущее ему до измеения соответствующего поля,
- Type. Возвращает константу, указывающую тип поля,
- UnderLyingValue. Возвращает текущее значение поля, хранящееся в базе данных,
-
Value. Устанавливает или возвращает текущее значение поля.
Методы объекта Field: у объекта Field есть два метода: AppendChunk и GetChunk, используемых для управления большими объемами двоичной или текстовой информации. Метод GetChunk используется для получения всей информации, хранящейся в объекте Field или ее части. С помощью метода AppendChunk можно добавить к полю новые данные.
-
-
Коллекция Properties и объект Propertу. У объектов Connection, Command, Recordset, Parameter и Field есть коллекция Properties, содержащая объекты Property. У объекта Property есть 4 свойства:
- Name. Устанавливает или возвращает имя свойства,
- Value. Устанавливает или возвращает значение свойства,
- Attributes. Устанавливает или возвращает значение, равное комбинации констант: adPropNotSupported (поставщик не поддерживает это свойство), adPropRequired (значение этого свойства должно быть указано до инициализации источника данных), adPropOptional (значение этого свойства не обязательно указывать до инициализации источника данных ), adPropRead (свойство доступно для чтения), adPropWrite (свойство доступно для записи),
- Type. Устанавливает или возвращает тип данных.
-
Коллекция Errors и объект Error. При возникновении ошибки поставщика данных, содержимое коллекции удаляется и в коллекцию помещается один или несколько новых объектов Error. Некоторые сообщения поставщика данных добавляются к коллекции Errors, не приостанавливая выполнения программы. При каждом действии, которое может вызвать ошибку, следует очищать коллекцию с помощью метода Clear.
Ошибки ADO обрабатываются системой обработки Visual Basic.
Свойства объекта Error:
- Description. Возвращает строку с кратким описанием ошибки. Задается либо программным обеспечением ADO, либо поставщиком данных,
- NativeError. Указывает код ошибки поставщика данных,
- Number. Указывает номер, однозначно определяющий объект Error,
- Source. Указывает имя объекта в котором произошла ошибка,
- SQLState. Содержит код состояния SQL для данного объекта Error.
События, предусмотренные в модели ADO
- CommitTransComplete. Происходит после выполнения транзакции объектом Connect,
- ConnectComplete. Генерируется после связывания с базой данных,
- EndOfRecordset. Происходит при попытке обратиться по адресу, находящемуся за пределами области данных,
- ExecuteComplete. Активизируется после выполнения команды (метода Execute объектов Connection или Command или метода Open объекта Recordset ),
- FetchComplete. Происходит, когда в результате выполнения продолжительной асинхронной операции были получены все записи в наборе записей,
- FetchProgress. Aктивизируется при выполнении продолжительной асинхронной операции выборки записей, давая возможность отменить операцию,
- FieldChangeComplete. Происходит после изменения одного или нескольких объектов Field методами Value или Update объекта Recordset,
- InfoMessage. Генерируется при активизации какого-либо события объекта связи, если соответствующая операция прошла успешно, но поставщик данных пересылает дополнительную информацию,
- MoveComplete. Происходит после изменения текущей позиции в наборе записей Recordset,
- OnError. Происходит при возникновении какой-либо ошибки базы данных,
- RecordChangeComplete. Активизируется при изменении хотя бы одной записи в объекте Recordset одним из методов: AddNew, CancelButton, CancelUpdate, Delete, Update или UpdateBatch,
- RecordsetChangeComplete. Происходит после изменения набора записей методами Close, Filter, Open, Requery или Resync объекта Recordset,
- RollbackTransComplete. Происходит после завершения метода RollBackTrans объекта Connection, отменяющего последнюю транзакцию,
- WillChangeField. Происходит перед изменением одного или нескольких объектов Field методами Value или Update объекта Recordset,
- WillChangeRecord. Происходит перед изменением одной или нескольких записей в объкте Recordset одним из методов: AddNew, CancelButton, CancelUpdate, Delete, Update или UpdateBatch,
- WillChangeRecordset. Происходит перед изменением набора записей методами Close, Filter, Open, Requery или Resync объекта Recordset,
- WillExecute. Происходит перед выполнением команды (метода Execute объектов Connection или Command или метода Open объекта Recordset ),
- WillConnect. Происходит перед установкой связей с базой данных,
- WillMove. Происходит перед изменением текущей структуры позиции в наборе записей Recordset.