Структура DB-Aware компонентов 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Структура DB-Aware компонентов



Компоненты, работающие с данными, часто называют DB-Aware-компонентами (далее DB-A). Их отличительной особенностью является возможность подключения к какой-либо части базы данных, скажем, к таблице или отдельному полю. Создание компонентов для работы с данными не является сложной задачей. В отличие от других категорий компонентов, DB-A не имеют единой иерархии классов. Процесс создания таких компонентов может быть определен как преобразование какого-либо элемента управления в элемент управления, работающий с данными.

 

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

 

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

 

В зависимости от возможностей DB-A можно условно разделить на две категории:

компоненты, только отображающие данные

компоненты, способные модифицировать наборы данных.

 

Естественно, что первый тип компонентов устроен проще, чем второй.

В общем случае схема построения компонентов, работающих с данными, может быть представлена следующим образом (рисунок 1):

 

 

Класс TDataLink

 

Класс TDataLink является базовым классом для иерархии классов связи с БД. Класс обеспечивает коммуникационный канал для чтения/записи в БД.

 

Данный класс описан в модуле DB

 

(Его свойства по ссылке выше есть, но я не думаю что это понадобится, но на всякий случай)

 

Способ построения отчётов с использованием вывода информации в HTML.

http://win-ni.ru/db/lab8_1.html

http://window.edu.ru/window_catalog/pdf2txt?p_id=9223&p_page=1

 

Это информация по SQL запросу взята со второй ссылки

 

При работе с БД широко применяется понятие запроса к ней. Под

запросом понимается требование совершить определенное действие с

информацией из БД. Можно выбрать данные в соответствии с заданным

условием и отобразить результат – запрос на выборку. Можно также

вставить, удалить, обновить определенные записи в БД, используя соответствующие запросы. Такие требования формируются на специальных

языках программирования QBE и SQL. SQL нашел более широкое

распространение, в Delphi его можно использовать при создании приложения

для работы с БД.

SQL-запрос

На языке SQL можно создать запросы различных типов:

• запрос на выборку данных;

• запрос на добавление;

• запрос на обновление;

• запрос на удаление.

SQL-запрос, созданный с помощью DBD, помещается в файл с

расширением sql.

Каждый запрос на языке SQL состоит из нескольких частей, которые

начинаются с определенного зарезервированного слова. При записи запросов

можно использовать как прописные, так и строчные буквы. Информацию

можно разбивать на строки произвольным образом, но желательно в

отдельные строки помещать информацию, имеющую определенное

смысловое назначение. Для разделения отдельных зарезервированных слов,

идентификаторов, чисел, строк, знаков операций и т.д. следует использовать

пробелы.

Запрос на выборку.

Он предназначен для извлечения данных, находящихся в определенных

полях одной или нескольких таблиц и соответствующих задаваемым

условиям. Конструкция запроса следующая:

SELECT [DISTINCT] <список выводимых полей>

FROM <список используемых таблиц>

[WHERE <условие отбора>]

[ORDER BY <порядок сортировки>]

[GROUP BY <порядок группировки>]

[HAVING <условие отбора групп>]

[UNION <объединяемый запрос на выборку>]

Рассмотрим подробнее отдельные части запроса.

DESTINCT – указывает, что в результате запроса не должно быть

повторяющихся значений.

<список выводимых полей>:

[<таблица>.]<поле>[AS <псевдоним>]{,[<таблица>.]<поле>[AS

<псевдоним>]}, где таблица – имя таблицы, если в запросе присутствует

только одна таблица, его можно опустить; поле – имя поля; псевдоним

псевдоним для имени поля является локальным в запросе; AS – оператор,

ставящий в соответствие конкретному полю псевдоним. Если требуется

получить данные из всех полей таблицы, то достаточно указать * вместо

перечисления всех имен полей.

<список используемых таблиц>:

“<файл с таблицей>” [<псевдоним>]{,”<файл с

таблицей>”[<псевдоним>]}.

WHERE – зарезервированное слово, с которого начинается оператор задания

условий.

<условие отбора>:

Условие, устанавливающее объединение:

[(<таблицаM.поле1> <условие> <таблицаN.поле2>)]{AND|OR

(<таблицаI.поле1> <условие> <таблицаJ.поле2>)}, где таблицаM, таблицаN,

таблицаI, таблицаJ – имена объединяемых таблиц; поле1, поле2 – имена

полей в этих таблицах, по соответствию значений которых устанавливается

взаимосвязь таблиц; условие – определяет соответствие значений в заданных

полях двух таблиц, например: равенство, больше, меньше, не равно и другие

операции сравнения; условий может быть несколько, в этом случае они

объединяются при помощи круглых скобок и логических операций AND и

OR. Если условие для объединения отсутствует, формируется результат,

представляющий собой всевозможные объединения записей всех таблиц.

Условие на значение полей:

[[<таблица>.]<поле> <условие> <значение>] {AND|OR

[<таблица>.]<поле> <условие> <значение>}.

Помимо математических, используются также логические операторы

сравнения, предикаты IN, LIKE и другие.

ORDER BY – зарезервированное слово, с которого начинается оператор

задания порядка сортировки.

<порядок группировки>:

[<таблица>.]<поле> {,[<таблица>.]<поле>}.

Запрос на добавление.

Этот запрос позволяет добавить запись в таблицу и присвоить значения

ее полям. Конструкция запроса следующая:

INSERT INTO “<файл с таблицей>” (<поле>{,<поле>})

VALUES (<значение>{,<значение>}).

Рассмотрим подробнее отдельные части запроса:

файл с таблицей – имя файла с таблицей, в которую добавляется запись;

должен быть с расширением и содержать путь;

поле – имя поля, которому задается значение.

VALUES - зарезервированное слово, с которого начинается оператор

задания списка значений полям таблицы; значение – значение из списка

значений, которое задается соответствующему полю новой записи (их

количество должно равняться числу полей).

3. Запрос на обновление.

Этот запрос позволяет обновить значения в записях, которые

соответствуют задаваемым условиям. Конструкция запроса следующая:

UPDATE “<файл с таблицей>”

SET <поле> = <значение>{, <поле> = <значение>}

[WHERE <условие отбора>]

Рассмотрим некоторые части запроса:

SET – зарезервированное слово, с которого начинается оператор, задающий

список подставляемых значений; <поле> = <значение>{, <поле> =

<значение>} – список полей и значений, которые задаются этим полям.

[WHERE <условие отбора>] – оператор, задающий условие отбора тех

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

Запрос на удаление.

Этот запрос позволяет удалить из таблицы записи, удовлетворяющие

заданным условиям. Конструкция запроса следующая:

DELETE FROM «<файл с таблицей>»

[WHERE <условие отбора>].

Запрос к БД (Query)

Использование одной компоненты Table позволяет работать только с

одной таблицей. Поэтому, когда необходимо работать с несколькими

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

Table. В этом случае целесообразно взять компоненту Query класса TQuery,

являющегося потомком класса TDBDataSet. Эта компонента позволяет

определить набор данных на основе нескольких таблиц с помощью SQL -

запроса. Ее также удобно применять, когда таблица БД чрезмерно велика; в

этом случае с помощью запроса можно ограничить набор рассматриваемых

данных. Использование этой компоненты связано со знанием языка SQL.

Отметим сразу, что можно создать оператор Delphi SQL при помощи

компоненты Query следующим образом:

1) поместить на форму объекты Query, DataSource и связать их вместе;

2) присвоить псевдоним объекта TQuery свойству DataBaseName;

3) с помощью свойства SQL ввести указание SQL;

3) установить свойство Active в значение True.

Если каждый шаг был завершен правильно и если BDE установлено

корректно, сетка должна будет содержать записи из указанной таблицы.

Delphi позволяет создавать SQL -запросы к БД как статические, в

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

запросы с параметрами). Динамические SQL -запросы содержат параметры,

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

программы могут изменяться. Таким образом, с помощью одного

динамического запроса можно получать различные результаты при

выполнении приложения. Синтаксическая конструкция динамических

запросов аналогична статическим, за исключением того, что у них в секции,

определяющей условия отбора записи, вместо значения записывается <параметр>, где параметр – имя параметра, вместо которого при выполнении

приложения будет подставляться значение.

У класса TQuery отметим следующие наиболее важные свойства,

которые он добавляет к наследуемым от классов TDataSet, TBDEDataSet и

TDBDataSet:

Local – определяет расположение таблиц (True – локальные таблицы,

False – таблицы на SQL -сервере); свойство только для чтения.

RequestLive – свойство логического типа (по умолчанию имеет значение

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

результате выполнения запроса. Эта возможность имеется, если свойство

имеет значение True, и у запросов, которые основаны на одной таблице и не

используют сортировку и агрегатные функции. У остальных запросов

результат доступен только для чтения независимо от значения данного

свойства. В этих случаях можно посмотреть свойство CanModify для того

чтобы увидеть, успешен ли запрос, если же нужно откорректировать таблицу

с помощью запроса SQL, то следует использовать команду SQL Update.

SQL – свойство типа TStrings, определяет текст SQL -запроса, который

используется при выполнении методов Open или ExecSQL.

UniDirectional – определяет направление перемещения курсора по

набору данных, полученному в результате выполнения запроса.

UpdateMode – свойство типа TUpdateMode, определяет способ

обновления записей из промежуточного буфера.

Следующие свойства компоненты TQuery используются в динамических SQL -запросах. Приведем некоторые из них:

DataSource – свойство типа TDataSource, определяет источник данных,

значения полей которого используются как параметры для динамического

запроса.

Params[Index] – свойство типа TParams, задает список элементов типа

TParams, которые определяют параметры в динамическом запросе. С

помощью этого свойства в редакторе значений параметров задаются

начальные величины параметров. Чтобы перейти к редактору значений

параметров запроса, нужно активизировать мышью значение этого свойства.

Класс TQuery добавляет к наследуемым от классов TDataSet,

TBDEDataSet и TDBDataSet следующие методы (некоторые из них):

ExecSQL – процедура выполняет SQL -запрос.

Prepare – процедура посылает запрос в BDE для проверки синтаксиса и

оптимизации. Рекомендуется выполнять для динамических запросов.

События, которые обрабатываются компонентой TQuery, полностью

наследуются от класса TDataSet.

При подстановке переменных связи в динамический запрос

программным методом с помощью свойства Params выполняются обычно

следующие шаги:

1) необходимо убедиться в том, что таблица закрыта;

2) подготавливается объект TQuery с помощью выдачи команды Prepare;

3) Свойству Params присваиваются конкректные значения;

4) Открывается запрос.

Пример № 1. Создание запроса для вывода записей, имеющих фамилию,



Поделиться:


Последнее изменение этой страницы: 2017-02-21; просмотров: 232; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.223.172.252 (0.059 с.)