52953.fb2 VBA для чайников - читать онлайн бесплатно полную версию книги . Страница 108

VBA для чайников - читать онлайн бесплатно полную версию книги . Страница 108

Хотя эта программа и предназначена для выполнения различных функций с базами данных, Access нельзя назвать ядром базы данных. Access- это "клиент" (front end), который показывает вам, какие именно команды и данные доступны, а также воспринимает ваши инструкции по отношению к информации, такие как ее изменение, добавление или удаление. Все эти инструкции передаются серверной части (back end) СУБД.

Стандартным ядром баз данных для Access является Microsoft Jet. Стандартные файлы баз данных Access (вы всегда сможете определить их по расширению .mdb) на самом деле являются файлами Jet. Работая через Jet, другие инструменты разработки, такие как Visual Basic, могут получить из файлов баз данных все необходимые сведения.

Jet предназначено для обслуживания индивидуальных пользователей и небольших рабочих групп. Для решения более серьезных задач, уровня предприятия, например, предназначены другие ядра баз данных. Сюда относятся еще один программный продукт компании Microsoft - SQL Server, а также предложения от других ведущих поставщиков, таких как Oracle и Informix. Версия SQL Server для разработчика, которая называется SQL Server 2000 Desktop Engine, поставляется в составе Access 2002. Она позволяет вам разрабатывать базирующиеся на технологиях SQL Server приложениях баз данных прямо на своем компьютере, а затем передавать их "настоящей" версии SQL Server, работающей в сети.

В любом случае, всегда можно запутаться, когда дело касается программного обеспечения клиентной и серверной частей СУБД. Работая с Access или любым другим VBА -приложением, вы можете взаимодействовать с различными ядрами баз данных, руководствуясь прежде всего вашими конкретными потребностями. Access предоставляет больше возможностей программисту баз данных, но вы можете использовать Word, CorelDraw или любое другое поддерживающее VBA приложение, и получить при этом не менее превосходные результаты.

SQL и VBA

SQL (Structured Query Language - Язык структурированных запросов) - это общепринятый стандарт организации запросов баз данных (запрос - это команда, которая получает или изменяет информацию, которая содержится в базе данных). Любая система управления данных, будь то Jet или Oracle, поддерживает язык SQL. SQL- это полноправный язык программирования, однако лучше всего он подходит именно для управления базами данных. Вы создаете инструкции SQL для выбора, изменения или удаления определенных наборов записей.

А как же SQL и VBA дополняют друг друга? VBA позволяет передавать ядру базы данных инструкции SQL для их дальнейшей обработки. После обработки инструкций и извлечения необходимого набора записей ядром базы данных вам снова потребуется VBA для отображения и форматирования результатов: SQL при этом не используется.

Все об объектах баз данных

Сам по себе язык VBA не предоставляет никаких средств для доступа к базам данных и манипулирования содержащейся в них информацией. Однако после объединения с библиотекой объектов баз данных VBA тотчас превращается в инструмент для программирования баз данных с очень широкими возможностями.

Основная задача, выполняемая библиотекой объектов базы данных,- представление базы данных и всех ее компонентов (таблицы, запросы, отчеты и т.д.) в объекты, по своему проявлению мало отличающиеся от других объектов, используемых в VBA. Благодаря этому вы получаете возможность манипулировать ими, используя их свойства, методы и события (подробности в главе 12). Поскольку база данных представляется в виде набора объектов, ее библиотека объектов избавляет вас от необходимости беспокоиться о деталях сложной структуры базы данных. Кроме того, вы можете использовать тот же набор объектов для манипулирования базами данных других типов.

Вы можете выбирать среди нескольких библиотек баз данных; чаще других пользуются предложения компании Microsoft. Сюда относятся ADO (ActiveX Data Objects- Объекты данных ActiveX), текущий стандарт, и DAO (Data Access Objects - Объекты доступа к данным), старая библиотека объектов, но все еще широко используемая. Другие поставщики предлагают свои собственные библиотеки объектов баз данных. Например, если вы работаете исключительно с файлами dBase, вам следует подумать об использовании CodeBase (продукт компании Sequiter Software).

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

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

Библиотека ADO поставляется в составе Office XP и Office 2000, в то время как DAO поставлялась с ранними версиями Office, включая Office 97, а также другими VBA приложениями. Если на вашем компьютере не установлена ни одна из этих библиотек объектов, вы можете загрузить их с Web-узла компании Microsoft, что, помимо всего прочего, гарантирует наличие на вашем компьютере самых последних версий этих библиотек.

После того как вы установили необходимую библиотеку объектов баз данных, вы должны указать ее наличие в VBA-проекте, прежде чем сможете использовать ее объекты. Для того чтобы это сделать, воспользуйтесь командой Tools = References, чтобы открыть диалоговое окно References (см. главу 12), в котором вам следует добавить необходимые сведения.

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

Возможность связывания элементов управления с данными представляет собой ключевое отличие Access от большинства других VBA-приложений. Однако, если вы используете приложение, например Word, которое не содержит элементы управления соответствующих типов, вы можете добавить их, отдельно приобретя специальные наборы инструментальных средств ActiveX. В состав пакета Microsoft Office Developer входит большое количество элементов управления для связывания данных, которые можно использовать в любом приложении Office, а также целый ряд других инструментов и утилит, значительно упрощающих создание программ управления базами данных на VBA. Кроме того, свои разработки предлагают многие сторонние поставщики.

Несколько связанных технологий баз данных

При программировании баз данных в Office вы столкнетесь еще с целым рядом терминов, поэтому вам стоит ознакомиться с ними заранее. ODBC (Open DataBase Connectivity- Открытый интерфейс доступа к базам данных) - это старый стандарт программирования от компании Microsoft, предназначенный для организации доступа к структурированным данным любого типа с помощью SQL. ODBC проектировался в те времена, когда в мире программирования царили функции C/C++, что вам совершенно не нужно при работе с VBA.

Однако, поскольку стандарт ODBC существовал не один год, ODBC-драйверы доступны для баз данных всех мыслимых типов.

OLE DB (OLE для баз данных) - это новая спецификация Microsoft для доступа к данным, которая постепенно должна вытеснить стандарт ODBC. Чисто теоретически, OLE DB обеспечивает более простой и гибкий доступ к информации любого типа, которая может представляться в табличной форме. Эта информация сохраняется в обычной настольной базе данных, в базе данных на основе SQL на сервере, в виде набора сообщений электронной почты и т.д. Для представления объектов базы данных программисту используется OLE DB, а не ODBC. Однако еще не каждый поставщик баз данных написал соответствующее средство доступа OLE DB Provider, позволяющее "упаковать" информацию базы данных в форму объектов для дальнейшего их использования с помощью ADO. По этой причине ADO поставляется с дополнительным средством доступа OLE DB Provider, способным подключить любую ODBC-базу данных к ADO.

Программирование баз данных: доступные варианты выбора

Как известно, Access представляет собой приложение для работы с базами данных, входящее в состав Microsoft Office, поэтому использование Access для построения пользовательских программ для работы с базами данных кажется вполне логичным. Однако приведенные ниже причины могут подтолкнуть вас к рассмотрению других возможных вариантов.

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

Мое личное мнение таково: поскольку пользовательский интерфейс и ядро базы данных •- это разные части программного обеспечения, вы можете использовать инструменты, отличные от Access, для того чтобы сообщить ядру базы данных, что же именно вы от него хотите, Именно это вы и делаете, когда создаете программу для работы с базами данных, используя VBA. Даже если вы создаете код в рамках Access, полученный VBA-код взаимодействует с ядром базы данных как с независимым программным компонентом, таким как ADO, а не посредством Access.

Если вам не нужна Access для управления ядром базы данных, какой же инструмент использовать для создания программы для работы с базами данных? Возможные варианты, а также их преимущества, перечислены ниже.

* Access. VBA-программы, созданные в среде Access, могут напрямую обращаться к объектам этого приложения, в частности к формам и отчетам. Поскольку формы и отчеты Access обладают встроенными функциональными возможностями баз данных, они позволяют сократить цикл разработки программ значительнее, чем VBA общего назначения. А так как Access предоставляет быстрый доступ к данным, вы всегда можете работать со своими данными, даже если работа над программой еще не закончена. Это замечательная среда для разработки несрочных проектов только в удобное время для вас время.

* Другое приложение Office, такое как Word или Excel. В многих пользовательских программах доступ к базам данных представляет собой лишь часть функциональных возможностей. Если программа, которую вам необходимо написать, будет выполнять такие функции, как обработка текста или математические и статические расчеты, создание ее в среде Word или Excel позволит вам напрямую воспользоваться преимуществами соответствующего приложения. С помощью ADO ваша VBA-программа все равно будет обладать возможностью получать, отображать данные и манипулировать ими из баз данных. А программа окажется еще и небольшая, быстрая и менее сложная, чем если вы использовали бы модель СОМ для автоматизации доступа к данным Access из, скажем, Word (или автоматизации доступа к данным Word из Access).

Сами по себе формы и отчеты VBA не способны взаимодействовать с базами данных, но написать код для связывания формы данных вручную не так уже сложно. Кроме а того, вы можете приобрести Office Developer или другие инструментальные средства от сторонних производителей, которые позволят связать формы и элементы управления с данными. Вы можете также переслать результаты своей работы непосредственно в другие VBA-приложения, так как они не зависят от форм Access.

* Visual Basic (не VBA). Visual Basic- это восхитительный инструмент для разработки баз данных. Написанный вами код на Visual Basic может через ADO подключаться к базам данных, как и при использовании VBA, однако формы Visual Basic напрямую поддерживают работу с базами данных, точно так же, как и формы Access. Программа, созданная с помощью Visual Basic, обладает двумя значительными преимуществами перед программой, созданной с помощью VBA-приложения, такого как Word или Excel. Во-первых, она быстрее работает, так как программы, написанные на Visual Basic, компилируются, а не интерпретируются при каждом выполнении, как программы, созданные с помощью VBA. Во-вторых, вы можете свободно распространять программы: конечным пользователям не понадобится базовое VBA-приложение с помощью которого оно было создано.

Программирование баз данных с помощью Access

Прежде чем вы приступите к программированию базы данных в Access, вам следует ознакомиться со всеми отличиями Access от остальных VBA-приложений. Эти различия осложняют перевод программы, созданной с помощью Access, в другое VBA-приложение.

* Формы Access несовместимы со стандартными пользовательскими формами VBA и формами Visual Basic. Если вы решите, что ваша программа будет лучше работать в другом VBA-приложении, вам придется создавать все формы заново.

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

Если вы опытный пользователь Access, но не имеете ни малейшего опыта программирования, объект DoCmd позволит вам постепенно перейти к использованию VBA. Однако этим объясняется и определенная проблема: объект DoCmd жестко привязывает вас к Access. Если же вы изучите стандартный VBA, вы сможете очень легко перейти к другим средам разработки Visual Basic.

Даже если вы выберете "чистый" VBA, вы все равно не обойдетесь без объекта DoCmd при создании программ в рамках Access. Возможно, в связи с тем, что формы Access не являются стандартными формами VBA, для отображения формы в VBAпрограмме Access вам придется использовать не стандартный метод Show, а метод OpenForm объекта DoCmd.

Написание кода базы данных с помощью ADO

Хотя проектирование правильных SQL-инструкций может оказаться сложным, написание кода базы данных с помощью ADO оказывается совсем несложной задачей. Вам необходимо освоить работу всего с тремя объектами: Connection, Recordset и Command; их методы и свойства реализованы достаточно логично.

Обработка ошибок

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

Добавление ссылки на ADO

Прежде чем вы сможете использовать ADO и ее объекты в VBA-программе, вы должны сначала добавить в своем проекте ссылку на библиотеку объектов ADO. В окне редактора Visual Basic выберите команду Tools=References, после чего установите флажок напротив Microsoft ActiveX Data Objects 2.x Library (на момент написания книги последней версией была 2.5).

Вашей первоочередной задачей при необходимости доступа к источнику данных (базе данных или другому репозитарию данных) станет установка соединения с ним. Для организации подключения между вашей программой и данными предназначен объект Connection.

Это очень важно! Если вы используете Access для написания ADO-кода для ядра базы данных Jet, вам не нужно создавать объект Connection для работы с базой данных Jet, уже открытой в Access, так как Access автоматически выполняет подобные действия за вас. Для обращения к базе данных используйте свойство Connection объекта Current Project программы Access. Это позволяет сделать, например, приведенный ниже фрагмент кода:

Dim conADOConnection As Connection

Set conADOConnection = Current Project.Connection

Кроме того, вы можете легко установить подключение с базой данных SQL Server в проекте Access, если вы пишете код VBA в этом же проекте. В этом случае вам необходимо использовать свойство BaseConnectionString объекта Current Project, как показано ниже:

Dim conADO Аз New Connection

conADO.Cor.nectionString = _

CurrentProject.BaseConnectionString

В других ситуациях вам придется создавать объекты Connection самостоятельно. Для создания объекта Connection просто объявите имя переменной для объекта, после чего откройте подключение. Метод Open получает в качестве аргумента строку подключения, содержащие различные параметры, которые определяют используемое средство доступа OLE DB Provider и источник данных, с которым вы работаете. Либо же, вы можете сначала задать свойства объекта Connection, соответствующего элементам строки подключения, после чего уже использовать метол Open. Изучите приведенные ниже примеры эквивалентных инструкций, которые создают объект Connection для одной базы данных Jet:

‘ Пример 1

Dim. conADOConnection As New Connection, strConnect As String

strConnect = "Provider=Microsoft.Jet.OLEDB.4.0; " _

& "Data Source=C:\Data\Toys"

conADOConnection.Open strConnect

‘ Пример 2

Dim conADOConnection As New Connection