Анимация
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

В качестве сервера может выступать любой сервер БД, имеющий драйвер ODBC (MS SQL Server, Oracle и т. д.), или даже настольная база данных, ведь часто может возникнуть необходимость в совместной обработке данных, хранящихся в формате Paradox, приложениями, написанными и на FoxPro и на Delphi. ODBC находится как бы посредине между приложением, использующем данные, и самими данными, хранящимися в формате, которые мы не можем обработать напрямую в приложении, и используется как средство коммуникации между двумя front-end и back-end сторонами.

Для использования ODBC с целью получения данных в сети вам необходимы средства коммуникации между машиной, на которой находятся данные, и станцией, где они будут просматриваться, модифицироваться и, возможно, пополняться. Это специальная программа, которая называется Администратор ODBC на рабочей станции, и драйверы, которые могут работать как с приложением, так и с данными на сервере. Технология ODBC обеспечивает возможность хранить данные на разных серверах БД, причем не обязательно в одном формате. В теории подразумевается, что для этого не надо переписывать ни одной строчки в вашем пользовательском приложении, работающем на клиент-ской ПЭВМ. На практике так бывает не всегда, из-за различий в структуре различных уровней построения ODBC.

ODBC определяет минимальный набор SQL команд и набор функций вызова с двумя уровнями расширений. Технология ODBC включает также механизм для вызова специфических для сервера возможностей, которые не включены в стандарт ODBC. В целом, это дает возможность разработчику решать самостоятельно, какой уровень функциональности ему достаточен для доступа к серверу баз данных. Разработчик выбирает между наименьшей обеспечиваемой ODBC функциональностью или пытается использовать все возможности сервера.

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

С расширенной функциональностью ODBC разработчик может использовать дополнительные возможности стандарта SQL и функции ODBC, чтобы расширить возможности управления внешней СУБД. Расширения ODBC включают в себя такие дополнительные возможности, как асинхронное выполнение запросов, нестандартные в среде приложения типы данных (Timestamp, Binary), прокручиваемые курсоры, SQL команды для скалярных функций, внешние объединения, хранимые процедуры и способность использовать SQL расширения, характерные для конкретного сервера БД.

Если вы используете ODBC драйверы для MS SQL Server, разработанные Microsoft в 1996 году, то вам повезло, так как их расширения предоставляют практически все возможности для полноценной работы с сервером. Если же вы работаете с сервером, отличным от MS SQL Server, или с этим сервером, но драйвер ODBC не разработан фирмой Microsoft, то у вас могут возникнуть трудности ввиду не полной поддержки функциональности сервера драйвером. Если у вас есть сомнение в функциональности драйвера, то для получения полной и содержательной информации о нем используйте функции SQLGetInfo(), SQLGetFunction() и SQLGetStmtOption(). Более подробно о них мы расскажем ниже.

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

Описание основных компонентов ODBC приведено в табл. 8.1.

Таблица 8.1. Основные компоненты ODBC Компоненты Описание

Приложение Использует ODBC для связи с

источником данных, отправления и получения данных. Приложение может использовать функцию SQLConnect(), чтобы передать указатель соединения, имя источника данных, идентификатор пользователя и пароль Диспетчеру драйверов.

Диспетчер Поддерживает связь между

Открытый доступ к данным - Open Database Connectivity (ODBC) - это общее определение языка и набор протоколов. ODBC позволяет клиентскому приложению, написанному, например, на Access или Visual FoxPro, работать с командами и функциями, поддерживаемыми сервером.



драйверов приложением и источником данных, обеспечивая информацией приложение и загружая драйверы динамически, по мере необходимости. ODBC позволяет приложению взаимодействовать с источниками данных разных типов посредством драйверов СУБД, используя Администратор ODBC для установки соединения. Диспетчер драйверов и сами драйверы разработаны как библиотеки DLL. Диспетчер драйверов загружает нужную библиотеку, соединяется с сервером с помощью драйвера, который на самом деле и выполняет все вызовы функций из приложения.

Драйвер Выполняет все вызовы ODBC функций, управляет всеми взаимодействиями между приложением и сервером, переводит SQL выражения на синтаксис источника данных. Драйверы обычно поставляются продавцом сервера БД и имеет смысл получить самую последнюю версию, в которой, вероятнее всего, будет наименьшее количество ошибок. Драйвер перехватывает все ошибки программ, переводя их в стандартные ошибки ODBC. Драйвер позволяет узнать информацию об объектах в базе данных, таких как таблицы, поля, индексы и т. п .

Сервер БД Хранит и выводит данные в ответ на запросы со стороны ODBC драйвера. Сервер по запросу возвращает данные или код ошибки, которые передаются в приложение.

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

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

Поэтому на настоящий момент разработано очень много технологий для доступа к внешним данным. В них немудрено запутаться, и, чтобы этого не произошло, - ни слова о том, что не имеет отношения к рассматриваемым средствам разработки. Кстати, среди них СУБД Access имеет наибольшее число способов взаимодействия с MS SQL Server, поэтому как пример мы хотим кратко описать и перечислить их (см. также рис. 8.1):



Access

Диспетчер

Драйвер

ODBC

ODBC

Server

Access

Server

ODBC AP!

Access

Диспетчер ODBC

Драйвер OCBC

Server

Access

Диспетчер

Драйвер

ODBC

ODBC

Server

SQLOLE

Access

SQLOLE

SQL Server

Рис. 8.1.

Использование связанных таблиц. Всю работу за вас выполняет процессор баз данных Microsoft Access. Самый надежный в плане программирования способ - он не требует вообще никаких дополнительных драйверов. Вы можете заниматься только обработкой данных, связывать таблицы на сервере с локальными таблицами, создавать запросы.

Использование SQL pass-through функций. При этом вы обращаетесь напрямую к серверу, на его языке, минуя процессор баз данных Access. Ваш запрос, хотя и проходит через все компоненты ODBC, ни один из них реально не обрабатывает его. Прямое обращение к ODBC API. При этом способе вы также минуете процессор баз данных Access и напрямую используете Диспетчер драйверов и сам драйвер для доступа к базе данных. Таким образом, ваш код должен обеспечить всю функциональность, которую, как правило обеспечивает процессор баз данных Access. Сложность написания кода даже для довольно простых запросов заставляет обращаться к этому методу только тогда, когда действительно необходима значительная скорость выборки данных. Использование Remote Data Objects. Этот четвертый способ является самым дорогим по материальным затратам, так как для его функционирования необходимо, чтобы на вашей рабочей станции была установлена версия Enterprise Visual Basic 4.0 и выше. Технология Remote Data Objects (RDO) - Объекты для доступа к внешним данным -трактует запросы ODBC как объекты. Запросы работают со свойствами этих объектов и используют их методы, чтобы получить данные. В свою очередь, RDO конвертирует все действия в вызовы ODBC API. В принципе то же самое делает процессор баз данных, но во многих случаях RDO работает быстрее. Однако RDO также требует написания многих строчек кода, хотя и не такого сложного, как в случае прямого обращения к ODBC API. Ну и вспомните, что установка Enterprise версии Visual Basic стоит около 1000 долларов. Использование SQL DMO. За счет использования SQL OLE в этом случае не используются ни процессор баз данных, ни ODBC. В данном случае мы работаем с SQL-DMO. В этой технологии мы можем использовать такие продукты, как Visual Basic for Application, Visual Basic (32 bit), Visual FoxPro и C++ (32 bit), для работы с объектами, которые позволяют нам управлять различными SQL серверами в сети. Этот способ работает только под Windows NT и Windows 95. При этом на рабочей станции вам



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