Что за версии Embedded или Personal?
Исходные тексты InterBase версии Classic позволял скомпилировать сервер как dll. Т.е. внешне такой "сервер" выглядит как обычная клиентская библиотека gds32.dll, однако имеет размер такой же, как fbserver.exe, и по функциональности аналогична. То есть, сервер Firebird встроен внутрь dll, и запускается только загружающим dll приложением. Соответственно, обратиться к такому серверу можно только изнутри приложения, через локальный (не сетевой) протокол (без указания имени сервера в пути к БД).
Впервые до полноценной "встраиваемой" версии такая dll была доделана в Yaffil, и получила название Personal. Для Firebird аналогичный вариант начал выпускаться при разработке версии 1.5, и называется embedded (в отличие от Yaffil Personal код Firebird Embedded базируется на архитектуре superserver).
Embedded/Personal идеален для "однопользовательских" приложений - в этом случае не требуется совершенно никаких настроек, и достаточно dll положить рядом с EXE. Таким образом, приложение получается автономным, и не требует смены версии сервера, т.е. может работать параллельно с любой установленной серверной или embedded/personal версией.
Однако, embedded/personal имеет ряд ограничений. Поскольку это dll, загружаемая вашим приложением (exe), то сам exe вместе с dll представляет собой процесс сервера. Таким образом, нельзя запустить два exe, обращающихся к одной и той же базе данных - база данных может быть испорчена (Embedded/Personal вообще то блокирует файл для монопольного доступа, чтобы этого не случилось, но если вам попадется ранняя версия Embedded, то может получиться, что два exe откроют одну базу данных). Поэтому при разработке и отладке ваших приложений для работы нужно использовать обычный сервер, а не embedded (иначе вам придется в дизайн-тайме разрабатывать приложение "вслепую", не видя данных). То же самое относится к web-приложениям.
В Yaffil Personal открытие БД двумя dll запрещено, в Firebird Embedded - также запрещено в последних версиях FB Embedded.
Кроме того, embedded/personal обладает функциональностью обычной gds32.dll - если коннект "сетевой", т.е. с указанием имени сервера(srv:c:\dir\data.gdb), то библиотека выполняет функции обычной клиентской dll. Если коннект локальный (c:\dir\data.gdb) - то библиотека выполняет функции сервера.
Будьте внимательны - поскольку при использовании Embedded/Personal сервером является именно ваше приложение, "падение" (по AccessViolation) приложения из-за ошибки в вашем коде может привести к повреждению базы данных. Потому что (см. выше) такое падение эквивалентно падению сервера (который как раз и работает с файлом базы данных).
Дополнительная информация по Embedded также находится в дистрибутиве Embedded (1.5.3) (который является просто архивом, и который надо обязательно распаковывать с подкаталогами) - readme_embedded.txt.
примечание: для работы Embedded/Personal с локальной БД не требуется наличие сетевой карты на компьютере или сетевых протоколов в операционной системе.
примечание: Embedded невозможно "вызвать снаружи". Dll embedded-сервера должна находиться в том же каталоге, что и использующий его exe.
(c)iBase.ru