Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как использовать firebird embedded?  (Прочитано 18216 раз)
0 Пользователей и 1 Гость смотрят эту тему.
NeferSky
Постоялец

ru
Offline Offline
Бессмертный


« : 22-08-2010 11:44 » 

А кто-нибудь доступно объяснит как использовать firebird embedded? Я с ним первый раз столкнулся, нужно перенести приложение со суперсервера. К суперсерверу подключался компонентом TIBDatabase. Из ридми по огнептице я вынес "Just copy fbembed.dll, icudt30.dll, icuin30.dll and icuuc30.dll into the directory with your application." А... дальше? Из них, видимо, нужно вызвать какую-то процедуру подключения, но я даже названия ее нигде не встретил.
Записан

Не тронь налаженный механизм, и он тебя не подведет.
Делать надо хорошо, а плохо - само получится.
Phodopus
Интересующийся

ru
Offline Offline

« Ответ #1 : 23-08-2010 08:32 » 

Помнится надо настроить коннекшнстринг в винде натравив его на эту библиотеку. Вообще там в документации все есть.
Записан
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 23-08-2010 11:53 » 

Цитата
Что за версии 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
« Последнее редактирование: 23-08-2010 11:55 от Oldy » Записан

С уважением, Oldy.
NeferSky
Постоялец

ru
Offline Offline
Бессмертный


« Ответ #3 : 23-08-2010 15:26 » 

Phodopus, если ты имеешь в виду переменные среды, то я пробовал указывать. Не то. Хотелось бы знать наверняка, чего искать. Мне говорили краем слова, надо где-то нолик на единичку поменять. Но где?)))

Oldy, это я уже читал всё, спасибо...
Записан

Не тронь налаженный механизм, и он тебя не подведет.
Делать надо хорошо, а плохо - само получится.
NeferSky
Постоялец

ru
Offline Offline
Бессмертный


« Ответ #4 : 26-08-2010 14:09 » 

Пробовал через ADO - тоже не разобрался... В любом случае, лучше бы через IBX...
Записан

Не тронь налаженный механизм, и он тебя не подведет.
Делать надо хорошо, а плохо - само получится.
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #5 : 26-08-2010 14:46 » 

Цитата
Если коннект локальный (c:\dir\data.gdb) - то библиотека выполняет функции сервера.

это единственное, что нужно настраивать в TIBXDataBase - путь к локальной БД.
Записан

Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 26-08-2010 15:26 » 

Предполагаю, что TIBXDataBase ищет библиотеку gds32.dll ибо иного искать не может. 
В папку с программой скопированы fbembed.dll, icudt30.dll, icuin30.dll and icuuc30.dll, но нет gds32.dll. Предполагаю что в  "ридми" кроме фразы "Just copy fbembed.dll" должна быть еще такая фраза: "Rename fbembed.dll to gds32.dll" или еще какой либо намек на то, где взять gds32.dll могущую работать как fbserver.exe. Проверьте пожалуйста мои предположения.
« Последнее редактирование: 26-08-2010 16:02 от Oldy » Записан

С уважением, Oldy.
NeferSky
Постоялец

ru
Offline Offline
Бессмертный


« Ответ #7 : 27-08-2010 15:36 » 

Вот ведь бесовская вещь! Переименовывать пробовал и ранее, и файлы с обоими именами подкладывал - не получалось, приложение базу не видело в упор. Сейчас почему-то заработало... Методом научного тыка выявлено, что для простого отображения данных из таблицы требуются GDS32.DLL, ICUDT30.DLL и ICUUC30.DLL. А лучше - еще и все остальное.

Всем спасибо!
Записан

Не тронь налаженный механизм, и он тебя не подведет.
Делать надо хорошо, а плохо - само получится.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines