Difference between revisions of "Firebird embedded/ru"
m (OSX -> macOS) |
|||
(10 intermediate revisions by one other user not shown) | |||
Line 8: | Line 8: | ||
Преимущества: | Преимущества: | ||
− | * работает на многих архитектурах (Linux, | + | * работает на многих архитектурах (Linux, macOS, Windows, FreeBSD, Solaris) |
* отдельная настройка сервера не требуется, что снижает сложность использования | * отдельная настройка сервера не требуется, что снижает сложность использования | ||
* вы можете легко переключаться с embedded на полноценный клиент/сервер - без изменения строк кода (кроме строки подключения). Это, вероятно, хорошее преимущество по сравнению с sqlite. | * вы можете легко переключаться с embedded на полноценный клиент/сервер - без изменения строк кода (кроме строки подключения). Это, вероятно, хорошее преимущество по сравнению с sqlite. | ||
Line 27: | Line 27: | ||
# использовать 32-битную FPC и Lazarus на Windows 64 | # использовать 32-битную FPC и Lazarus на Windows 64 | ||
− | == | + | == Установка == |
− | + | В Windows встроенный Firebird и обычные клиентские библиотеки Firebird - это разные файлы. Встроенный Firebird всегда может служить обычным клиентом, что делает его логичным выбором для включения в вашу установку. | |
=== Windows === | === Windows === | ||
− | + | Загрузите и разархивируйте комплект embedded Firebird. Убедитесь, что файлы .dll и .manifest находятся либо: | |
− | * | + | * в каталоге вашего проекта и в каталоге исполняемых файлов (где генерируется .exe), либо |
− | * | + | * в каталоге в вашем PATH (не в системном каталоге) (полезно, если вы не хотите сохранять скопированные dll) |
− | |||
− | |||
− | + | Обратите внимание, что битность должна совпадать: вы должны использовать embedded x64 версию, если вы компилируете свою программу под 64-бит, и embedded x32, если вы пишете 32-битные программы. Также убедитесь, что файлы .dlls и .manifest размещены в выходном (исполняемом) каталоге вашего проекта, и распространяйте их вместе с приложениями и файлами лицензий. | |
+ | |||
+ | Как указание, минимально необходимыми файлами для Firebird 2.5 являются: | ||
* fbembed.dll | * fbembed.dll | ||
* firebird.msg | * firebird.msg | ||
Line 52: | Line 52: | ||
=== Linux === | === Linux === | ||
− | + | Для Debian, вероятно, похоже на Ubuntu: | |
− | + | получите файлы библиотеки, а также символическую ссылку: например, /usr/lib/x86_64-linux-gnu/libfbembed.so linking для /user/lib/x86_64-linux-gnu/libfbembed.so.bla.x.y | |
<syntaxhighlight lang=bash> | <syntaxhighlight lang=bash> | ||
aptitude install libfbembed2.5 firebird-dev | aptitude install libfbembed2.5 firebird-dev | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | По крайней мере, для Firebird 2.5+: не указывайте имя пользователя или пароль, так как это приведет к поиску security.fdb, что может привести к сбою в случае невозможности доступа к общесистемному security.fdb. Укажите роль RDB$ADMIN в Firebird 2.5+, так как она должна дать вам полный контроль над файлом базы данных. | |
− | + | Поместите эти файлы в каталог вашего проекта (для этого: проверьте, все ли это необходимо): | |
− | firebird/libfbembed.so ( | + | firebird/libfbembed.so (или возможно libfbembed.so.2.5) |
firebird.conf | firebird.conf | ||
− | firebird/security.fdb # | + | firebird/security.fdb #возможно, нет необходимости |
firebird/intl/fbintl | firebird/intl/fbintl | ||
firebird/udf/fbudf.so | firebird/udf/fbudf.so | ||
− | + | Для Firebird 3 вам понадобится: | |
firebird/libfbclient.so | firebird/libfbclient.so | ||
plugins/libEngine12.so | plugins/libEngine12.so | ||
− | + | Вам нужно изменить переменную каталога плагинов. Если вы не можете этого сделать, вам нужно поместить libEngine в его оригинальный каталог. | |
− | + | Установите это в firebird.conf (для этого: проверьте, все ли это необходимо) | |
<syntaxhighlight lang=ini> | <syntaxhighlight lang=ini> | ||
− | RootDirectory=./firebird # | + | RootDirectory=./firebird #замените на ваш каталог |
− | DatabaseAccess = Full # | + | DatabaseAccess = Full #наверное полезно |
− | ExternalFileAccess = Full # | + | ExternalFileAccess = Full #наверное полезно |
− | UdfAccess = Full # | + | UdfAccess = Full #наверное полезно |
#disable | #disable | ||
− | #TempDirectories = /tmp #=> | + | #TempDirectories = /tmp #=> не удалось исправить проблемы блокировки /tmp/firebird |
− | #TempDirectories = ~/tmp #=> | + | #TempDirectories = ~/tmp #=> не удалось исправить проблемы блокировки /tmp/firebird |
</syntaxhighlight> | </syntaxhighlight> | ||
− | 2 | + | Перед запуском приложения необходимо установить 2 переменные среды. Предположим, что приложение установлено в /home/pascaldev/embed: |
− | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
− | # | + | # сообщаем динамическому загрузчику, где найти embedded lib: |
LD_LIBRARY_PATH=/home/pascaldev/embed/firebird | LD_LIBRARY_PATH=/home/pascaldev/embed/firebird | ||
− | # | + | # сообщаем серверу, где искать файлы (сообщения, настройки и т. д.) |
− | FIREBIRD=. # | + | FIREBIRD=. #или используйте абсолютный путь: /home/pascaldev/embed |
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Если вы поймали ошибку такую, как | |
EIBDatabaseError/ : DoInternalConnect : | EIBDatabaseError/ : DoInternalConnect : | ||
-Can't access lock files' directory /tmp/firebird | -Can't access lock files' directory /tmp/firebird | ||
− | + | возможно, у вас лежат устаревшие файлы блокировки, принадлежащие другому пользователю. Удаление каталога /tmp/firebird работает, но проблема в том, что он будет воссоздан под вашими локальными разрешениями. | |
− | |||
− | + | См. [http://www.firebirdfaq.org/faq51/ Как установить embedded Firebird на Linux or Mac?] для подсказок по работе со встроенным Firebird на Linux или Apple macOS. | |
− | + | Кто-то использовал embedded Firebird в FPC: [http://www.mwasoftware.co.uk/index.php?option=com_content&task=view&id=105 Более ранняя версия embedded Firebird на Linux]. | |
− | === | + | === macOS === |
− | * todo: | + | * todo: описать это, возможно адаптация [http://www.mwasoftware.co.uk/index.php?option=com_content&task=view&id=105 Более ранняя версия embedded Firebird на Linux] и особенно [http://paulbeachsblog.blogspot.mx/2012/09/firebird-embedded-on-macosx.html Firebird Embedded на macOS] |
=== FreeBSD === | === FreeBSD === | ||
− | * to do: | + | * to do: описать это, возможно адаптация [http://www.mwasoftware.co.uk/index.php?option=com_content&task=view&id=105 Более ранняя версия embedded Firebird на Linux] |
− | == | + | == Коннект к серверу Firebird == |
− | + | Как уже упоминалось, встроенный Firebird может работать как обычный клиент Firebird. Следовательно, использование встроенной библиотеки Firebird вместо клиент-серверной библиотеки Firebird может помочь сделать ваше приложение более гибким. | |
− | Note | + | {{Note| по крайней мере, в Firebird Embedded 2.5.3 и FPC 2.6.4 есть ошибка, которая вылетает при закрытии соединения с удаленным сервером. Эта ошибка была исправлена в транке FPC.}} |
− | == | + | == Использование == |
− | + | Как только в вашем распоряжении окажутся подходящие библиотеки встроенного Firebird по правильному пути (см. выше), вам нужно указать, что вы подключаетесь к встроенной версии сервера, а не к клиент-серверной. Оставьте свойство hostname объекта ''IBConnection'' пустым. Остальные свойства работают так же, как в версии клиент/сервер, например DatabaseName - это полный путь к файлу .fdb или просто имя базы данных, если оно находится в том же каталоге, что и fbembed.dll. Кроме того, в старых версиях FPC (FPC 2.6.2+ это точно не нужно) может потребоваться установить для свойства UseEmbeddedFirebird значение true. Это свойство отсутствует в модуле SQLDB, но вам нужно добавить ''ibase60dyn'' в секцию uses. | |
− | |||
− | |||
− | |||
− | === | + | === Создание базы данных === |
− | ==== | + | ==== Использование Firebird ISQL ==== |
− | + | Вы можете создавать базы данных с помощью приложения Firebird isql (например, как это предусмотрено в обычном пакете Firebird (клиент)). В Windows этот исполняемый файл должен находиться в том же каталоге, что и ваш fbembed.dll. | |
− | + | {{Note| isql ожидает библиотеку fbclient, а не fbembed; Вы можете скопировать и переименовать fbembed, например, в fbclient.dll в Windows, чтобы это исправить.}} | |
− | Note | + | |
− | + | Запустите '''isql''', затем сделайте: | |
<syntaxhighlight lang="sql"> | <syntaxhighlight lang="sql"> | ||
create database 'employee.fdb' user 'SYSDBA' password 'masterkey' page_size 16384 default character set UTF8; | create database 'employee.fdb' user 'SYSDBA' password 'masterkey' page_size 16384 default character set UTF8; | ||
Line 132: | Line 127: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | Удаление базы данных в основном означало бы удаление файла, но вы также можете запустить: | |
'''isql''' | '''isql''' | ||
<syntaxhighlight lang="sql"> | <syntaxhighlight lang="sql"> | ||
Line 141: | Line 136: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | ==== | + | ==== Программно ==== |
− | + | Вы также можете создать базу данных из вашей программы. Программа в разделе [[Firebird_embedded/ru#.D0.A1.D0.BE.D0.B7.D0.B4.D0.B0.D0.BD.D0.B8.D0.B5_.D1.82.D0.B5.D1.81.D1.82.D0.BE.D0.B2.D0.BE.D0.B9_.D0.B1.D0.B0.D0.B7.D1.8B_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.D1.85|Создание тестовой базы данных]] ниже показывает, как вы можете обнаружить отсутствующие базы данных и создать их на лету. | |
− | |||
− | + | Аналогичная процедура может быть вызвана в приложениях Lazarus при инициализации вашей формы (событие FormShow). | |
− | |||
− | == | + | === Создание таких объектов, как таблицы, вьюхи, триггеры,... === |
− | + | Создание объектов - как и большинство вещей - одинаково, что в embedded Firebird, что в Firebird. См. [[Firebird/ru#.D0.9F.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D0.BC.D0.BD.D0.BE.D0.B5_.D1.81.D0.BE.D0.B7.D0.B4.D0.B0.D0.BD.D0.B8.D0.B5_.D0.BE.D0.B1.D1.8A.D0.B5.D0.BA.D1.82.D0.BE.D0.B2|Программное создание объектов]] | |
− | === | + | == Запуск набора тестов базы данных FPC== |
− | + | Может быть полезно запускать среду тестирования базы данных FPC (в каталоге packages\fcl-db\tests), когда вы охотитесь за ошибками, пытаетесь выяснить, как что-то работает или улучшаете код базы данных. | |
− | + | === Сообщаем платформе, какую базу данных использовать === | |
+ | Вам нужно будет отредактировать INI-файл db test framework, чтобы сообщить исполняемому файлу теста, что ему нужно использовать вашу встроенную базу данных. | ||
+ | См. [[Databases/ru#.D0.92.D1.8B.D0.BF.D0.BE.D0.BB.D0.BD.D0.B5.D0.BD.D0.B8.D0.B5_.D1.82.D0.B5.D1.81.D1.82.D0.BE.D0.B2_.D0.B1.D0.B0.D0.B7.D1.8B_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.D1.85_FPC|Выполнение тестов базы данных FPC]] для получения инструкций о том, как это сделать. | ||
− | === | + | === Создание тестовой базы данных === |
− | + | Если вы настроили среду для использования Firebird, вам нужно будет подготовить среду для тестирования. | |
− | + | Скопируйте библиотеки embedded Firebird и другие файлы для вашей архитектуры в тестовый каталог. | |
− | + | Затем создайте тестовую базу данных - вручную или программно/ | |
− | ==== | + | ==== Создание базы данных вручную ==== |
'''isql''' | '''isql''' | ||
<syntaxhighlight lang="sql"> | <syntaxhighlight lang="sql"> | ||
Line 169: | Line 164: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | ==== | + | ==== Программное создание базы данных ==== |
− | + | Вы можете программно создать базу данных. В приведенном ниже примере создается локальная встроенная база данных, но ее можно легко изменить на удаленную базу данных (измените имя хоста и, если необходимо, путь): | |
− | <syntaxhighlight> | + | <syntaxhighlight lang=pascal> |
program firebirdembeddedtest; | program firebirdembeddedtest; | ||
{$mode objfpc}{$H+} | {$mode objfpc}{$H+} | ||
Line 183: | Line 178: | ||
const | const | ||
− | // | + | // Имя для базы данных. Обязательно укажите одно и то же имя в вашем database.ini |
− | DatabaseFile = 'test.fdb'; // | + | DatabaseFile = 'test.fdb'; //Разумное имя для тестовой базы данных, верно? |
var | var | ||
Fire: TIBConnection; | Fire: TIBConnection; | ||
begin | begin | ||
− | // | + | //Подключение к базе данных Firebird |
− | // | + | //Следующая строка нужна для довольно старых версий FPC |
− | // | + | //UseEmbeddedFirebird: = true; |
− | // | + | //Более новые версии сначала будут искать файл fbembed.dll в каталоге приложения автоматически |
+ | //Использование встроенного (и fbembed.dll) или обычного клиент/сервера (fbclient.dll) требует использования ibase60dyn | ||
Fire:=TIBConnection.Create(nil); | Fire:=TIBConnection.Create(nil); | ||
try | try | ||
− | Fire.HostName := ''; // | + | Fire.HostName := ''; //должен быть пустым для embedded Firebird; должен быть заполнен для клиент/сервера Firebird |
− | Fire.DatabaseName := DatabaseFile; //( | + | Fire.DatabaseName := DatabaseFile; //(путь и ) имя файла |
− | // | + | // Имя пользователя и пароль не имеют значения для аутентификации, но вы получаете авторизацию в базе данных |
− | // | + | // на основе имени (и, возможно, роли), которое вы даете. |
Fire.Username := 'SYSDBA'; | Fire.Username := 'SYSDBA'; | ||
− | Fire.Password := 'masterkey'; // | + | Fire.Password := 'masterkey'; //пароль для SYSDBA по умолчанию |
− | Fire.Charset := 'UTF8'; // | + | Fire.Charset := 'UTF8'; //Отправка и получение строковых данных в кодировке UTF8 |
− | Fire.Dialect := 3; // | + | Fire.Dialect := 3; //Никто больше не использует диалекты 1 или 2 (прим.перев.: это справедливо лишь в отношении новых проектов) |
− | Fire.Params.Add('PAGE_SIZE=16384'); // | + | Fire.Params.Add('PAGE_SIZE=16384'); //Мне нравится большой размер страницы (используется при создании базы данных). Полезно для больших индексов ⇒ больший возможный размер столбца |
− | + | // Выясните, есть ли база данных в каталоге приложения. | |
− | // | + | // Если нет, создайте его. Примечание: это может не сработать, если у вас недостаточно прав. |
− | // | ||
− | // | + | // Если вы используете клиент / сервер, вам явно не нужна эта часть кода. |
− | if (FileExists(DatabaseFile) | + | if (not FileExists(DatabaseFile)) then |
begin | begin | ||
− | writeln(' | + | writeln('Файл '+DatabaseFile+' не существует.'); |
− | writeln(' | + | writeln('Создание базы данных Firebird embedded ...'); |
− | // | + | // Создаем базу данных, поскольку она не существует |
try | try | ||
− | Fire.CreateDB; // | + | Fire.CreateDB; //Создаем файл базы данных. |
except | except | ||
on E: Exception do | on E: Exception do | ||
begin | begin | ||
− | writeln(' | + | writeln('ОШИБКА при создании базы данных. Возможно проблемы с загрузкой встроенной библиотеки:'); |
− | writeln('- | + | writeln('- не все файлы присутствуют'); |
− | writeln('- | + | writeln('- неправильная архитектура (например, 32 бит вместо 64 бит)'); |
writeln('Exception message:'); | writeln('Exception message:'); | ||
writeln(E.ClassName+'/'+E.Message); | writeln(E.ClassName+'/'+E.Message); | ||
Line 234: | Line 229: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | === | + | === Запуск набора тестов === |
− | + | Наконец, скомпилируйте и запустите ''dbtestframework.pas'' программы тестирования базы данных. Он должен генерировать вывод состояния на консоли и вывод XML в файлах с результатами теста, которые можно проанализировать и отправить разработчикам. | |
− | == | + | == Внешние ссылки == |
− | * [http://www.firebirdfaq.org/faq51/ | + | * [http://www.firebirdfaq.org/faq51/ Как настроить embedded Firebird для Linux или Mac?] (англ.) |
− | * [http://www.mwasoftware.co.uk/index.php?option=com_content&task=view&id=105 | + | * [http://www.mwasoftware.co.uk/index.php?option=com_content&task=view&id=105 Более ранняя версия embedded Firebird на Linux](англ.) |
Latest revision as of 01:52, 27 January 2020
│
English (en) │
русский (ru) │
Что это такое
Firebird Embedded - это специальная версия сервера баз данных Firebird. Она позволяет вам запускать ваши программы без выделенного (прим.перев.: предварительно запущенного) сервера базы данных. Вместо этого вы добавляете библиотеку (.dll/.so/.dylib) в свое приложение) и позволяете вашему приложению получать доступ к файлу базы данных Firebird .fdb с помощью этой библиотеки.
Это похоже на работу таких программ, как Microsoft Access и LibreOffice Base.
Преимущества:
- работает на многих архитектурах (Linux, macOS, Windows, FreeBSD, Solaris)
- отдельная настройка сервера не требуется, что снижает сложность использования
- вы можете легко переключаться с embedded на полноценный клиент/сервер - без изменения строк кода (кроме строки подключения). Это, вероятно, хорошее преимущество по сравнению с sqlite.
- прим.перев.: не требуется пароль (он может быть произвольным)
Недостатки:
- только однопользовательский доступ
- необходимо распространять некоторые библиотеки вместе с вашей программой при ее распространении (если вы не можете статически связать их)
Предупреждение: Windows x64
Предупреждение: В версиях FPC ниже FPC 2.7.1 r23738 (март 2013 г.), FPC x64 в Windows не очень хорошо работает с embedded dll Firebird или другими DLL. Раздел ниже содержит обходной путь, если у вас есть старая версия FPC
В версиях FPC ниже 2.7.1 r23738 вы можете получать ошибки/исключения объекта IBConnection, даже если вы пишете правильный код(см., например, Create database bug report.
Обходное решение:
- перейти к моментальному снимку разработки/версии FPC после FPC 2.7.1 r23738; см. Exception handling has been changed to be ABI-conformant
- если на FPC 2.7.1 ниже, чем r23738, скомпилируйте FPC с ключом
-dTEST_WIN64_SEH
, чтобы использовать новый код Структурированной Обработки Исключений (SEH) на Win64. - использовать 32-битную FPC и Lazarus на Windows 64
Установка
В Windows встроенный Firebird и обычные клиентские библиотеки Firebird - это разные файлы. Встроенный Firebird всегда может служить обычным клиентом, что делает его логичным выбором для включения в вашу установку.
Windows
Загрузите и разархивируйте комплект embedded Firebird. Убедитесь, что файлы .dll и .manifest находятся либо:
- в каталоге вашего проекта и в каталоге исполняемых файлов (где генерируется .exe), либо
- в каталоге в вашем PATH (не в системном каталоге) (полезно, если вы не хотите сохранять скопированные dll)
Обратите внимание, что битность должна совпадать: вы должны использовать embedded x64 версию, если вы компилируете свою программу под 64-бит, и embedded x32, если вы пишете 32-битные программы. Также убедитесь, что файлы .dlls и .manifest размещены в выходном (исполняемом) каталоге вашего проекта, и распространяйте их вместе с приложениями и файлами лицензий.
Как указание, минимально необходимыми файлами для Firebird 2.5 являются:
- fbembed.dll
- firebird.msg
- ib_util.dll
- icudt30.dll
- icuin30.dll
- icuuc30.dll
- IDPLicense.txt
- IPLicense.txt
- Microsoft.VC80.CRT.manifest
- msvcp80.dll
- msvcr80.dll
Linux
Для Debian, вероятно, похоже на Ubuntu: получите файлы библиотеки, а также символическую ссылку: например, /usr/lib/x86_64-linux-gnu/libfbembed.so linking для /user/lib/x86_64-linux-gnu/libfbembed.so.bla.x.y
aptitude install libfbembed2.5 firebird-dev
По крайней мере, для Firebird 2.5+: не указывайте имя пользователя или пароль, так как это приведет к поиску security.fdb, что может привести к сбою в случае невозможности доступа к общесистемному security.fdb. Укажите роль RDB$ADMIN в Firebird 2.5+, так как она должна дать вам полный контроль над файлом базы данных.
Поместите эти файлы в каталог вашего проекта (для этого: проверьте, все ли это необходимо):
firebird/libfbembed.so (или возможно libfbembed.so.2.5) firebird.conf firebird/security.fdb #возможно, нет необходимости firebird/intl/fbintl firebird/udf/fbudf.so
Для Firebird 3 вам понадобится:
firebird/libfbclient.so plugins/libEngine12.so
Вам нужно изменить переменную каталога плагинов. Если вы не можете этого сделать, вам нужно поместить libEngine в его оригинальный каталог.
Установите это в firebird.conf (для этого: проверьте, все ли это необходимо)
RootDirectory=./firebird #замените на ваш каталог
DatabaseAccess = Full #наверное полезно
ExternalFileAccess = Full #наверное полезно
UdfAccess = Full #наверное полезно
#disable
#TempDirectories = /tmp #=> не удалось исправить проблемы блокировки /tmp/firebird
#TempDirectories = ~/tmp #=> не удалось исправить проблемы блокировки /tmp/firebird
Перед запуском приложения необходимо установить 2 переменные среды. Предположим, что приложение установлено в /home/pascaldev/embed:
# сообщаем динамическому загрузчику, где найти embedded lib:
LD_LIBRARY_PATH=/home/pascaldev/embed/firebird
# сообщаем серверу, где искать файлы (сообщения, настройки и т. д.)
FIREBIRD=. #или используйте абсолютный путь: /home/pascaldev/embed
Если вы поймали ошибку такую, как
EIBDatabaseError/ : DoInternalConnect : -Can't access lock files' directory /tmp/firebird
возможно, у вас лежат устаревшие файлы блокировки, принадлежащие другому пользователю. Удаление каталога /tmp/firebird работает, но проблема в том, что он будет воссоздан под вашими локальными разрешениями.
См. Как установить embedded Firebird на Linux or Mac? для подсказок по работе со встроенным Firebird на Linux или Apple macOS. Кто-то использовал embedded Firebird в FPC: Более ранняя версия embedded Firebird на Linux.
macOS
- todo: описать это, возможно адаптация Более ранняя версия embedded Firebird на Linux и особенно Firebird Embedded на macOS
FreeBSD
- to do: описать это, возможно адаптация Более ранняя версия embedded Firebird на Linux
Коннект к серверу Firebird
Как уже упоминалось, встроенный Firebird может работать как обычный клиент Firebird. Следовательно, использование встроенной библиотеки Firebird вместо клиент-серверной библиотеки Firebird может помочь сделать ваше приложение более гибким.
Использование
Как только в вашем распоряжении окажутся подходящие библиотеки встроенного Firebird по правильному пути (см. выше), вам нужно указать, что вы подключаетесь к встроенной версии сервера, а не к клиент-серверной. Оставьте свойство hostname объекта IBConnection пустым. Остальные свойства работают так же, как в версии клиент/сервер, например DatabaseName - это полный путь к файлу .fdb или просто имя базы данных, если оно находится в том же каталоге, что и fbembed.dll. Кроме того, в старых версиях FPC (FPC 2.6.2+ это точно не нужно) может потребоваться установить для свойства UseEmbeddedFirebird значение true. Это свойство отсутствует в модуле SQLDB, но вам нужно добавить ibase60dyn в секцию uses.
Создание базы данных
Использование Firebird ISQL
Вы можете создавать базы данных с помощью приложения Firebird isql (например, как это предусмотрено в обычном пакете Firebird (клиент)). В Windows этот исполняемый файл должен находиться в том же каталоге, что и ваш fbembed.dll.
Запустите isql, затем сделайте:
create database 'employee.fdb' user 'SYSDBA' password 'masterkey' page_size 16384 default character set UTF8;
exit;
Удаление базы данных в основном означало бы удаление файла, но вы также можете запустить: isql
connect 'employee.fdb' user 'sysdba' password 'masterkey';
drop database;
commit;
exit;
Программно
Вы также можете создать базу данных из вашей программы. Программа в разделе Создание тестовой базы данных ниже показывает, как вы можете обнаружить отсутствующие базы данных и создать их на лету.
Аналогичная процедура может быть вызвана в приложениях Lazarus при инициализации вашей формы (событие FormShow).
Создание таких объектов, как таблицы, вьюхи, триггеры,...
Создание объектов - как и большинство вещей - одинаково, что в embedded Firebird, что в Firebird. См. Программное создание объектов
Запуск набора тестов базы данных FPC
Может быть полезно запускать среду тестирования базы данных FPC (в каталоге packages\fcl-db\tests), когда вы охотитесь за ошибками, пытаетесь выяснить, как что-то работает или улучшаете код базы данных.
Сообщаем платформе, какую базу данных использовать
Вам нужно будет отредактировать INI-файл db test framework, чтобы сообщить исполняемому файлу теста, что ему нужно использовать вашу встроенную базу данных. См. Выполнение тестов базы данных FPC для получения инструкций о том, как это сделать.
Создание тестовой базы данных
Если вы настроили среду для использования Firebird, вам нужно будет подготовить среду для тестирования.
Скопируйте библиотеки embedded Firebird и другие файлы для вашей архитектуры в тестовый каталог.
Затем создайте тестовую базу данных - вручную или программно/
Создание базы данных вручную
isql
create database 'test.fdb' user 'SYSDBA' password 'masterkey' page_size 16384 default character set UTF8;
exit;
Программное создание базы данных
Вы можете программно создать базу данных. В приведенном ниже примере создается локальная встроенная база данных, но ее можно легко изменить на удаленную базу данных (измените имя хоста и, если необходимо, путь):
program firebirdembeddedtest;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, SysUtils,
sqldb, IBConnection {for Firebird};
const
// Имя для базы данных. Обязательно укажите одно и то же имя в вашем database.ini
DatabaseFile = 'test.fdb'; //Разумное имя для тестовой базы данных, верно?
var
Fire: TIBConnection;
begin
//Подключение к базе данных Firebird
//Следующая строка нужна для довольно старых версий FPC
//UseEmbeddedFirebird: = true;
//Более новые версии сначала будут искать файл fbembed.dll в каталоге приложения автоматически
//Использование встроенного (и fbembed.dll) или обычного клиент/сервера (fbclient.dll) требует использования ibase60dyn
Fire:=TIBConnection.Create(nil);
try
Fire.HostName := ''; //должен быть пустым для embedded Firebird; должен быть заполнен для клиент/сервера Firebird
Fire.DatabaseName := DatabaseFile; //(путь и ) имя файла
// Имя пользователя и пароль не имеют значения для аутентификации, но вы получаете авторизацию в базе данных
// на основе имени (и, возможно, роли), которое вы даете.
Fire.Username := 'SYSDBA';
Fire.Password := 'masterkey'; //пароль для SYSDBA по умолчанию
Fire.Charset := 'UTF8'; //Отправка и получение строковых данных в кодировке UTF8
Fire.Dialect := 3; //Никто больше не использует диалекты 1 или 2 (прим.перев.: это справедливо лишь в отношении новых проектов)
Fire.Params.Add('PAGE_SIZE=16384'); //Мне нравится большой размер страницы (используется при создании базы данных). Полезно для больших индексов ⇒ больший возможный размер столбца
// Выясните, есть ли база данных в каталоге приложения.
// Если нет, создайте его. Примечание: это может не сработать, если у вас недостаточно прав.
// Если вы используете клиент / сервер, вам явно не нужна эта часть кода.
if (not FileExists(DatabaseFile)) then
begin
writeln('Файл '+DatabaseFile+' не существует.');
writeln('Создание базы данных Firebird embedded ...');
// Создаем базу данных, поскольку она не существует
try
Fire.CreateDB; //Создаем файл базы данных.
except
on E: Exception do
begin
writeln('ОШИБКА при создании базы данных. Возможно проблемы с загрузкой встроенной библиотеки:');
writeln('- не все файлы присутствуют');
writeln('- неправильная архитектура (например, 32 бит вместо 64 бит)');
writeln('Exception message:');
writeln(E.ClassName+'/'+E.Message);
end;
end;
Fire.Close;
end;
finally
Fire.Free;
end;
end.
Запуск набора тестов
Наконец, скомпилируйте и запустите dbtestframework.pas программы тестирования базы данных. Он должен генерировать вывод состояния на консоли и вывод XML в файлах с результатами теста, которые можно проанализировать и отправить разработчикам.