Firedac - подключайтесь к Firebird 2.5
Независимо от того, что я делаю, я не могу подключиться к встроенной базе данных Firebird 2.5 с помощью Firedac. Самое смешное, что вчера это казалось сработавшим, а теперь вдруг просто не получилось.
Вместо того, чтобы ломать голову, почему вдруг это перестало работать, я начал перестраивать чистый проект, чтобы шаг за шагом понять, что происходит. Я добавил (скопировал) все содержимое загруженного пакета из Firebird в каталог своего приложения и, конечно же, в саму базу данных.
Чтобы избежать проблем с папками, я установил параметры среды Delphi, чтобы поместить все файлы (и исполняемый файл в один каталог. Затем я воспользовался предложением, найденным в папке Firebird *.doc, и переименовал fbembed.dll в fbclient.dll. (Вкл. Некоторые вопросы и ответы Firedac о проблеме, которую я прочитал, что Firedac требует файл fbembed.dll. Что ж, я пробовал оба способа, и он все равно не будет работать....). Но позвольте мне остановиться на первой проблеме с fbclient.dll.
Чтобы установить соединение, я сбросил в модуле данных FDPhysFBDriverLink1 и FDConnection1.
Теперь FDPhysFBDriverLink1: это BaseDriverID является FB. Для DriverID я попробовал оба предложения: сначала с "FB", а затем указав полный путь к fbclient.dll. Никто, кажется, не имеет значения.
Когда я захожу в редактор Firedac Connection и ввожу путь к файлу моей базы данных, я получаю сообщение об ошибке "Не удается загрузить библиотеку вендора (fbclient.dll или fbembed.dll)....". Но оба этих файла находятся в папке exe приложения (как предложено на сайте embarcadero.) Так где же Firedac ищет файлы? Я немного сыт по горло Firebird и Firedac, так как они не могут просто объяснить, что нужно сделать, чтобы соединение было успешным. Все, что они дают, это некоторые Неопределенные варианты, которые ни один из них не работает. Добавьте это - добавьте это.... и в конце... потерпите неудачу.
Поэтому, если у кого-то есть опыт, как сделать это с прямым ответом (без ссылок, пожалуйста... Я видел и попробовал их все), я был бы очень признателен Пытаться в течение нескольких дней установить простое соединение действительно глупо. Я пытался также с Unidac с аналогичными результатами. Итак, прежде чем я получу 99-й нервный срыв, что я должен сделать, чтобы установить связь?
2 ответа
Кажется, проблема была в следующем: FDPhysFBDriverLink1 нужна эта информация:
BaseDriverID=FB
DriverID=FB
VendorLib=C:\Users\***\Documents\Delphi\FIREBIRD\fbembed.dll
После установки этого я мог соединить FDConnection1, используя эти параметры:
DriverID=FB
Database=C:\Users\***\Documents\Delphi\FIREBIRD\MYDB.FDB
User_Name=sysdba
Password=masterkey
Protocol=local
Firebird - это клиент-серверная система, в которой есть серверная часть (fbserver.exe или fb_inet_server.exe) и клиентская часть (fbclient.dll). Поэтому, когда вы подключаетесь к обычному (не встроенному) экземпляру Firebird, вы должны указать fbclient.dll в качестве клиентской библиотеки.
Встроенный Firebird представляет собой комбинацию сервера и клиента в одной DLL - они оба собраны в fbembed.dll (вы можете посмотреть на его размер и сравнить с fbclient.dll).
Когда вы используете встроенный сервер, вам нужно указать fbembed.dll в качестве клиентской библиотеки, и в результате вы получите сервер Firebird (т. Е. Код, отвечающий за обработку запросов SQL), встроенный в ваш код.
Если вы не укажете lib вендора в FireDac, он попытается загрузить первую доступную dll, которая, скорее всего, будет fblclient.dll (из System32?).
Firedac, как и любые другие клиентские компоненты, не знает об используемой вами архитектуре Firebird - он просто загружает указанную dll и вызывает ее API. Это дает большую гибкость - вы можете подключиться к Embedded, или к экземпляру SuperServer/Classic/SuperClassic, с помощью одного изменения клиентской библиотеки (и настройки строки подключения).
Очевидная, но все же важная вещь для упоминания - Embedded нельзя использовать для удаленных подключений (с такой строкой подключения: severname:Disk:\Path\Database.fdb).
С уважением, Алексей Ковязин
IBSurgeon