Lazarus 1.8.4 не может найти fbclient.dll (Firebird 3.0)
Модератор: Модераторы
Lazarus 1.8.4 не может найти fbclient.dll (Firebird 3.0)
Lazarus 1.8.4 не может найти fbclient.dll (Firebird 3.0), выдаётся сообщение "Can not load default Firebird clients".
В проекте используется пакет SQLDBLaz 1.0.2.
Библиотека fbclient.dll (версия файла 3.0.4.33054) имеется в папке Lazarusа (C:\lazarus), в папке проекта, в пути поиска; Firebird запущен, к нему можно подключиться через isql; fbclient.dll имеет права на чтение и выполнение для пользователя от имени которого запускается библиотека, приложение и среда разработки. Что можно сделать?
В проекте используется пакет SQLDBLaz 1.0.2.
Библиотека fbclient.dll (версия файла 3.0.4.33054) имеется в папке Lazarusа (C:\lazarus), в папке проекта, в пути поиска; Firebird запущен, к нему можно подключиться через isql; fbclient.dll имеет права на чтение и выполнение для пользователя от имени которого запускается библиотека, приложение и среда разработки. Что можно сделать?
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
DV2r4, попробовать зарегистрировать библиотеку.
DV2r4 писал(а):Lazarus 1.8.4 не может найти fbclient.dll (Firebird 3.0)
Если пользуешь TSQLDBLibraryLoader, положи ее рядом с файлом проекта и укажи в компоненте путь к ней.

А вообще, Лекс Айрин прав - ее надо регить (это делается автоматически, если ставишь FB штатным инсталлятором под винду или скриптом под никсы).
И от себя бы посоветовал, используй нормальные компоненты доступа, которые позволяют указывать произвольное местоположение клиентских библиотек, например, IBX от *Rik*
Просто положите библиотеку в папку проекта и все.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
mig-31, он уже положил. Не помогло.
У меня работает.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
mig-31, это бывает. Допустим, повредился разрешение реестра или отдельная запись. Поэтому иногда и требуются некоторые телодвижения.
Кратко.
Пробовал зарегистрировать: C:\Windows\SysWOW64\regsvr32.exe C:\Firebird\Firebird_3_0\fbclient.dll. Получил сообщение типа "Модуль загружен, но точка входа DllRegisterServer не была найдена".
Реестр и прочие действия:
HKEY_LOCAL_MACHINE\SOFTWARE\Firebird Project\Firebird Server\Instances - отсутствует папка.
В \HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Firebird Project\Firebird Server\Instances есть ключ DefaultInstance=C:\Firebird\Firebird_3_0\
Поискал "fbclient.dll" в стандартных местах Windows: HKCR, HKCU, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs - пусто.
На всякий случай переименовал fbclient.dll в fbclientd.dll и положил переименованный файл вместе с файлом fbclient.dll в "C:\Windows\System32", в папку среды "C:\lazarus", в каталог установки "C:\Firebird\Firebird_3_0" и в папку с проектом. Добавленному в проект SQLDBLibraryLoader-у указал на fbclient.dll в папке с проектом. Не сработало.
Скачал, поставил компоненты IBX и скачал тестовое приложение. Собрал это приложение, указав путь к библиотеке как "C:\Firebird\Firebird_3_0\fbclient.dll". При запуске тестовое приложение говорит о том, что не находит библиотеку в путях поиска. Использованный установщик - Firebird-3.0.4.33054_0_Win32.exe.
Пробовал зарегистрировать: C:\Windows\SysWOW64\regsvr32.exe C:\Firebird\Firebird_3_0\fbclient.dll. Получил сообщение типа "Модуль загружен, но точка входа DllRegisterServer не была найдена".
Реестр и прочие действия:
HKEY_LOCAL_MACHINE\SOFTWARE\Firebird Project\Firebird Server\Instances - отсутствует папка.
В \HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Firebird Project\Firebird Server\Instances есть ключ DefaultInstance=C:\Firebird\Firebird_3_0\
Поискал "fbclient.dll" в стандартных местах Windows: HKCR, HKCU, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs - пусто.
На всякий случай переименовал fbclient.dll в fbclientd.dll и положил переименованный файл вместе с файлом fbclient.dll в "C:\Windows\System32", в папку среды "C:\lazarus", в каталог установки "C:\Firebird\Firebird_3_0" и в папку с проектом. Добавленному в проект SQLDBLibraryLoader-у указал на fbclient.dll в папке с проектом. Не сработало.
Скачал, поставил компоненты IBX и скачал тестовое приложение. Собрал это приложение, указав путь к библиотеке как "C:\Firebird\Firebird_3_0\fbclient.dll". При запуске тестовое приложение говорит о том, что не находит библиотеку в путях поиска. Использованный установщик - Firebird-3.0.4.33054_0_Win32.exe.
DV2r4 писал(а):На всякий случай переименовал fbclient.dll в fbclientd.dll и положил переименованный файл вместе с файлом fbclient.dll в "C:\Windows\System32", в папку среды "C:\lazarus", в каталог установки "C:\Firebird\Firebird_3_0" и в папку с проектом.
Мама дорогая, чего ж ты наворотил
Чисти реестр, сноси криво установленный FB и вручную вычищай с диска все найденные fbclient.dll/gds32.dll. Потом ставь дистрибутив по новой (помнится, в инсталляторе была галочка типа "копировать fbclient.dll как gds32.dll для унаследованных приложений" - она должна быть включена).
И еще, в каталогах "C:\Windows\System32"/"C:\Windows\SysWOW64\" клиентская библиотека должна иметь имя gds32.dll, потому что FB - это форк от IB и так исторически сложилось, что дельфевые (и их адаптированные клоны) компоненты ищут клиентскую gds32.dll в системных папках и реестре.
Также позволь дать тебе 2 совета:
1. на машине с виндой ставь и запускай Firebird не как сервис(демон), а как приложение. Это позволит иметь несколько версий одновременно работающих серверов на машине и тестировать приложение с разными версиями FB
2. используй компоненты доступа, которые позволяют грузить библиотеку клиента динамически (не тот IBX из штатной поставки в Online Package Manager (разработчик упорно повторяет поведение дельфевого IBX), а тот, что от *Rik*, который я указал выше, или в крайнем случае UIB). Это даст гибкость твоему приложению и избавит от "мусора" в системных папках.
Если будет интересно, я могу расписать, как установить на одной машине "зоопарк" серверов по типу такого

После переустановки как приложения (галки в инсталляторе поставил) fbclient.dll как и gds32.dll имеются (в пути поиска в который включено место установки Firebird, gds32.dll - в системной папке "C:\Windows\System32" и прописаны в HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\SharedDlls).
На этот раз воспользовался UIB, сделав простой проект; попробовал предыдущие тестовые проекты пособирать - однако по прежнему библиотека не находится.
На этот раз воспользовался UIB, сделав простой проект; попробовал предыдущие тестовые проекты пособирать - однако по прежнему библиотека не находится.
DV2r4 писал(а):однако по прежнему библиотека не находится.
значит ОСь по-прежнему ищет ее в другом месте. Проверь в списке environment variables (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment), нет ли там переменной FBLIB с прописанными путями? Если есть, удали ее или поправь пути. Если не получится, приходи, испробуем еще один вариант
Переменной FBLIB в реестре не имеется. Думал почитать файл для деинсталлятора unins000.dat, чтобы понимать, куда и что задавалось и ставилось, но он вроде двоичный а не текстовой.
DV2r4 писал(а):Переменной FBLIB в реестре не имеется.
Вообщем, либо клиент у тебя стоит криво, либо в ОСи остался мусор. Давай сделаем так: я тебе напишу небольшой мануал, но ты добросовестно будешь следовать советам, не отступая ни на шаг. Идет?
1. Для начала, удаляем из системы штатным образом установленный Firebird, поиском вычищаем с дисков (особенно из папок C:\Windows\System32 и C:\Windows\SysWOW64\) все файлы, похожие на *firebird*, *fbclient* и *gds32*. По этим же тэгам шмонаем весь реестр. На этом можно будет считать, что потенциальных блох мы выловили.
2. Проверяем список программ, запускаемых вместе с виндой - там не должно быть процесса firebird, запущенного как сервис.
3. Скачиваем FB 3.0.4 (в виде zip-архива) с офф.сайта и распаковываем с сохранением всех относительных путей, например, в C:\Firebird_server\firebird_304 (имхо, все версии firebird лучше складывать в одну папку, чем "размазывать" по корню диска)
4. Открываем любым текстовым редактором firebird.conf, раскомментируем (убираем знак решетки #) и изменяем на произвольные величины следующие 3 параметра (они только должны отличаться от дефолтовых и от подобных параметров другого сервера Firebird, если он был ранее установлен):
например
- RemoteServiceName = gds_db_3304
- RemoteServicePort = 3304
- IpcName = FIREBIRD_3304
5. Запускаем cmd-процессор и в командной строке пишем
Код: Выделить всё
C:\Firebird_server\firebird_304\firebird.exe -a -p 3304чтобы запустить процесс Firebird, который будет слушать порт 3304. Чтобы убедиться, что все получилось, смотрим трей

Примечание: чтобы не запускать вручную сервер при каждом перезапуске винды, достаточно добавить в ветку реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run строковый параметр с любым понятным именем (например, Firebird 3.0.4) и значением ключа "C:\Firebird_server\firebird_304\firebird.exe" -a -p 3304. Выглядеть это должно примерно так (на скрине по понятным причинам показаны пути, которые прописаны у меня)

6. Теперь проверяем работу сервера (в окне cmd), подцепившись к какой-нибудь базе, например, из стандартной поставки FB:
запускаем isql и коннектимся через localhost (если вдруг сетевая петля localhost не определена в файле hosts, то можно вместо нее запросто написать 127.0.0.1) с обязательным указанием номера порта (потому что он у нас не стандартный)
Код: Выделить всё
C:\Users\leyba>cd /d C:\Firebird_server\firebird_304\
C:\Firebird_server\firebird_304>isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect '127.0.0.1/3304:C:\Firebird_server\firebird_304\
examples\empbuild\Employee.fdb' user sysdba password 'masterke';
Database: '127.0.0.1/3304:C:\Firebird_server\firebird_304\exa
mples\empbuild\Employee.fdb', User: SYSDBA
SQL> quit;Аналогично можно запустить произвольное кол-во серверов, при этом у них должны быть уникальными имена инстансов и номера портов (указаны выше).
Собственно, все. Теперь можно пробовать коннектиться через компоненты доступа.
Почистил реестр, системные папки и память, поставил из архива, изменил конфиг.
DV2r4 писал(а):Почистил реестр, системные папки и память, поставил из архива, изменил конфиг.
И ???
