Тверской государственный университет
Опубликован: 13.09.2006 | Доступ: свободный | Студентов: 5134 / 388 | Оценка: 4.23 / 3.83 | Длительность: 28:12:00
Специальности: Программист, Менеджер
Лекция 5:

Объекты ADO

Методы объекта Connection

У объекта Connection 8 методов, позволяющих открыть и закрыть соединение, выполнить команду и прервать ее выполнение, методы, связанные с выполнением транзакции. Давайте рассмотрим описание этих методов:

  • Sub Open([ConnectionString As String], [UserID As String], [Password As String], [Options As Long = -1]). Один из центральных методов, с которого обычно начинается работа с источником данных, и который позволяет установить соединение с Провайдером. Первый параметр метода можно не задавать, если предварительно определить свойство ConnectionString. При задании этого параметра в момент открытия можно переопределить некоторые аргументы, заданные одноименным свойством. Два следующих параметра необходимы при установлении соединения с защищенным паролем источником данных. Последний параметр, задаваемый предопределенной константой, определяет некоторые характеристики устанавливаемого соединения.
  • Sub Close(). Метод закрывает открытое соединение. Он применяется не только тогда, когда надобность в соединении исчезает, а часто для того, чтобы изменить параметры соединения и вновь открыть его методом Open. Напомню, что ряд параметров соединения могут быть установлены только для закрытого соединения. Этим методом обладают целый ряд объектов ADO. Чтобы удалить соответствующий объект из памяти объекту нужно присвоить значение Nothing. Метод Close для этих целей не применяется, - он не удаляет объект.
  • Function Execute(CommandText As String, [RecordsAffected], [Options As Long = -1]) As Recordset. Объект Connection позволяет не только открывать соединение, но и выполнять операции над открытым источником данных. Метод Execute возвращает ссылку на созданный Провайдером объект Recordset, являющийся результатом выполнения команды, заданной первым параметром метода. Параметр CommandText, задающий описание команды, может быть текстом SQL-оператора, именем таблицы или хранимой процедуры, URL-адресом или текстом, специфическим для данного Провайдера. Второй параметр - RecordAffected возвращает число записей, затронутых при выполнении команды. Параметр Options позволяет задать дополнительную информацию для Провайдера, используемую при преобразовании текста параметра CommandText в реальную команду. Поскольку в результате выполнения команды возвращается объект Recordset, обладающий некоторым ограниченным набором возможностей, то для выполнения команд и получения объекта Recordset чаще используют объекты Command или Recordset.
  • Sub Cancel(). Большинство объектов ADO обладают этим методом. При его выполнении завершается асинхронный метод, то есть метод, для которого установлены свойства adAsyncConnect, adAsyncExecute или adAsyncFetch. Для объекта Connection завершаемым методом может быть метод Open либо Execute.
  • Function BeginTrans() As Long, Sub CommitTrans(),Sub RollbackTrans() - три метода для работы с транзакциями. Первый из них запускает новую транзакцию, второй - сохраняет результаты транзакции и завершает ее, третий - позволяет сделать откат, отменяя все изменения, сделанные во время текущей транзакции, сама транзакция при этом завершается. Если Провайдер поддерживает гнездованные транзакции, то повторный вызов метода BeginTrans в уже открытой транзакции начинает новую (гнездованную) транзакцию. Этот метод, вызванный, как функция, возвращает уровень гнездования транзакции. Замечу, что не все Провайдеры поддерживают механизм транзакций, не говоря уже о гнездованных транзакциях. Значение одного из атрибутов свойства Attributes объекта Connection можно задать так, что при закрытии текущей транзакции методами CommitTrans и RollBackTrans будет открываться новая транзакция.
  • Function OpenSchema(Schema As SchemaEnum, [Restrictions], [SchemaID]) As Recordset. Метод позволяет получить информацию от Провайдера о схеме базы данных. В качестве результата возвращается ссылка на объект Recordset, который будет открыт только для чтения со статическим курсором. Столбцы этого объекта содержат описание схемы. Возможные описания задаются спецификациями OLE DB, первый параметр метода определяет, какие именно столбцы появятся в объекте Recordset.
События объекта Connection

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

У объекта Connection достаточно много событий - 9, большая часть из которых возникает по завершении той или иной команды. Давайте рассмотрим эти события:

  • Event WillConnect(ConnectionString As String, UserID As String, Password As String, Options As Long, adStatus As EventStatusEnum, pConnection As Connection),
  • Event WillExecute(Source As String, CursorType As CursorTypeEnum, LockType As LockTypeEnum, Options As Long, adStatus As EventStatusEnum, pCommand As Command, pRecordset As Recordset, pConnection As Connection). Первое из этих событий будет возникать перед выполнением соединения, второе - перед выполнением команды Execute или Open. Параметры pConnection, pCommand, pRecordset возвращают указатели на соответствующие объекты, а остальные параметры задают те или иные характеристики соединения или команды, которую предстоит выполнить. Как я уже говорил, в обработчике события можно проверить корректность задания параметров.
  • Event BeginTransComplete(TransactionLevel As Long, pError As Error, adStatus As EventStatusEnum, pConnection As Connection),
  • Event CommitTransComplete(pError As Error, adStatus As EventStatusEnum, pConnection As Connection),
  • Event RollbackTransComplete(pError As Error, adStatus As EventStatusEnum, pConnection As Connection).
  • Event ConnectComplete(pError As Error, adStatus As EventStatusEnum, pConnection As Connection),
  • Event Disconnect(adStatus As EventStatusEnum, pConnection As Connection),
  • Event ExecuteComplete(RecordsAffected As Long, pError As Error, adStatus As EventStatusEnum, pCommand As Command, pRecordset As Recordset, pConnection As Connection), Шесть событий этой группы возникают после завершения операций Connection, Execute или операций, связанных с транзакциями. Событие ConnectComplete возникает после того, как было открыто соединение, событие Disconnect - после закрытия соединения. Во всех случаях обработчику событий передаются указатели на соответствующие объекты и информация, необходимая, для того чтобы оценить, насколько корректно была выполнена та или иная операция. Если значение параметра adStatus равно adStatusOk, то операция окончилась успешно, и нет необходимости анализировать объект Error. Если же этот параметр имеет значение adStatusErrorsOccured, то необходимо анализировать объект Error, а, возможно, и всю коллекцию Errors.
  • Event InfoMessage(pError As Error, adStatus As EventStatusEnum, pConnection As Connection). В отличие от остальных это событие встречается не до и не после выполнения операции соединения, а в момент ее выполнения, и выдает предупреждение о возможных ошибках. Параметры, передаваемые обработчику события, имеют привычный смысл.
Обзор возможностей объекта Connection

Подведу теперь некоторые итоги и укажу на некоторые дополнительные возможности объекта Connection. Объект задает сеанс работы с источником данных. В случае, когда речь идет об удаленном источнике и клиент-серверном приложении установление соединения означает физическое подключение к серверу в сети.

Хотя большинство свойств и методов этого объекта определено для всех стандартных Провайдеров, тем не менее, есть и специфика, определяемая каждым конкретным Провайдером. Перечислю еще раз те возможности, которые предоставляют свойства и методы объекта:

  • Еще до открытия соединения можно установить его конфигурацию, задавая характеристики соединения с помощью таких свойств, как ConnectionString, ConnectionTimeOut, Mode. Первое из этих свойств имеет статус свойства по умолчанию.
  • Можно обращаться на клиентской стороне к службе управления курсором - Cursor Service for OLE DB, задав adUseClient в качестве значения свойства CursorLocation.
  • Можно установить для соединения базу данных по умолчанию, задав свойство DefaultDatabase, аналогично, свойство Provider устанавливает Провайдера по умолчанию.
  • Используя методы Open и Close, можно многократно открывать и закрывать соединение, возможно, меняя его параметры от сеанса к сеансу.
  • Используя метод Execute, можно выполнять те или иные команды, не обращаясь к объекту Command.
  • Дана возможность управлять транзакциями в открытом соединении, в том числе гнездованными транзакциями, если только Провайдер поддерживает эти возможности.
  • В соответствующих обработчиках событий можно проверять корректность задания параметров перед выполнением команд. После их выполнения можно анализировать объекты Error, чтобы понять причины, приведшие к возникновению ошибки по завершении команды.
  • Можно независимо создать несколько объектов Connection, что позволяет запускать одновременно несколько сеансов работы с одним или разными источниками данных.
  • Наконец, важно отметить такую возможность некоторых Провайдеров, как вызов объектом Connection именованных команд и хранимых процедур, точно также как, если бы они были методами этого объекта. Вот схема процедуры, демонстрирующая эту возможность:
Sub Fragment()
'Это не исполняемый код, а демонстрационная заготовка
Dim cnn As New ADODB.Connection 
Dim cmd As New ADODB.Command
Dim rst As New ADODB.Recordset
'конфигурирование соединения
cnn.Open ConnectionString:= "…"
cmd.Name = "NameOfMyCommand"
cmd.ActiveConnection = cnn
'запуск команды на выполнение, передавая ей параметры и объект Recordset
cnn.NameOfMyCommand "parameter", rst
'запуск хранимой процедуры и передача ей параметров
cnn.NameOfMyStoredProcedure "parameter" 
End Sub
Ольга Гафарова
Ольга Гафарова

Добрый день. Подскажите формулы при решении задачи на рис. 2.2 в лекции №2. Закон Ома, какие должны использоваться формулы для I и R

Курс: Основы офисного программирования и документы Excel

Серегй Лушников
Серегй Лушников