ЗАДАНИЕ XXVII

Тема: Работа с базами данных
Цель: Краткое знакомство с инструментарием для работы с базами данных в среде Stratum Computer.

Перед началом работы необходимо:

pin2.gif (1000 bytes) владеть работой с клавиатурой и мышкой;
pin2.gif (1000 bytes) владеть основными приемами работы в системе Stratum.
pin2.gif (1000 bytes) владеть языком запросов к базам данных SQL

 

Основные понятия

        Обработка баз данных построена на использовании BDE (Borland Database Engine) фирмы BORLAND. Поэтому работа с базами данных возможна только при установленном BDE. При его отсутствии STRATUM будет функционировать нормально, но без поддержки баз данных (Проекты, использующие базы, работать не будут).
Поскольку работа с базами данных бывает нужна далеко не всегда, поддержка баз данных изначально не загружается. При первом обращении к функции работы с базами происходит инициализация BDE, и в случае успеха становятся доступными все остальные функции по работе с базами.

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

Номер Пол Фамилия Имя Количество Пользовательские имена
1 м Жуков Иван 100.2 1-я запись
55 ж Цветкова Наталья 201.6 2-я запись
56 м Жаров Кирилл 0.002 3-я запись
70 м Бабочкин Кирилл 22.35 4-я запись

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

При работе с такой таблицей приняты следующие понятия:

  1-е поле 3-е поле 5-е поле 2-е поле 4-е поле
Системные имена полей number sex family name quantity
Тип полей integer char string string real
Размер поля     [11] [10]  

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

Функции для работы с базой данных
       

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

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

        Имидж, осуществляющий открытие базы (реализует функцию DbOpenBase) выглядит следующим образом.

Иконка имиджа Название имиджа Переменные имиджа Описание переменных имиджа
Иконка имиджа BaseOpen BaseOpen HBase Дескриптор на открытую базу

Функции для работы с таблицами

        Таблицу можно создать с помощью функции DbCreateTable, или через SQL запрос.
Существующие таблицы для работы открываются функцией DbOpenTable и могут быть закрыты функцией DbCloseTable. Записи можно добавить функцией DbAppendRecord.

Изменение содержимого таблицы осуществляется через текущую запись. После открытия таблицы активной становится первая запись (точнее, нулевая, так как нумерация записей начинается с нуля). Далее, можно передвигать текущую запись вперед по таблице и назад (см. DbSkip) или сразу на начало/конец таблицы (см. DbGoTop и DbGoBottom). В текущей записи можно прочитать и изменить значение полей (см. DbSetField, DbGetField). Для удаления записей используется функция DbDeleteRecord.

Визуально просматривать и редактировать содержимое таблицы позволяет функция DbBrowse.

       Стандартные имиджи для работы с таблицами следующие.

Иконка имиджа Название имиджа Переменные имиджа Описание переменных имиджа Описание работы имиджа
Иконка имиджа TableEdit TableEdit Title заголовок окна Имидж открывает в окне таблицу, после чего её можно редактировать и просматривать.
Template шаблон для показываемых полей таблицы
HTable дескриптор таблицы
_enable флаг инициализации окна - значение 1, (по умолчанию 0)
Иконка имиджа Table Table HBase Дескриптор на открытую базу Имидж осуществляет открытие таблицы в открытой базе данных
HTable Дескриптор на открытую таблицу
Name Имя таблицы (файла) на диске

        Когда в проекте открыта таблица в режиме просмотра и редактирования, то в среде Stratum инициализируется панель инструментов для работы с таблицей. Выглядит она следующим образом.

Панель инструментов для работы с таблицами БД На панеле 5 кнопочек. Справа налево: добавить запись в конец, удалить текущую запись, отсортировать таблицу в порядке возрастания, отсортировать таблицу в порядке убывания, выполнить SQL запрос. В принципе, с помощью этой панели можно делать с таблицей всё что угодно.

 

Задание 1

        Собрать проект в котором открывается таблица для просмотра и редактирования.

Создайте новый проект. Для начала нужно открыть базу данных. Необходимо вставить в схему имидж из библиотеки Unit - BaseOpen. Для открытия таблицы нужно поставить имидж из библиотеки Unit - Table. Имиджу Table для открытия таблици нужен дескриптор на открытую базу данных HBase. Эту переменную надо передать по связи от имиджа BaseOpen. В имидже Table надо установить переменную Name, так если задать имя файла таблицы на диске. Для просмотра и редактирования таблицы необходимо установить в схеме имидж TableEdit. Передайте по связе от имиджа Table переменную HTable имиджу TableEdit. Переменную _enable в имидже TableEdit установите в 1. После всех этих действий запускайте схему (можно пошагово) и тогда откроется таблица и инициализируется панель с инструментами для работы с базами данных.

Задание 2

        Собрать проект в котором открывается таблица, затем к таблице выполняется SQL запрос и результирующая таблица открывается для просмотра.

        Для выполнения этого задания используйте предыдущий проект как шаблон. Удалите связь между имиджами Table и TableEdit. Создайте новый имидж. В нём мы будем выполнять SQL запрос. Для выполнения SQL запроса в среде Stratum существует функция DbSQL. Ей как параметры необходимы: дескриптор на открытую базу в которой находится необходимая нам таблица, затем команда SQL запроса и тип запроса (в данном случае тип 2 - SQL). Для SQL - команды необходимо указать имя таблицы на диске, его мы возьмём из имиджа Table. Объявим переменные в новом имидже.

        HANDLE HBase, HTableRez //дескрипторы на базу и на новую таблицу
        STRING str,name // строка для хранения команды SQL и имя таблицы
        FLOAT rez //служебная переменная

       Переменную HBase возьмём по связи с имиджа BaseOpen. Переменную Name по связи из имиджа Table. Напишем модель запроса.

        rez:=DbSetDir(~HBase,"($project)") // устанавливаем текущую директорию (директория проекта, где лежит    файл нашей таблицы).
        str := "SELECT * FROM "+~name+" WHERE dohod > 0" // пишем SQL запрос, выбрать все записи из таблицы с именем Name, в которых поле DOHOD больше 0.
        HTableRez := DbSQL(~HBase,~str,2) // выполняем SQL запрос и получаем дескриптор на новую таблицу, сформировавшуюся по SQL запросу.

         Для просмотра данной таблицы свяжем переменную HTableRez cвязью с переменной HTable имиджа TableEdit. После этого запустите проект.
     

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

 

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

Исходные тексты работы можно взять здесь.

Дополнительные задания

pin2.gif (1000 bytes) Создайте проект, который бы при помощи SQL запроса связывал несколько таблиц.
pin2.gif (1000 bytes) Создайте проект, в котором бы выполнялись SQL запросы к связанным таблицам.