DBISAM

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 17:01, 30 января 2019.
DBISAM
Dbisamproduct 7.png
Разработчики: Elevate Software Inc.
Выпущена: 1998; 22 years ago (1998)[1]
Написана на: Delphi's Object Pascal[2]
Операционная система: Linux, Windows
Локализация: English
Тип ПО: СУБД
Лицензия: Проприетарное ПО
Веб-сайт https://www.elevatesoft.com/products?category=dbisam

DBISAM - основанная на индексно-последовательном методе доступа СУБД[Источник 1], разработанная компанией Elevate Software в качестве улучшения и замены существующей BDE (Borland Database Engine)[Источник 2]. Последователем же данного продукта считается ElevateDB, релиз которого был проведен в 2007 году. DBISAM подойдет для приложений на Delphi, C++, Java и других языках.

История

Компания Elevate Software начала свое существование с выпуска в 1998 году первого продукта - DBISAM для работы с базами данных в Borland Delphi 1/2 в качестве замены BDE (Borland Database Engine) для настольных баз данных. В сравнении со своим предшественником, синхронизация и распараллеливание стали проще: с DBISAM все блокировки при синхронизации выполняются через ОС и не включают никаких внешних файлов, необходимых для настройки. Также ядро СУБД может быть полностью скомпилировано для Вашем приложении, чего не было в BDE. Более того, улучшена поддержка SQL стандарта SQL-92. Однако, поддержки SQL более новых стандартов (как в ElevateDB - стандарт SQL: 2003) не предусмотрено. Изменена индексация, улучшена работа с памятью и произведены многие другие улучшения[Источник 3].

Пакет DBISAM можно по праву назвать «патриархом» среди пакетов компонентов для создания приложений c тонкими базами данных[Источник 4]. Первая бета-версия DBISAM под номером 0.01 вышла в 1998 году, тогда же появилась первая финальная версия пакета (1.00). За первые пять лет истории продукта было выпущено около 80 его версий. С тех пор начальный набор функций DBISAM значительно расширился и теперь включает сервер базы данных DBISAM и межплатформенное использование как в Windows, так и в Linux. DBISAM считается самым старшим среди аналогов. В начале 2000-х это ядро становится еще и самым популярным среди аналогов. Достаточно сказать, что в 2001 и 2002 году этот пакет завоевывает первые места в ежегодном конкурсе авторитетного американского издания Delphi Informant Magazine в номинации «Лучшее ядро СУБД для Delphi» [Источник 5].

Описание

DBISAM компилируется непосредственно в приложение без каких-либо внешних библиотек. При желании предоставляется поддержка "пакета времени выполнения". Благодаря небольшому размеру, не требует поддержки каких-либо форм в Delphi 6 и C ++ Builder 6 и выше, что позволяет уменьшить размер разрабатываемых сервисов или веб-приложений (см. рисунок 1).

Для Visual Studio и других сред разработок предоставляется "The DBISAM ODBC Driver", содержащийся в одной DLL без каких-либо внешних библиотек. Он может использоваться с Visual Studio с использованием уровня доступа ODBCDirect и с Visual Studio .NET или выше с поставщиком данных ODBC.NET. Драйвер DBISAM ODBC содержит простой в использовании мастер настройки для создания и изменения пользовательских и системных хранилищ данных, а также поддерживает прямые подключения драйверов через строку подключения (см. рисунок 2).

Рисунок 1 - Решение для Delphi, C++Builder

Для удобства использования DBISAM также предоставляются утилиты:

Таблица 1 - Утилиты, предоставляемые DBISAM
Утилита Описание утилиты
Database System Utility (Утилита базы данных) Позволяет создавать, просматривать, обновлять, реструктурировать, осуществлять поиск, запрашивать и печатать таблицы DBISAM с помощью удобного и простого в использовании интерфейса
Server Administration Utility (Утилита администрирования сервера) Позволяет администрировать сервер базы данных DBISAM с помощью удобного и простого в использовании интерфейса. Эта утилита позволяет изменять данные конфигурации сервера, пользователей, базы данных и прав пользователя, а также извлекать информацию из журнала сервера. Все функции должны быть выполнены от имени администратора на управляемом сервере базы данных, а доступ к серверу может контролироваться для каждого пользователя в отдельности
BDE Database Transfer Utility (Утилита передачи базы данных) Позволяет передавать любые таблицы BDE, доступные в DBISAM, несколькими щелчками мыши. В качестве источника передачи могут быть выбраны псевдонимы BDE, а также обычные каталоги, что упрощает передачу всей базы данных

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


Рисунок 2 - Решение для Visual Studio и других сред

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

Ядро DBISAM обладает следующими особенностями:

  • DBISAM может использоваться как однопользовательское или многопользовательское клиент-серверное ядро.
  • Ядро не выделяет предварительно большие блоки памяти и по умолчанию использует 128 Кбайт памяти для каждой физической таблицы в сеансе, включая 96 Кбайт для каждой физической таблицы, не содержащей BLOB-данных (32 Кбайт для записей, 64 Кбайт для индексов) и 32 Кбайт для BLOB (если они есть). Эти значения могут быть отрегулированы пользователем, для предоставления большего объема памяти, если это необходимо.
  • Используется алгоритм управления кэшем LRU, который также включает в себя интеллектуальную буферизацию с предварительным чтением, оптимизированную сериализованную запись и поддержку устройств только для чтения, таких как компакт-диски с оптимизированной буферизацией.
  • Предусмотрена автоматическая блокировка записи и ручная блокировка таблицы.
  • DBISAM предлагает поддержку транзакций в виде буферизованных, сериализованных транзакций, которые позволяют не потерять таблицу из-за неожиданного отключения рабочей станции с небольшим или, в большинстве случаев, без повреждений данных.
  • Механизм DBISAM, представленный ядром TDBISAMEngine, имеет большое количество пунктов настройки. Триггеры, серверные процедуры, запланированные события, пользовательские функции SQL и фильтра могут быть добавлены и изменены. Однако процедуры на стороне сервера и запланированные события доступны только в том случае, если ядро работает как сервер базы данных (см. рисунок 3).
Рисунок 3 - Работа с ядром TDBISAMEngine

Особенности форматов таблиц

Более того, можно назвать несколько особенностей таблиц DBISAM:

  • Максимальный размер файла по умолчанию в DBISAM - 128 ГБ.
  • DBISAM использует до 3 физических файлов для каждой логической таблицы.
  • Все свободное место в таблицах DBISAM автоматически перерабатывается. Кроме того, любое свободное пространство можно сразу удалить из таблицы, оптимизируя ее.
  • DBISAM использует размеры записей фиксированной длины и страницы индексной переменной и BLOB. При создании или изменении таблиц некоторые из наиболее полезных функций (см. рисунок 4) включают:
Таблица 2 - Особенности форматов таблиц DBISAM
Особенность Описание
Типы данных Наиболее распространенные типы данных (включая BCD, BLOB, GUID и автоинкремент) поддерживаются в таблицах DBISAM, а полная и точная поддержка NULL предоставляется для всех типов данных.
Шифрование Таблицы могут быть зашифрованы посредством надежного шифра.
Международная локализация Таблицам может быть присвоен языковой стандарт для контроля сортировки индексов, а также для удобства любого поиска или фильтрации, выполненных в таблице через фильтры или SQL. Однако в настоящее время эта особенность доступна только для Windows.
Конфигурируемые индексные страницы и размеры блоков BLOB Как страницы индекса, так и размеры блоков BLOB можно настроить для оптимизации требований к доступу и хранению.
Пользовательское управление версиями Таблицам могут быть поставлены в соответствие номера основных и младших версий, что позволяет легко проверять и обновлять версию.
Большие имена полей и описаний полей и таблиц Имена полей могут быть довольно длинными, и описания могут быть указаны для таблиц и полей для справочных целей.
Минимальное, максимальное и требуемое ограничения, значения по умолчанию и спецификаторы case-case для полей Для полей могут быть назначены ограничения простого выражения, а значения по умолчанию могут быть назначены автоматически для полей NULL при добавлении записей. Кроме того, можно указать, что поле должно быть переведено в верхний или нижний регистр при изменении поля.
Сжатие BLOB-полей BLOB-поля могут быть сжаты для экономии места.
Первичные и вторичные индексы Таблицы могут содержать первичные и вторичные индексы, которые имеют нечувствительные к регистру уникальные атрибуты, включая смешанные по возрастанию/убыванию ключевые поля.
Настраиваемое сжатие индексного ключа Сжатие индексного ключа может быть активировано, чтобы значительно уменьшить размер индексов и оптимизировать доступ.
Полное текстовое индексирование Полное текстовое индексирование может быть указано для любых полей строки или памятки в таблице вместе с стоп-словами, пробелами и включать символы для управления тем, как происходит индексация.
Рисунок 4 - Форматирование таблицы DBISAM

Поддержка SQL и фильтра

DBISAM поддерживает некоторые команды стандарта SQL-92, включая оптимизатор запросов, планы запросов, живые и конечные результирующие наборы, параметризованные запросы, события прогресса выполнения запросов, скрипты и расширенный синтаксис SQL для конкретных функций DBISAM. Кроме того, предоставляется поддержка фильтра полного выражения, включая оптимизатор фильтра, где фильтры используют тот же синтаксис, что и выражения SQL, такие как функции и расширенные операторы, как LIKE и BETWEEN.

Доступ к клиентскому серверу

DBISAM предоставляет поддержку удаленного доступа клиент-сервера к серверу базы данных DBISAM. Вы можете переключаться между локальным или многопользовательским режимами и использованием клиент-сервера с помощью изменения всего нескольких свойств. Удаленные сеансы включают в себя поддержку отслеживания keep-alive или возможность поддерживать сеансы, соединение с которыми может быть прервано. Тайм-ауты соединения для удаленных сеансов могут быть также настроены, и тайм-аут запускается всякий раз, когда DBISAM собирается отключить удаленный сеанс из-за неактивности.

Удаленные сеансы могут быть настроены на использование сжатия и надежного шифрования при доступе к серверу базы данных DBISAM. Сжатие можно настроить «на лету», пока активен сеанс.

Отслеживание активности доступно, чтобы можно было отслеживать все запросы и ответы для данного удаленного сеанса (см. рисунок 5). Это полезно как для оптимизации производительности, так и для ведения журнала аудита.

Рисунок 5 - Активные сеансы

Администрирование

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

Архитектура

Сам DBISAM - это ядро СУБД, инкапсулированное в компоненте TDBISAMEngine. Когда для свойства TDBISAMEngine "EngineType" установлено значение etClient, компонент TDBISAMEngine работает как локальный клиентский механизм, а когда для свойства "EngineType" установлено значение etServer, компонент TDBISAMEngine действует как сервер базы данных.

property EngineType: TEngineType
TEngineType = (etClient,etServer)

Архитектура компонентов

DBISAM включает в себя следующие компоненты:

TDBISAMEngine

Компонент TDBISAMEngine инкапсулирует сам механизм DBISAM. TDBISAMEngine создается автоматически при запуске приложения и становится доступен для ссылок на него через глобальную функцию Engine в блоке dbisamtb (Delphi) или файле заголовка dbisamtb (C ++). Вы также можете сбросить значения компонента TDBISAMEngine в строке настроек или модуле данных, чтобы визуально изменить его свойства. Однако только один экземпляр компонента TDBISAMEngine может существовать в одно и то же время в данном приложении (модель Одиночка[3]). Компонент TDBISAMEngine может быть настроен так, чтобы он работал как локальный или клиентский движок (etClient) или сервер базы данных через свойство "EngineType". Движок можно запустить, установив для свойства Active значение True.

property Active: Boolean

TDBISAMSession

Компонент TDBISAMSession инкапсулирует сеанс в DBISAM. Компонент TDBISAMSession по умолчанию автоматически создается при запуске приложения и становится доступен для ссылок через глобальную функцию Session в блоке dbisamtb (Delphi) или файле заголовка dbisamtb (C ++). Компонент TDBISAMSession может быть настроен для работы в качестве локального (stLocal) или удаленного сеанса (stRemote) через свойство "SessionType". Локальная сессия является одноуровневой по своей природе, что означает, что все компоненты TDBISAMDatabase, подключенные к каталогам ссылок сеанса в локальной или сетевой файловой системе через свойство "Directory", и все компоненты TDBISAMTable или TDBISAMQuery обращаются к физическим таблицам непосредственно из этих каталогов, используя вызовы API операционной системы. Удаленный сеанс имеет двухуровневый характер, что означает, что весь доступ осуществляется через удаленный сеанс на сервере базы данных, используя протокол обмена сообщениями DBISAM по TCP / IP-соединению. Сервер базы данных задается с помощью следующих свойств:

RemoteHost или RemoteAddress

property RemoteHost: String

RemotePort или RemoteService

property RemotePort: Integer

В удаленном сеансе все компоненты TDBISAMDatabase ссылаются на базы данных, которые определены на сервере через свойство "RemoteDatabase", и все компоненты TDBISAMTable или TDBISAMQuery получают доступ к физическим таблицам через протокол обмена сообщениями DBISAM.

Сеанс можно запустить, установив для свойства "Active" значение True или вызвав метод "Open". Компонент TDBISAMSession содержит свойство "SessionName", которое используется для предоставления сеансу имени в приложении.

property SessionName: String

Перед началом работы все сеансы должны иметь имя. Компонент TDBISAMSession по умолчанию называется «Default». Компоненты TDBISAMDatabase, TDBISAMTable и TDBISAMQuery также имеют свойство "SessionName", и эти свойства используются для указания того, к какому сеансу относятся эти компоненты. Установка их свойства "SessionName" значения «Default» или «Empty» («») означает, что они будут использовать компонент TDBISAMSession по умолчанию.


TDBISAMDatabase

Компонент TDBISAMDatabase инкапсулирует базу данных в DBISAM. Он используется в качестве контейнера для набора таблиц в физическом каталоге для локальных сеансов или в виде контейнера для набора таблиц в базе данных на сервере для удаленных сеансов. Базe данных можно открыть, установив для свойства "Connected" значение True или вызвав метод "Open". Компонент TDBISAMDatabase содержит свойство "DatabaseName", которое используется для предоставления базе данных имени в приложении. Перед открытием у всех баз данных должно быть имя. Компоненты TDBISAMTable и TDBISAMQuery также имеют свойство "DatabaseName", и эти свойства используются для указания, к какой базе данных относятся эти компоненты.

property DatabaseName: String

Свойство "Directory" TDBISAMDatabase указывает на физическое расположение таблиц, используемых компонентами TDBISAMTable и TDBISAMQuery. Если компонент TDBISAMDatabase используется с локальным сеансом (указанным через свойство "SessionName"), то его свойство "Directory" должно содержать действительный физический путь для используемой операционной системы.

В свойстве TDBISAMDatabase "RemoteDatabase" указывается имя базы данных, определенной на сервере базы данных. Если компонент TDBISAMDatabase подключен к удаленному сеансу (заданному с помощью свойства "SessionName"), то его свойство "RemoteDatabase" должно быть установлено в действительную базу данных для сервера базы данных, к которому подключен сеанс.

Компонент TDBISAMDatabase используется для обработки транзакций с помощью методов "StartTransaction", "Commit" и "Rollback".

Также возможно создавать резервные копии и восстанавливать базы данных с помощью методов "Backup", "BackupInfo", "Restore".


TDBISAMTable

Компонент TDBISAMTable инкапсулирует курсор таблицы в DBISAM. Он используется для поиска и обновления данных в физической таблице, указанной свойством "TableName", а также для создания таблицы или изменения ее структуры. Курсор таблицы можно открыть, установив для свойства "Active" значение True или вызвав метод "Open". Свойство "DatabaseName" указывает базу данных, в которой находится таблица.

Компонент TDBISAMTable наследуется из компонента TDBISAMDBDataSet, который наследуется из компонента TDBISAMDataSet, в свою очередь наследуемого из общего компонента TDataSet, который является основой для доступа к данным в Delphi и C ++. Ни один из этих компонентов нижнего уровня не должен использоваться напрямую и предназначен только для внутренних структурных целей в иерархии классов.

Таблицы DBISAM состоят из 3 физических файлов: Data file для записи данных (форматы .dat, .dbk при резервном копировании и .dup при обновлении таблицы), Index File для индексов (форматы .idx, .ibk и .iup соответственно) и BLOB File (форматы .blb, .bbk и .bup) для записи двоичных данных, например, статистики и т.д.


TDBISAMQuery

Компонент TDBISAMQuery инкапсулирует один или несколько операторов SQL в DBISAM. Эти операторы могут возвращать или не возвращать набор результатов. Компонент используется для поиска и обновления данных в физических таблицах, указанных в инструкции SQL. Операторы SQL можно исполнить, установив для свойства "Active" значение True, или же вызвать метод "Open" (для операторов SQL, которые определенно возвращают набор результатов), или путем вызова метода "ExecSQL" (для операторов SQL, которые могут возвращать или не возвращать набор результатов). Свойство "DatabaseName" указывает базу данных, в которой находится таблица или таблицы.

Компонент TDBISAMQuery наследуется через TDBISAMDBDataSet и TDBISAMDataSet от общего компонента TDataSet. Все компоненты нижнего уровня предназначены только для внутренних структурных целей в иерархии классов.

Конфигурация и запуск сервера


При использовании компонента TDBISAMEngine в DBISAM в качестве механизма клиента не предусмотрено никаких дополнительных шагов, поскольку значением свойства "EngineType" по умолчанию является etClient. Однако, чтобы использовать компонент TDBISAMEngine в качестве сервера базы данных, необходимо внести некоторые изменения свойств перед запуском сервера.

Перечислим свойства для настройки и запуска сервера:

  • EngineType (Для запуска сервера ставится значение etServer)
  • EngineSignature (Может быть изменено в зависимости от Ваших нужд, обычно оставляется значение "DBISAM_SIG" по умолчанию)
  • ServerName (Любое имя, "DBSRVR" - по умолчанию)
  • ServerDescription (Любое описание, "DBISAM Database Server" - по умолчанию)
  • ServerMainAddress (IP-адрес сервера, который будет прослушиваться при обычном подключении, "" - по умолчанию)
  • ServerMainPort (Порт, которые будет прослушиваться при обычном подключении, 12005 - по умолчанию)
  • ServerMainThreadCacheSize (Число потоков, которые будет использовать сервер при обычном подключении, 10 - значение по умолчанию)
  • ServerAdminAddress (IP-адрес сервера, прослушивающийся при подключении администратора, "" - по умолчанию)
  • ServerAdminPort (Порт, которые будет прослушиваться при обычном подключении, 12006 - по умолчанию)
  • ServerAdminThreadCacheSize (Число потоков, которые будет использовать сервер при обычном подключении, 1 - значение по умолчанию)
  • ServerEncryptedOnly (Параметр, отвечающий на вопрос, должны ли все данные при создании сервера шифроваться, False - по умолчанию)
  • ServerEncryptionPassword (Пароль для шифрованных соединений, "elevatesoft" - по умолчанию)
  • ServerConfigFileName (Имя файла, в который будет записываться вся информация о конфигурации сервера, "dbsrvr.scf" - по умолчанию)
  • ServerConfigPassword (Пароль для расшифровки файла с конфигурацией сервера)

После того, как Вы настроили сервер базы данных с использованием указанных выше свойств, запуск сервера довольно прост. Все, что вам нужно сделать, - установить для свойства "Active" значение True. Ниже приведен пример того, как можно настроить и запустить сервер базы данных, используя глобальную функцию «Engine» по умолчанию в файле заголовка dbisamtb (Delphi) или dbisamtb (C ++):

  with Engine do
     begin
     ServerName:='MyTestServer';
     ServerDescription:='My Test Server';
     # Only listen on this IP address 
     ServerMainAddress:='192.168.0.1';
     ServerConfigFileName:='mytest.scf';
     ServerConfigPassword:='test123456';
     Active:=True;
     end;

Сравнение с другими СУБД

Сравним некоторые СУБД примерно одного года релиза. Для тестирования производительности СУБД возьмем современный для того времени компьютер со следующей системной конфигурацией:
Процессор: Intel Celeron 430 1.80 GHz;
Память: 1 Gb RAM;
ОС: Windows XP SP3.
При тестировании сравнивались скорости заполнения, чтения, поиска и фильтрации по БД записей и BLOB-файлов.

Лучшим себя в этом тесте показал DBISAM. [Источник 6]

Преимущества и недостатки

Ядро DBISAM обладает рядом преимуществ по сравнению с тем же BDE:

  • Шифрование. DBISAM использует алгоритм дайджеста сообщений MD5 для генерации 128-битных хэшей MD5 из текстовых паролей. Эти хэши затем используются с 8-байтовым симметричным алгоритмом блочного шифрования Blowfish [Источник 7]для шифрования фактических данных в таблицах и обмена данными между серверами. Оба эти алгоритма содержатся в файле dbisamcr unit (Delphi) или dbisamcr (C ++). Более того, предусмотрена пользовательская замена реализации шифрования. Изменение производится только на реализацию 8-байтового блочного шифрования.
  • Сжатие. DBISAM использует стандартный алгоритм сжатия Zlib для сжатия данных, таких как BLOB-поля и сеансовые запросы и ответы на сервере базы данных. Сжатие ZLib содержится в файлах zlibpas и zlibcomp (Delphi) или zlibpas и zlibcomp (C ++). Алгоритм также может быть заменен на подобный пользователем.
  • Поддержка многопоточных приложений. DBISAM внутренне структурирован, чтобы быть потокобезопасным и использоваться в многопоточном приложении при условии использования уникальных компонентов, поставляемых вместе с продуктом[8].

Недостатком же является только

  • Платный продукт. Стоит примерно 300$, но этим приходится платить за высокий уровень поддержки со стороны производителя.[Источник 8]

Примеры работы

Работа с таблицами

Зададим новую таблицу:

   begin
      with  MyDatabasedo
         begin
         DatabaseName:='AccountingDB';
         Directory:='c:\acctdata';
         Connected:=True;
         end;
      with MyTable do
         begin
         DatabaseName:='AccountingDB';
         TableName:='ledger';
         Active:=True;
         end;
   end;
   begin
      with MySession do
         begin
         SessionName:='Remote';
         SessionType:=stRemote;
         RemoteAddress:='192.168.0.2';
         Active:=True;           
         end;
      with MyTable do
         begin
         SessionName:='Remote';
         DatabaseName:='AccountingDB';
         TableName:='ledger';
         Active:=True;
         end;
   end;

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

После определения полей и индексов, а также информации о базе данных и таблицах, Вы можете вызвать метод "CreateTable" для создания фактической таблицы. Обычно рекомендуется также проверять свойство "Exists" компонента TDBISAMTable, чтобы убедиться, что Вы не пытаетесь перезаписать существующую таблицу. Если вы попытаетесь перезаписать существующую таблицу, будет вызвано исключение EDBISAMEngineError. Код ошибки, указанный при сбое таблицы, из-за уже существующей таблицы: 13060, и определяется как DBISAM_TABLEEXISTS в блоке dbisamcn (Delphi и Kylix) или файле заголовка dbisamcn (C ++ Builder). Метод "CreateTable" можно вызывать без каких-либо параметров, или Вы можете указать множество различных параметров, которые задали бы таблицу полностью, например описание, локали и т. д. Создадим локальную "клиентскую" таблицу с помощью метода "CreateTable" без каких-либо дополнительных параметров:

{
    MyTable->DatabaseName="d:\\temp";
    MyTable->TableName="customer";
    MyTable->FieldDefs->Clear();
    MyTable->FieldDefs->Add("CustNo",ftFloat,0,true);
    MyTable->FieldDefs->Add("Company",ftString,30,false);
    MyTable->FieldDefs->Add("Addr1",ftString,30,false);
    MyTable->FieldDefs->Add("Addr2",ftString,30,false);
    MyTable->FieldDefs->Add("City",ftString,15,false);
    MyTable->FieldDefs->Add("State",ftString,20,false);
    MyTable->FieldDefs->Add("Zip",ftString,10,false);
    MyTable->FieldDefs->Add("Country",ftString,20,false);
    MyTable->FieldDefs->Add("Phone",ftString,15,false);
    MyTable->FieldDefs->Add("FAX",ftString,15,false);
    MyTable->FieldDefs->Add("Contact",ftString,20,false);
    MyTable->IndexDefs->Clear();
    MyTable->IndexDefs->Add("","CustNo",TIndexOptions() << ixPrimary);
    MyTable->IndexDefs->Add("ByCompany","Company", TIndexOptions() << ixCaseInsensitive, "",icDuplicateByte);
    if (!MyTable->Exists())
        {
        MyTable->CreateTable();
        }
}

Изменим структуру таблицы локального "клиента", используя метод "AlterTable" без каких-либо дополнительных параметров. В этом примере мы хотим добавить поле LastSaleAmount в структуру этой таблицы перед полем LastSaleDate, а затем добавить дополнительный индекс в это новое поле LastSaleAmount, чтобы ускорить фильтрацию в SQL-запросах:

{
    MyTable->DatabaseName="c:\\temp";
    MyTable->TableName="customer";
    MyTable->Active=False;     # Всегда проверяем, закрыта ли предварительно таблица
    MyTable->FieldDefs.Update();     # Обновление значений полей, используя существующие значения полей
    MyTable->IndexDefs.Update();     # Аналогично для значений индексов
    MyTable->FieldDefs.Insert(6,8,"LastSaleAmount",ftBCD,2,false);      # Теперь введем значения поля
    MyTable->IndexDefs.Add("LastSaleAmount","LastSaleAmount", TIndexOptions());
    AlterTable();     # Обновим поле
}

При этом из левой таблицы получается та, что справа:

Field #    Name              DataType     Size
----------------------------------------------
1          CustomerID        ftString     10
2          CustomerName      ftString     30
3          ContactName       ftString     30
4          Phone             ftString     10
5          Fax               ftString     10
6          EMail             ftString     30
7          LastSaleDate      ftDate       0       
    
Index Name      Fields In Index      Options
----------------------------------------------
(none)          CustomerID           ixPrimary
Field #    Name              DataType     Size
----------------------------------------------
1          CustomerID        ftString     10
2          CustomerName      ftString     30
3          ContactName       ftString     30
4          Phone             ftString     10
5          Fax               ftString     10
6          EMail             ftString     30
7          LastSaleAmount    ftBCD        2
8          LastSaleDate      ftDate       0       
    
Index Name      Fields In Index      Options
----------------------------------------------
(none)          CustomerID           ixPrimary
LastSaleDate    LastSaleDate         (none)

Также поддерживаются операторы SQL для создания и изменения таблиц.

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

{
    MyDatabase->DatabaseName="AccountingDB";
    MyDatabase->Directory="c:\\acctdata";
    MyDatabase->Connected=true;
    MyTable->DatabaseName="AccountingDB";
    MyTable->TableName="ledger";
    MyTable->Active=true;
}

В свою очередь, команда для закрытия таблицы выглядит следующим образом:

    MyTable->Close();

Транзакции

Транзакция выполняется при использовании методов "StartTransaction", "Commit", и "Rollback" компонента TDBISAMDatabase. Создадим транзакцию:

   begin
      with MyDatabase do
         begin
         StartTransaction;
         try
            # Perform some updates to the table(s) in this database 
            Commit;
         except
            Rollback;
         end;
         end;
   end;

Также возможно создание транзакции с ограничениями (при этом добавляются условия ограничений):

    TablesList.Add('Customer');  #TablesList - список из таблиц, созданный специально для объединения в транзакцию таблиц 'Customer' и 'Orders'
    TablesList.Add('Orders');
    StartTransaction(TablesList);

Дополнительно: [Литература 1]

Источники

  1. Ядро СУБД: Базы данных, основные понятия // Базы данных Access [2017-2018]. Дата обновления: 30.09.2018. URL: http://access.avorut.ru/publ/bazy_dannykh_osnovnye_ponjatija/ja/jadro_subd/58-1-0-79 (дата обращения: 30.09.2018)
  2. BDE - Borland Database Engine //Банки данных Интернет (Интернет базы данных) [2013-2016]. Дата обновления: 01.10.2018. URL: http://bourabai.ru/dbt/BDE.htm (дата обращения: 01.10.2018)
  3. Appendix A - Differences from the BDE // Elevate Software [1998-2018]. Дата обновления: 01.10.2018. URL: https://www.elevatesoft.com/manual?action=topics&id=dbisam4&product=rsdelphi&version=XE&section=appendix_bde_diff (дата обращения: 01.10.2018)
  4. Тонкие базы данных и инструменты для их разработки в Delphi и C++Builder. Часть 1. Обзор технологии // Компьютер пресс [1999-2018]. Дата обновления: 01.10.2018. URL: https://compress.ru/article.aspx?id=11341 (дата обращения: 01.10.2018)
  5. Тонкие базы данных и инструменты для их разработки в Delphi и C++Builder. Часть 2. Обзор компонентов // Компьютер пресс [1999-2018]. Дата обновления: 01.10.2018. URL: https://compress.ru/Article.aspx?id=11604#01 (дата обращения: 01.10.2018)
  6. DBISAM, о СУБД по русски // DBISAM.narod [2013-2018]. Дата обновления: 02.10.2018. URL: http://dbisam.narod.ru/01.html (дата обращения: 02.10.2018)
  7. Description of a New Variable-Length Key, 64-Bit Block Cipher (Blowfish) // Springer Link [1998-2018]. Дата обновления: 01.10.2018. URL: https://link.springer.com/content/pdf/10.1007%2F3-540-58108-1_24.pdf (дата обращения: 01.10.2018)
  8. О СУБД по русски // DBISAM [2013-2018]. Дата обновления: 28.12.2018. URL: http://dbisam.narod.ru/00.html (дата обращения: 28.12.2018)

Примечания

  1. О программном обеспечении Elevate [Электронный ресурс]: История / Дата обращения: 30.09.2018. Режим доступа: https://www.elevatesoft.com/about
  2. Архитектура DBISAM [Электронный ресурс]: Введение / Дата обращения: 30.09.2018. Режим доступа: https://www.elevatesoft.com/manual?action=viewtopic&id=dbisam4&product=rsdelphi&version=XE&topic=dbisam_architecture
  3. TProger [Электронный ресурс]: Подводные камни Singleton: почему самый известный шаблон проектирования нужно использовать с осторожностью / Дата обращения: 01.10.2018. Режим доступа: https://tproger.ru/translations/singleton-pitfalls/
  4. AidAim Software [Электронный ресурс]: EasyTable: BDE Alternative Single File Delphi Database / Дата обращения: 02.10.2018. Режим доступа: http://www.aidaim.com/products/tet/tet_spec.php
  5. AidAim Software [Электронный ресурс]: Accuracer Database System: Client/Server Single-File BDE Replacement / Дата обращения: 02.10.2018. Режим доступа: http://www.aidaim.com/client_server_single-file_bde_replacement_delphi_database_embedded_database.htm
  6. NurboDB [Электронный ресурс]: Homepage / Дата обращения: 02.10.2018. Режим доступа: http://www.turbodb.com/
  7. Component Ace [Электронный ресурс]: Absolute Database / Дата обращения: 02.10.2018. Режим доступа: http://www.componentace.com/bde_replacement_database_delphi_absolute_database.htm
  8. Elevate Software [Электронный ресурс]: Multi-Threaded Applications / Дата обращения: 01.10.2018. Режим доступа: https://www.elevatesoft.com/manual?action=viewtopic&id=dbisam4&product=rsdelphi&version=XE&topic=Multi_Threaded_Applications

Дополнительная литература

  1. Elevate Software [Электронный ресурс]: Документация DBISAM версии 4 / Дата обращения: 03.10.2018. Режим доступа: https://www.elevatesoft.com/dbisam4dscpp2006.pdf