Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1 Базы данных.docx
Скачиваний:
21
Добавлен:
23.09.2019
Размер:
808.59 Кб
Скачать

Оператор соединения

Реляционная алгебра:

Оператор SQL:

SELECT A.Поле1, A.Поле2, …, B.Поле1, B.Поле2, …

FROM A, B

WHERE c;

или

SELECT A.Поле1, A.Поле2, …, B.Поле1, B.Поле2, …

FROM A CROSS JOIN B

WHERE c;

Оператор пересечения

Реляционная алгебра:

Оператор SQL:

SELECT *

FROM A

INTERSECT

SELECT *

FROM B;

Оператор деления

Реляционная алгебра:

Оператор SQL:

SELECT DISTINCT A.X

FROM A

WHERE NOT EXIST

(SELECT *

FROM B

WHERE NOT EXIST

(SELECT *

FROM A A1

WHERE

A1.X = A.X AND

A1.Y = B.Y));

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

Пусть отношение A содержит данные о поставках деталей, отношение B содержит список всех деталей, которые могут поставляться. Атрибут X является номером поставщика, атрибут Y является номером детали.

Разделить отношение A на отношение B означает в данном примере "отобрать номера поставщиков, которые поставляют все детали".

Преобразуем текст выражения:

"Отобрать номера поставщиков, которые поставляют все детали" эквивалентно

"Отобрать те номера поставщиков из таблицы A, для которых не существует непоставляемых деталей в таблице B" эквивалентно

"Отобрать те номера поставщиков из таблицы A, для которых не существует тех номеров деталей из таблицы B, которые не поставляются этим поставщиком" эквивалентно

"Отобрать те номера поставщиков из таблицы A, для которых не существует тех номеров деталей из таблицы B, для которых не существует записей о поставках в таблице A для этого поставщика и этой детали".

Последнее выражение дословно переводится на язык SQL. При переводе выражения на язык SQL нужно учесть, что во внутреннем подзапросе таблица A должна быть переименована, для того чтобы отличать ее от экземпляра этой же таблицы, используемой во внешнем запросе.

Выводы

Фактически стандартным языком доступа к базам данных в настоящее время стал язык SQL (Structured Query Language).

Язык SQL оперирует терминами, несколько отличающимися от терминов реляционной теории, например, вместо "отношений" используются "таблицы", вместо "кортежей" - "строки", вместо "атрибутов" - "колонки" или "столбцы".

Стандарт языка SQL, хотя и основан на реляционной теории, но во многих местах отходит он нее.

Основу языка SQL составляют операторы, условно разбитые не несколько групп по выполняемым функциям:

  • Операторы DDL (Data Definition Language) - операторы определения объектов базы данных.

  • Операторы DML (Data Manipulation Language) - операторы манипулирования данными.

  • Операторы защиты и управления данными, и др.

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

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

46 Компоненты Delphi для работы с БД: TQuery (назначение, свойства, методы события).

Компонент TQuery реализует все основные функции стандартного компонента запроса, описанные в гл. 12. Прямым предком компонента является класс TDBDataSet.

Для подключения к базе данных используется свойство DatabaseName, в котором задается псевдоним BDE или путь к базе данных.

Текст запроса определяется свойством SQL, для задания которого применяется простой редактор, открывающийся при щелчке на кнопке свойства в Инспекторе объектов (рис. 16.6).

Для управления текстом запроса во время выполнения приложения можно использовать возможности класса TStrings.

Основные свойства и методы компонента TQuery представлены в табл. 16.9.

Таблица 16.9. Свойства и методы компонента TQuery

Объявление

Тип

Описание

Свойства

property Constrained: Boolean;

Pb

При значении True запрещает внесение в набор данных таких значений, которые не соответствуют условиям отбора запроса. Применимо для локальных БД

property DataSource: TDataSource;

Pb

Ссылается на компонент TDataSource, из набора данных которого задаются значения параметров

property Local: Boolean;

Ro

Значение True означает, что запрос обращается к локальной таблице

property ParamCheck: Boolean;

Pb

При значении True параметры запроса обновляются при изменении свойства SQL во время выполнения

property ParamCount: Word;

Ro

Возвращает число параметров в запросе

property Params [Index : Word]TParams;

Pb

Индексированный список объектов TParams, каждый из которых соответствует одному параметру запроса

property Prepared: Boolean

Pu

Возвращает результат выполнения операции подготовки запроса к выполнению

property RequestLive: Boolean;

Pu

При значении False результат запроса нельзя редактировать, независимо от того, редактируемый результат или нет. При значении True результат запроса можно редактировать, но только если он "живой"

property RowsAffected: Integer;

Ro

 

Возвращает число модифицированных записей набора данных с момента последнего выполнения запроса

property SQL: TStrings;

Pb

Содержит текст запроса

property SQLBinary: PChar;

Pu

Внутреннее свойство для обеспечения работы с ВОЕ

property StmtHandle: HDBIStmt;

Ro

Возвращает экземпляр объекта, соответствующего запросу в BDE. Используется при прямом вызове функций BDE

property Text: PChar;

Ro

Указатель на символьный массив, содержащий передаваемый в BDE текст запроса

property UniDirectional: Boolean;

Pb

Определяет тип используемого курсора данных

Методы

procedure ExecSQL;

Pu

Выполняет запрос без открытия набора данных

procedure GetDetailLinkFields (MasterFields, DetailFields: TList) ; override;

Pu

Заполняет списки параметров метода экземплярами объектов полей двух таблиц запроса, находящихся в отношении "один-ко-многим"

function ParamByName (const Value: string) : TParam;

Pu

Возвращает ссылку на экземпляр объекта параметра с именем, переданным в параметре Value

procedure Prepare;

PU

Готовит запрос к выполнению

procedure UnPrepare;

Pu

Освобождает ресурсы, занятые при подготовке запроса к выполнению

 

 

Рис 16.6. Редактор свойства SQL компонента TQuery

 

47 Визуальные компоненты Delphi для манипулирования данными.

В данной статье мы кратко остановимся на иерархии классов Delphi и рассмотрим некоторые компоненты VCL Delphi, которые располагаются на закладках Standard и Additional.

Настало время рассмотреть компоненты, входящие в библиотеку визуальных компонентов (Visual Component Library) Delphi. Библиотека визуальных компонентов содержит большое число классов <готовых к употреблению>. Вся VCL построена по иерархическому принципу. Хотя VCL и называется библиотекой визуальных компонентов, на самом деле в нее входят также и невизуальные компоненты. Отметим, что визуальными называются компоненты, которые видны на форме как во время создания приложения, так и во время работы приложения. Невизуальные компоненты - видны только во время разработки приложения.

Все компоненты VCL являются классами. И все они являются потомками базового класса TObject. Данный класс является абстрактным и содержит базовые методы, которые наследуются классами-потомками. Основные методы класса TObject - это: Create - метод, вызываемый для создания объекта; Destroy - метод, вызываемый для удаления объекта; Free - метод, вызываемый для уничтожения объекта, при вызове данного метода освобождается память, выделенная для данного объекта.

Прямыми потомками класса TObject являются классы TPersistent, TException и TIniFile.

Нам для рассмотрения компонентов Delphi наиболее интересен класс TPersistent, который добавляет к методам класса TObject метод Assign. Этот метод позволяет передавать поля и свойства одного объекта другому.

Потомками класса TPersistent являются классы TComponent, TClipboard и TStrings. Именно класс TComponent является базовым классом для всех компонентов VCL Delphi, расположенных в палитре компонентов.

Сразу после установки Delphi, в палитре компонентов мы видим 19 закладок:

Каждая закладка объединяет стандартные компоненты Delphi в группы по отдельным признакам. Рассмотрим эти закладки:

Standard - здесь расположены стандартные компоненты, обеспечивающие некоторые функции интерфейса пользователя.

На этой закладке расположены следующие компоненты (слева направо):

Название

Название на русском языке

Краткое описание компонента

Frames

Фреймы

Фрейм - это похожий на форму компонент, который используется для размещения внутри него других компонентов. Может размещаться на формах или других фреймах. Для создания нового фрейма нужно выбрать пункт меню File/New Frame (Файл/Новый Фрейм)

MainMenu

Главное меню

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

PopupMenu

Всплывающее меню

Служит для создания так называемого всплывающего меню - меню, которое отображается после щелчка правой кнопкой мыши в определенной области приложения

Label

Метка

Служит для простого отображения текстовой информации, которую пользователь не может редактировать во время работы приложения

Edit

Поле для ввода

Служит для отображения текстовой информации, которую пользователь может изменять. Удобно применять для ввода или редактирования какой-либо текстовой информации

Memo

Многострочное поле

Работает как и поле для ввода, только позволяет вводить (редактировать) несколько строк текста

Button

Кнопка

Обычная кнопка предназначена для выполнения какого-либо кода по наступлению события нажатия на кнопку пользователем

CheckBox

Флажок

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

RadioButton

Переключатель

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

ListBox

Список

Предназначен для вывода нескольких строк текста. Пользователь может выбрать любую из этих строк простым нажатием на ней

ComboBox

Выпадающий список

Является как бы комбинацией списка и поля для ввода. Пользователь может ввести самостоятельно текст в поле, либо выбрать нужный из предоставленного списка

ScrollBar

Полоса прокрутки

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

GroupBox

Группа

Создает так называемый контейнер, который может содержать внутри себя компоненты. Эти компоненты объединяются в одну группу. Служит в основном для удобства работы с разными группами компонентов на одной форме

RadioGroup

Группа переключателей

Создает группу переключателей. Эти переключатели не зависят от других групп или одиночных переключателей

Panel

Панель

Используется для созданий строк состояния или панелей инструментов. На панели могут размещаться другие компоненты

ActionList

Список действий

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

Additional - на этой закладке располагаются дополнительные интерфейсные компоненты.

Данная закладка содержит следующие компоненты (слева направо):

Название

Название на русском языке

Краткое описание компонента

BitBtn

Кнопка с рисунком

Кнопка, которая, помимо текста, может отображать рисунок

SpeedButton

Кнопка быстрого доступа

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

MaskEdit

Поле для ввода по шаблону

Компонент похож на поле для ввода, только позволяет вводить информацию по определенным правилам, например - паспортные данные, почтовый индекс, номер телефона и др.

StringGrid

Таблица со строками

Компонент позволяет работать со строками текста, размещая их в таблицу. Позволяет быстро создавать приложения, наподобие электронных таблиц

DrawGrid

Таблица

Позволяет работать с произвольной информацией в таблице

Image

Рисунок

Служит для отображения графического растрового файла, иконки или метафайла

Shape

Геометрическая фигура

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

Bevel

Фаска

Позволяет украсить ваше приложение, путем размещения <трехмерных> линий или прямоугольников

ScrollBox

Область прокрутки

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

CheckListBox

Список переключателей

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

Splitter

Разделитель

Размещается между двумя выровненными компонентами-контейнерами и позволяет пользователю во время работы приложения изменять размеры этих компонентов с помощью перемещения разделителя

StaticText

Статический текст

Компонент похож на метку, но имеет некоторые дополнительные возможности (о них мы поговорим в дальнейшем)

ControlBar

Панель инструментов

Позволяет быстро создавать панели инструментов

ApplicationEvents

События приложения

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

Chart

Диаграмма

Позволяет отображать диаграммы различной формы и вида

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

48 Процедура создания отчетов в Delphi.

49 Rave Report: компоненты вывода.