Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 [ 56 ] 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

DBEngine

Workspace

Database

TableDef

Field

lnde>f

Field

RecordSet

QueryDef

Field

Parameter

Container

Field Relation

Document

Field

User

Group

Group

User

Error

Рис. 6.15. Иерархия объектов для доступа к данным в Visual Basic

Мы поместили этот рисунок не для того, чтобы напугать вас мудреными словами "иерархия объектов". Этот способ хранения объектов реализуется с помощью специального вида объекта, который называется коллекцией. Единственная цель объекта коллекции состоит в том, чтобы содержать другие объекты. Объекты, содержащиеся в данной коллекции, всегда относятся к одному и тому же виду. Например, в коллекции Indexes могут содержаться только объекты Index.

Обратите внимание, что элементы иерархии объектов DAO на самом деле являются классами. Напомним, что класс - это не реальный объект, который может выполнять в программе какие-то действия, а только его прообраз. На основе определенного класса в программе мы создаем объект, который тут же готов выполнять предусмотренные в классе функции. Например, после такой строки в программе:

Dim oWksp As Workspace

создается объект на основе класса Workspace, для ссылки на который используется переменная oWksp.

Так как главной темой обсуждения в этом параграфе является поведение объектов, которые создаются в программе для обеспечения заданной функциональности, термин "объект" используется чаще, чем "класс". Только не забудьте, что в строгой формулировке, например, термин "объект Database" означает "объект класса Database".

Как вы можете видеть на рис. 6.15, большинство объектов доступа к данным представляется и

Объекты для доступа к данным имеют иерархическую организацию, в которой большинство классов относится к коллекциям классов, которые, в свою очередь, принадлежат другому классу выше в иерархии. Полная структура объектов для доступа к данным приведена на рис. 6.15.



как объект, и как коллекция. На самом верху иерархии - процессор данных, который представляется объектом DBEngine. Это единственный объект доступа к данным, который не может быть включен в какой-то другой объект. Объект DBEngine имеет коллекцию Workspaces (имя коллекции всегда имеет множественное число от имени содержащихся объектов), которая в свою очередь, может содержать один или большее количество объектов Workspace. Каждый объект Workspace имеет коллекцию Databases, которая содержит один или большее количество объектов Database и т. д.

Доступ к отдельным объектам коллекции может быть осуществлен по его номеру. Нумерация объектов в коллекции начинается с нуля. Например, на первый объект TableDef в базе данных с именем MyDatabase можно сослаться как MyDatabase.TableDefs(0). На второй объект TableDef можно сослаться как MyDatabase.TableDefs(1) и т. д.

Объекты в иерархии должны указываться с полным перечнем "пути" от самого верхнего объекта, например:

DBEngine.Workspaces(0).Databases(0).TableDefs(0).Fields "Customer")

Как видно из этого примера, некоторые коллекции, помимо цифрового индекса, для ссылки на конкретный объект допускают ссылку по имени. Например, мы ссылаемся на объект коллекции Fields по значению свойства Name объекта Field.

В этом случае, при явной ссылке на объект, в отличие от ссылки по индексу, предпочтительнее использовать разделитель ! (восклицательный знак). Таким образом, следующие выражения эквивалентны:

MyTableDef.Fields("Customer") MyTableDef.Fields!Customer

Большинство объектов для доступа к данным имеют коллекции по умолчанию. Это позволяет использовать в программе более простой код, так как в этом случае не требуется явного указания имени коллекции при ссылке на объект из коллекции по умолчанию. Например, коллекцией по умолчанию для объекта Recordset будет являться коллекция Fields. Для получения значения поля Customer вы можете написать:

Cust = MyRecordset!Customer что короче, чем Cust = MyRecordset.Fields!Customer

Использование заданных по умолчанию коллекций упрощает код в прикладной программе, потому что при использовании вложенных ссылок на объекты заданные по умолчанию коллекции и составляют основную иерархию "пути" до объектов.

Основная идея объектно-ориентированного программирования заключается в том, что данные и процедуры, относящиеся к отдельному объекту, сохраняются все вместе внутри объекта. В Visual Basic, как и в других объектно-ориентированных языках программирования, данные, относящиеся к объекту (установки и атрибуты), называются свойствами, в то время как процедуры, с помощью которых выполняются какие-либо действия над объектами, называются методами.

Таким образом, написание программы с использованием объектов для доступа к данным заключается в создании переменной, которая будет выполнять функции ссылки на объект, а затем в манипулировании объектом путем выполнения соответствующих методов и установки требуемых значений свойств. В качестве примера давайте рассмотрим следующий фрагмент программы:

* Определяем переменные для ссылки на объекты

Dim MyDB As Database, MyWS As Workspace, MyRS As Recordset

* Открываем таблицу Clients в БД ACCOUNTS.MDB Set MyWS = DBEngine.Workspaces(0)

Set MyDB = MyWS.OpenDatabase("ACCOUNTS.MDB") Set MyRS = MyDB.OpenRecordSet("Clients")

* Устанавливаем порядок вывода записей MyRS.Index = "ClientID"

Для открытия базы данных мы используем метод OpenDatabase объекта Work-space и привязываем к ней переменную MyDB с целью обеспечения дальнейших ссылок. Обеспечить доступ к записям таблицы Clients призван метод OpenRecordset. Требуемый логический порядок вывода записей мы устанавливаем с помощью свойства Index, которому присваиваем значение, соответствующее имени нужного индекса - ClientID.



Для большинства объектов доступа к данным программист может задать новые свойства, не предусмотренные стандартно в языке. Эта возможность позволяет гибко настраивать объекты в пользовательской программе и как угодно расширять перечень данных, сохраняемых вместе с объектом.

Теперь пришло время остановиться на каждом из объектов для доступа к данным, чтобы вы смогли получить представление о тех возможностях, которые могут быть реализованы с их помощью в прикладной программе. В табл. 6.4 приведен список свойств, а в табл. 6.5 - список методов, которые можно использовать для объектов каждого вида. В дальнейшем, при описании методов работы с данными, мы дадим более подробное описание перечисленных свойств и методов, но если вы хотя бы немного помните, что делали на уроках английского языка в школе, то уже сейчас сможете сделать некоторые выводы, изучив названия приведенных в таблицах свойств и методов.

DBEngine

Этот объект верхнего уровня ассоциируется с процессором данных. Он устанавливает системные параметры процессора данных и обеспечивает возможность работы с БД за счет автоматического создания объекта Workspace с номером 0. Коллекцией по умолчанию для этого объекта является Workspaces.

Workspace

Используется для поддержки транзакций, является контейнером для открытой БД и обеспечивает секретность работы с данными. Объект по умолчанию коллекции Workspaces -Workspaces(0) создается автоматически, как только в программе задается первая ссылка на объекты для доступа к данным. Этот объект может быть инициализирован с помощью свойств Username и Password перед активизацией объекта DBEngine. Коллекцией по умолчанию для этого объекта будет являться коллекция Databases.

Database

Этот объект корреспондируется с базой данных Visual Basic, внешней БД или соединением ODBC. Он используется для определения таблиц, связей и запросов к БД, а также для открытия объекта Recordset. Коллекцией по умолчанию является TableDefs.

TableDef

Каждый объект TableDef в коллекции TableDefs описывает соответствующую таблицу в текущей БД или присоединенную таблицу во внешней БД. В последнем случае с помощью этого объекта мы не можем изменить описание внешней таблицы. Коллекцией по умолчанию является

Fields.

QueryDef

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

Recordset

Представляет собой курсор, который используется для отображения данных из таблицы БД или результата запроса. Курсор запоминает необходимые данные в виде набора записей в буфере и обеспечивает перемещение по этим записям с помощью методов Move, Seek и Find, выделяя текущую, что позволяет просматривать, обновлять или удалять необходимые данные. Этот объект является временным, и как только он закрывается, удаляется из коллекции, а все ассоциированные с ним данные из памяти. Коллекцией по умолчанию является Fields.

Field



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 [ 56 ] 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146