Программа mb3
Программа работает с двумя файлами базы данных : файлом описания структуры данных
( расширение kfs )
и файлом данных. Файл даных создается и открывается автоматически,
имя определяется по файлу структуры.
Для файла структуры в меню есть команды new и open.
Должен сказать, что все внутренние строки программы написаны на
"птичьем английском", но названия полей, таблиц и пр. могут быть русские,
также как названия месяцев и сумма прописью выводится по-русски
В файле структуры хранятся описания таблиц и запросы.
При открытии файла структуры все существующие запросы могут быть
вызваны через меню mb3, раздел "Actions". В этом разделе можно создать подменю.
В разделе меню Window есть команды Query list и Table list, открывающие соответственно
списки запросов и таблиц. В этих новых окнах есть команды соответственно
"query-add" и "table-create" для создания новых запросов и таблиц.
Понятие folder в окне Queries предназначена для группировки запросов в меню
actions. Собственно работа пользователя с базой должна проходить через меню
actions.
Команда table-fields открывает список полей таблицы, куда можно добавлять
новые поля. При создании поля определяется его тип. Основных типов в kf четыре:
число, строка, дата и ссылка ( в языке запросов к ним добавлены логический тип
и таблица ).
Новое по сравнению с реляционной идеологией - это тип "ссылка".
Физически в этом поле хранится уникальный номер строки таблицы,
на которую произведена ссылка. Зная ссылку, можно получить значения всех полей
этой строки.
Таблицы могут наследоваться одна из другой, в соответствии с объектной идеологией.
В этом случае таблица-наследник получает все поля таблицы-предка.
Если в наследнике какое-то поле предка имеет постоянное значение,
то его можно задать в разделе define окна полей таблицы.
Надо просто написать там его значение, или, если это значение вычисляется,
то выражение для вычисления значения, в фигурных скобках.
Существует еще один тип поля - так называемый link. Если одна таблица ссылается на другую, то этим выражается отношение "один-ко-многим". Это значит, что в другой таблице можно составить список строк первой таблицы, которые на нее ссылаются. Этот тип поля ( то есть этот список ) и называется link. Для создания такого поля нужно выбрать ссылочное поле таблицы и вызвать команду "add link", будет задан вопрос о имени, и в таблице, на которую определена ссылка, появится поле типа link с заданным именем.
После того как определены таблицы базы, базу можно использовать для хранения данных;
доступ к данным производится через запросы.
Сама программа mb3 работает с данными, блокируя файл, то есть в однопользовательзком
режиме. Программа dmserv, напротив, позволяет многим пользователям
одновременно обращаться к базе и работает как сервер. Программа mb3
в этом случае является клиентом. На клиентской стороне также надо открыть базу,
но в этой базе хранятся только запросы, поэтому ничего не мешает ее копировать
и иметь свою копию для каждого пользователя.
Возможен и промежуточный вариант, когда часть данных хранится в общей базе,
а часть данных индивидуальна для каждого пользователя.
Редактирование запросов производится в окне, открываемом командой Query-edit. При этом есть возможность готовить ресурсы для запросов, так называемые фрагменты. Для этого в окне редактирования запросов есть команда Fragment-manage, откуда можно перейти к редактированию фрагментов. Запрос интерпретирует фрагмент как строковую переменную. Фрагмент может быть html-кодом либо специальным описанием таблицы, используемом функцией CreateGrid. В последнем случае его редактирование производится после вызова команды EGrid в окне редактирования фрагмента. Следует сказать, что работа с такими таблицами на данный момент является наименее отлаженной частью программы
Язык запросов.
Синтаксис языка запросов сформировался под влиянием программы "Математика".
Опишем сначала некоторые формальные конструкции языка. Это :
идентификатор - строка из букв и подчеркивания.
число
строка - набор из символов, заключенных в двойные кавычки (внутри работает символ \)
список в фигурных скобках, или просто список - набор из конструкций
языка, разделенных запятыми и заключенных в фигурные скобки
вызов функции - идентификтор функции, за которым следует список
аргументов в квадратных скобках.
Некоторые функции могут сокращаться до вида операторов, таких как +, -, <, >, == и других. При синтаксическом разборе языка они преобразуются к функциям в соответствии с приоритетом ( а приоритеты определены подобно приоритетам языка С ).
Весь запрос представляет собой список из команд, и должен быть заключен в фигурные скобки, команды разделяются запятыми. Команда - это вызов функции. Аргументы функции могут в свою очередь быть функциями ( функция может возвращать значение ). Функции If и While, а также ряд других принимают своим аргументом вложенный список команд, который при определенных условиях исполняется - этим достигается структурирование программы.
При исполнении запроса некоторые функции возвращают значения. Эти данные можно передать в качестве параметра другой функции или присвоить переменной. Данные могут быть шести типов: строка, число, дата, ссылка, булевский тип и набор данных. Из них первые четыре типа могут быть полями в наборе данных. В большинстве случаев интерпретатор воспринимает идентификатор как имя перменной. В ряде случаев идентификатор может означать также имя поля в наборе данных.
Таблица базы является набором данных. Таблицу можно открыть, указав ее имя, как на чтение, так и на запись ( функции ReadAccess и WriteAccess ). После этого с помощью оператора Point можно считывать данные из таблицы и заносить туда данные. Существуют и другие типы наборов данных, в том числе таблица в памяти ( Temporary ). Если в левой части оператора Point указан ссылочный тип, то интерпретатор сам открывает соответствующую таблицу и пытается считать оттуда данные либо занести туда данные.
Полный список функций языка запросов собран на странице functions.php.
Сервер и безопасность
Файл с данными можно закодировать и раскодировать с помощью утилиты chpwd.exe. Этп программа принимает аргументом имя kfd файла и запрашивает старый и новый пароли. Если в качестве пароля введена пустая строка, считается, что данные не кодируются.
При открытии базы, которая защищена паролем, с помощью программы mb3 запрашиватся пароль. При запуске программы - сервера dmserv.exe имена баз и пароли считываются из реестра windows. Содержимое реестра в свою очередь тоже защищено паролем и его можно менять утилитой dmconfig.exe.
Кроме списка баз данных, которые поднимаются при запуске сервера, утилита dmconfig позволяет редактировать список пользователей с их паролями и список групп. Пользователь может относиться к нескольким группам. При редактировании схемы базы данных в программе mb3 для каждой таблицы можно указать, какая группа имеет право писать в таблицу и какая - считывать из нее. Если эти группы не указаны, таблица считается открытой.
Программа password.exe позволяет идентифицировать пользователя для сервера. Идентификация производится по ip-адресу компьютера. В один запуск сервера идентификацию достаточно провести один раз, независимо от количества обращений клиента. Если в процессе исполнения запроса пользователь попытается считать или записать в таблицу, первысив свои полномчия, будет сгенерирована ошибка.
Разработан также ODBC-драйвер для сервера dmserv. Для его использования необходимо зарегистрировать драйвер утилитой inst.exe и создать источник данных в соответствии с базой данных dmserv. Команды драйвера принимаются не на SQL, а на языке запросов KF. При получении результата от сервера в буфер обмена должен быть помещен набор данных, который и возвращается ODBC-клиенту. Идентификация также проводится по ip-адресу компьютера.