при выполнении обработки данных можно свободно обращаться к любой строке или любой колонке таблицы.
Значения, хранимые в таблице, не накладывают никаких ограничений на порядок обращения к данным.
Система управления базами данных реализована в SQL сервере MSSQL.
1.4 Основы SQL
Язык SQL предназначен исключительно для описания запросов к базам данных и поэтому отличается от других языков программирования высокого уровня.
Во-первых, этот язык предназначен для манипулирования данными из реляционных БД, поэтому логика языка опирается на четкую табличную структуру данных, что позволило использовать достаточно простой набор основных команд (простой объект работы - простое средство работы).
Во-вторых, в языке SQL реализована трехзначная логика, то есть помимо значений True и False логические переменные могут принимать значение unknown, которое соответствует пустой ячейке таблицы или значению Null.
В-третьих, SQL - это непроцедурный язык. Запрос определяет, что нужно сделать с данными и передается для выполнения СУБД, он не является последовательностью инструкций.
Все операторы языка разбиты на три основные категории:
Язык определения данных (Data Definition Language - DDL) содержит операторы для создания объектов БД и определения их структуры. К ним относятся операторы create schema, create table, create view, create DOMAIN.
Язык управления данными (Data Manipulation Language - DML) объединяет операторы поиска, удаления, изменения и сохранения данных. Сюда входят операторы select, update, insert, delete. Важнейшим из них (вероятно, и во всем языке SQL) является оператор select.Реализация SQL в Delphi
До настоящего момента мы обсуждали проблемы разработки локальных приложений БД. Теперь же обратимся к вопросам разработки программ в архитектуре клиент/сервер. В чем же состоит различие между этими типами приложений?
Было бы неверно думать, что локальные приложения БД работают только на одном компьютере и в этом состоит их главная особенность. На самом деле такая программа вполне может функционировать в локальной сети и обслуживать нескольких клиентов одновременно.
Основное же отличие между локальными и клиент/серверными приложениями заключается в четком разграничении функций приложения и их распределении по различным компьютерам. При этом говорят о серверной и клиентской частях приложения. На сервер ложится обязанность по управлению базой данных и обслуживанию многочисленных клиентских запросов, а клиент обслуживает отдельного .пользователя и "умеет" связываться с сервером, отправлять запросы и получать результаты.
Таким образом, архитектура клиент/сервер обеспечивает одновременное обслуживание множества пользователей. Естественно, что применяются они на больших промышленных предприятиях, в крупных компаниях и корпорациях и т. д.
Архитектура клиент/сервер предъявляет очень высокие требования к серверной части, которая строится на основе специальных программных комплексов, которые так и называются серверами БД или серверами SQL, так как при работе с ними используется специальный язык запросов к базам данных SQL (Structured Query Language).
SQL- это легкий для понимания язык и в то же время универсальное программное средство управления данными.
Успех языку SQL принесли следующие его особенности:
Независимость от конкретных СУБД;
Переносимость с одной вычислительной системы на другую;
Наличие стандартов;
Одобрение компанией IBM (СУБД DB2);
Поддержка со стороны компании Microsoft (протокол ODBC);
Реляционная основа;
Высокоуровневая структура, напоминающая английский язык;
Возможность выполнения специальных интерактивных запросов;
Обеспечение программного доступа к базам данных;
Возможность различного представления данных;
Полноценность как языка, предназначенного для работы с базами данных;
Возможность динамического определения данных;
Поддержка архитектуры клиент/сервер.
Все перечисленные выше факторы явились причиной того, что SQL стал стандартным инструментом для управления данными на персональных компьютерах, мини-компьютерах и больших ЭВМ.
SQL используется для считывания информации из базы данных с помощью оператора SELECT. Можно прочитать данные полностью либо частично, отсортировать их и получить итоговые значения (вычисляя суммы и средние величины).
SQL используется для изменения базы данных. Оператор INSERT добавляет новые данные, оператор DELETE удаляет данные, а оператор UPDATE обновляет существующие данные.
SQL используется для управления доступом к базе данных. С помощью операторов SQL предоставляются и отменяются различные привилегии для различных пользователей.
SQL используется для создания базы данных, определения структуры новых таблиц и удаления таблиц, ставших ненужными.
В настоящее время распространена классификация приложений баз данных в соответствии с уровнями обработки данных. В соответствии с ней простые однопользовательские программы, работающие с маломощными локальными СУБД, являются одноуровневыми. В таких приложениях вся обработка данных ведется самой программой, а СУБД лишь обеспечивает доступ к таблицам.
Созданные в Delphi приложения баз данных для взаимодействия с данными используют возможности BDE, который представляет собой еще один уровень обработки. Однако так как BDE обеспечивает выполнение сервисных операций, то при классификации приложений баз данных BDE обычно не учитывается.
Для создания эффективных приложений клиент/сервер необходимо уметь использовать разнообразные специализированные инструменты. Главное место среди них принадлежит языку запросов SQL и компоненту доступа к данным TQuery, который обеспечивает применение запросов в приложениях баз данных.
1.5 Соединение с сервером
Все обращения из приложения к таблицам одной базы данных на сервере осуществляются через одно соединение, на которое замыкаются все компоненты доступа к данным, имеющие соответствующие значения свойства Database Name.
Все управление одиночным соединением с какой-либо базой данных осуществляется компонентом TDatabase. В общем случае применение этого компонента в приложениях баз данных необязательно. Однако при работе с серверами SQL он необходим, так как:
позволяет управлять соединением с базой данных;
позволяет управлять транзакциями проще, чем при помощи операторов SQL;
обеспечивает регистрацию пользователя на сервере.
При обычном использовании локальных баз данных можно прекрасно обойтись и без этого компонента. В процессе работы компонент активно использует параметры псевдонимов и драйверов BDE.
Для определения базы данных (сервера), с которой приложение устанавливает соединение при помощи компонента TData base, чаще используется СВОЙСТВО Alias Name. Свойства Database Name и Driver Name предоставляют альтернативный способ создания соединения. Если соединение задано свойством Alias Name, то свойство Database Name можно использовать для создания временного псевдонима, который будет доступен только для компонентов доступа к данным внутри приложения. При щелчке на кнопке списка доступных псевдонимов свойства Database Name в Инспекторе объектов для любого компонента доступа к данным, в списке будет доступен и временный псевдоним компонента TData base.
Например, при переключении приложения на другую базу данных можно изменить только значение псевдонима в компоненте TData base. Если все компоненты наборов данных подключены к временному псевдониму компонента TData base, то они автоматически переключатся на новую БД.
Если наборы данных приложения подключены к базе данных через компонент TData base, то перед их открытием необходимо установить соединение с БД. Соединение с БД устанавливается при помощи метода open. Если попытаться активизировать набор данных без этого, то соединение будет установлено автоматически. Аналогичная картина возникает при закрытии наборов данных и отключении от БД.
При подключении к базе данных довольно часто требуется задать значения для параметров драйвера BDE. Для этого используется свойство params, представляющее собой обычный список. В нем необходимо задавать названия изменяемых параметров и их новые значения:
USERNAME=SYSDBA PASSWORD=masterkey
Значения параметров можно задавать как статически, так и динамически во время выполнения.
1.6 Как работает запрос
Теперь настало время разобраться с основными принципами работы запросов в приложениях баз данных Delphi. Главную роль в подготовке и диспетчеризации запросов SQL играет BDE. Непосредственную обработку запросов выполняет специальный элемент архитектуры процессора БД - система обработки запросов, которая идентифицирует набор данных запроса, выполняет проверку синтаксиса и, в зависимости от установленных значений параметров BDE, передает локальный вариант запроса стандартному драйверу соответствующей БД или адресует запрос серверу БД через систему драйверов SQL Links.
Инициатором запроса выступает приложение. Для создания и выполнения запросов предназначен компонент TQuery, который содержит текст запроса, умеет выполнять его, и инкапсулирует набор данных с результатом выполнения запроса. Этот набор данных можно использовать так же, как и любой другой набор данных, созданный при помощи компонента ТТаblе.
После получения команды на выполнение запроса компонент TQuery инициализирует процесс подготовки запроса к выполнению, который включает несколько этапов.
Основная задача подготовки запроса - установить связь между СУБД, которая будет выполнять запрос, и набором данных соответствующего компонента TQuery. Если это удалось сделать, то определяется способ выполнения запроса - локальный доступ через стандартный драйвер или передача текста запроса для выполнения серверу. При этом становится ясным, будет ли результат выполнения запроса редактируемым. После этого задаются значения для переменных параметров запроса.
Если запрос выполняется локально, то через стандартный драйвер он передается соответствующей СУБД, которая выполняет его. По установленной при подготовке запроса связи результат передается в набор данных приложения. Если запрос адресован серверу SQL, то подразумевается, что он имеет специфический синтаксис, присущий данному серверу. Поэтому вся специальная подготовка параметров запроса осуществляется на стороне сервера. BDE лишь обеспечивает передачу запроса и возврат результата выполнения набору данных приложения.
Если запрос имеет простую структуру, то его подготовка и выполнение может быть проведена ускоренно в один этап за счет использования специальной функции API BDE DbiQExecDirect.
Еще один способ выполнения запросов для серверов SQL - прямое обращение к функциям API соответствующего сервера. Это самый быстродействующий, но и самый трудоемкий для разработчика способ.