Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Горев “Эффективная работа с СУБД”.pdf
Скачиваний:
208
Добавлен:
28.06.2014
Размер:
4.71 Mб
Скачать

converted to PDF by HupBaH9I

это свойство перед использованием вышеприведенных методов, особенно при работе с данными из присоединенных таблиц.

Глава 8

Использование технологии клиент-сервер

8.1. Работа с внешними данными с помощью технологии ODBC

Команды Transact-SQL

Создание представлений Создание триггеров

8.2.Использование Visual FoxPro для разработки клиентского приложения

Синхронный и асинхронный процессы Создание внешних представлений

8.3.Использование Access и Visual Basic для разработки клиентского приложения

8.4.Использование ODBC API для доступа к внешним данным

8.5.Remote Data Objects

8.6.Внешнее управление сервером с помощью SQL-DMO

До сих пор мы вели речь о приложениях, работающих на одном, локальном компьютере. Если речь шла о компьютерной сети, то БД могла располагаться на файл-сервере или нескольких файл-серверах, в качестве которого может использоваться либо специально выделенный компьютер, либо одна из объединенных в сеть наиболее мощных ПЭВМ. Функции файл-сервера заключаются в основном в хранении БД и обеспечении доступа к ним пользователей, работающих на различных компьютерах. Эти функции обеспечиваются, как правило, той же СУБД, которая работает и на компьютерах пользователей.

При небольших объемах данных эта схема вполне удовлетворяет всем современным требованиям, но с увеличением числа компьютеров в сети или ростом БД начинают возникать проблемы, связанные с резким падением производительности. Это связано с увеличением объема данных, передаваемых по сети, так как вся обработка производится на компьютере пользователя. Если пользователю требуется пара строк из таблицы объемом в сотни тысяч записей, то сначала вся таблица с файл-сервера передается на его компьютер, а затем СУБД отбирает нужные записи. В этом случае длительные перерывы в работе и число выпитых чашек кофе можно сильно сократить, перейдя на технологию клиент-сервер.

Технология клиент-сервер разделяет приложение на две части, используя лучшие качества обеих сторон. Front-end (клиентская часть) обеспечивает интерактивный, легкий в использовании, обычно графический интерфейс - находится на компьютере пользователя. Backend (сервер) обеспечивает управление данными, разделение информации, изощренное администрирование и безопасность - находится на специально выделенных компьютерах или даже мейн-фреймах.

При технологии клиент-сервер клиентское приложение (front-end) формирует запрос к серверу БД (back-end), на котором выполняются все команды. Результаты команд посылаются затем клиенту для использования и просмотра.

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

MS SQL Server является на настоящий момент одним из наиболее мощных серверов БД.

8.1. Работа с внешними данными с помощью технологии

ODBC

Важнейшим этапом в построении приложения клиент-сервер является установка связи клиентского приложения с источником данных, находящимся на сервере БД. В настоящий момент

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

В этом параграфе мы рассмотрим основы применения технологии ODBC для установки связи с

MS SQL Server.

converted to PDF by HupBaH9I

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

В качестве сервера может выступать любой сервер БД, имеющий драйвер 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(),

 

чтобы передать указатель соединения,

 

имя источника данных, идентификатор

 

пользователя и пароль Диспетчеру

 

драйверов.

Диспетчер

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

 

converted to PDF by HupBaH9I

драйверов

приложением и источником данных,

 

обеспечивая информацией

 

приложение и загружая драйверы

 

динамически, по мере необходимости.

 

ODBC позволяет приложению

 

взаимодействовать с источниками

 

данных разных типов посредством

 

драйверов СУБД, используя

 

Администратор ODBC для установки

 

соединения. Диспетчер драйверов и

 

сами драйверы разработаны как

 

библиотеки DLL. Диспетчер драйверов

 

загружает нужную библиотеку,

 

соединяется с сервером с помощью

 

драйвера, который на самом деле и

 

выполняет все вызовы функций из

 

приложения.

Драйвер

Выполняет все вызовы ODBC функций,

 

управляет всеми взаимодействиями

 

между приложением и сервером,

 

переводит SQL выражения на

 

синтаксис источника данных.

 

Драйверы обычно поставляются

 

продавцом сервера БД и имеет смысл

 

получить самую последнюю версию, в

 

которой, вероятнее всего, будет

 

наименьшее количество ошибок.

 

Драйвер перехватывает все ошибки

 

программ, переводя их в стандартные

 

ошибки ODBC. Драйвер позволяет

 

узнать информацию об объектах в

 

базе данных, таких как таблицы, поля,

 

индексы и т. п.

Сервер БД

Хранит и выводит данные в ответ на

 

запросы со стороны ODBC драйвера.

 

Сервер по запросу возвращает данные

 

или код ошибки, которые передаются

 

в приложение.

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

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

снабдили свои продукты самыми разнообразными технологиями и средствами для доступа к внешним данным.

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

converted to PDF by HupBaH9I

Рис. 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. В данном случае мы работаем с SQLDMO. В этой технологии мы можем использовать такие продукты, как Visual Basic for Application, Visual Basic (32 bit), Visual FoxPro и C++ (32 bit), для работы с объектами,

которые позволяют нам управлять различными SQL серверами в сети. Этот способ работает только под Windows NT и Windows 95. При этом на рабочей станции вам

Соседние файлы в предмете Программирование на Delphi