Lazarus 1.8.4 не может найти fbclient.dll (Firebird 3.0)

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Lazarus 1.8.4 не может найти fbclient.dll (Firebird 3.0)

Сообщение DV2r4 » 23.02.2019 11:17:00

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 имеет права на чтение и выполнение для пользователя от имени которого запускается библиотека, приложение и среда разработки. Что можно сделать?
DV2r4
незнакомец
 
Сообщения: 6
Зарегистрирован: 23.02.2019 11:01:52

Re: Lazarus 1.8.4 не может найти fbclient.dll (Firebird 3.0)

Сообщение Лекс Айрин » 24.02.2019 22:17:33

DV2r4, попробовать зарегистрировать библиотеку.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Lazarus 1.8.4 не может найти fbclient.dll (Firebird 3.0)

Сообщение zoltanleo » 24.02.2019 23:09:51

DV2r4 писал(а):Lazarus 1.8.4 не может найти fbclient.dll (Firebird 3.0)

Если пользуешь TSQLDBLibraryLoader, положи ее рядом с файлом проекта и укажи в компоненте путь к ней.

Изображение
Изображение

А вообще, Лекс Айрин прав - ее надо регить (это делается автоматически, если ставишь FB штатным инсталлятором под винду или скриптом под никсы).
И от себя бы посоветовал, используй нормальные компоненты доступа, которые позволяют указывать произвольное местоположение клиентских библиотек, например, IBX от *Rik*
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 333
Зарегистрирован: 17.10.2013 10:55:01

Re: Lazarus 1.8.4 не может найти fbclient.dll (Firebird 3.0)

Сообщение mig-31 » 25.02.2019 12:55:01

Просто положите библиотеку в папку проекта и все.
mig-31
постоялец
 
Сообщения: 206
Зарегистрирован: 14.07.2011 13:46:48

Re: Lazarus 1.8.4 не может найти fbclient.dll (Firebird 3.0)

Сообщение Лекс Айрин » 25.02.2019 13:09:24

mig-31, он уже положил. Не помогло.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Lazarus 1.8.4 не может найти fbclient.dll (Firebird 3.0)

Сообщение mig-31 » 25.02.2019 18:30:29

У меня работает.
mig-31
постоялец
 
Сообщения: 206
Зарегистрирован: 14.07.2011 13:46:48

Re: Lazarus 1.8.4 не может найти fbclient.dll (Firebird 3.0)

Сообщение Лекс Айрин » 25.02.2019 19:18:03

mig-31, это бывает. Допустим, повредился разрешение реестра или отдельная запись. Поэтому иногда и требуются некоторые телодвижения.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Lazarus 1.8.4 не может найти fbclient.dll (Firebird 3.0)

Сообщение DV2r4 » 25.02.2019 22:36:34

Кратко.
Пробовал зарегистрировать: 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
незнакомец
 
Сообщения: 6
Зарегистрирован: 23.02.2019 11:01:52

Re: Lazarus 1.8.4 не может найти fbclient.dll (Firebird 3.0)

Сообщение zoltanleo » 25.02.2019 23:49:17

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). Это даст гибкость твоему приложению и избавит от "мусора" в системных папках.

Если будет интересно, я могу расписать, как установить на одной машине "зоопарк" серверов по типу такого :)

Изображение
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 333
Зарегистрирован: 17.10.2013 10:55:01

Re: Lazarus 1.8.4 не может найти fbclient.dll (Firebird 3.0)

Сообщение DV2r4 » 27.02.2019 00:46:44

После переустановки как приложения (галки в инсталляторе поставил) fbclient.dll как и gds32.dll имеются (в пути поиска в который включено место установки Firebird, gds32.dll - в системной папке "C:\Windows\System32" и прописаны в HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\SharedDlls).
На этот раз воспользовался UIB, сделав простой проект; попробовал предыдущие тестовые проекты пособирать - однако по прежнему библиотека не находится.
DV2r4
незнакомец
 
Сообщения: 6
Зарегистрирован: 23.02.2019 11:01:52

Re: Lazarus 1.8.4 не может найти fbclient.dll (Firebird 3.0)

Сообщение zoltanleo » 27.02.2019 02:36:08

DV2r4 писал(а):однако по прежнему библиотека не находится.

значит ОСь по-прежнему ищет ее в другом месте. Проверь в списке environment variables (HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment), нет ли там переменной FBLIB с прописанными путями? Если есть, удали ее или поправь пути. Если не получится, приходи, испробуем еще один вариант
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 333
Зарегистрирован: 17.10.2013 10:55:01

Re: Lazarus 1.8.4 не может найти fbclient.dll (Firebird 3.0)

Сообщение DV2r4 » 27.02.2019 22:56:36

Переменной FBLIB в реестре не имеется. Думал почитать файл для деинсталлятора unins000.dat, чтобы понимать, куда и что задавалось и ставилось, но он вроде двоичный а не текстовой.
DV2r4
незнакомец
 
Сообщения: 6
Зарегистрирован: 23.02.2019 11:01:52

Re: Lazarus 1.8.4 не может найти fbclient.dll (Firebird 3.0)

Сообщение zoltanleo » 28.02.2019 20:18:35

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;


Аналогично можно запустить произвольное кол-во серверов, при этом у них должны быть уникальными имена инстансов и номера портов (указаны выше).

Собственно, все. Теперь можно пробовать коннектиться через компоненты доступа.
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 333
Зарегистрирован: 17.10.2013 10:55:01

Re: Lazarus 1.8.4 не может найти fbclient.dll (Firebird 3.0)

Сообщение DV2r4 » 01.03.2019 00:19:01

Почистил реестр, системные папки и память, поставил из архива, изменил конфиг.
DV2r4
незнакомец
 
Сообщения: 6
Зарегистрирован: 23.02.2019 11:01:52

Re: Lazarus 1.8.4 не может найти fbclient.dll (Firebird 3.0)

Сообщение zoltanleo » 01.03.2019 00:37:03

DV2r4 писал(а):Почистил реестр, системные папки и память, поставил из архива, изменил конфиг.

И ???
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 333
Зарегистрирован: 17.10.2013 10:55:01

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15

Рейтинг@Mail.ru