Здраствуйте!
Ситуация: Есть ноут (win7) и комп (winXP). На ноуте стоит сервер БД Postgresql-9.0.
Подключаюсь к серверу с ноута (192.168.2.1) - соединяет, с компа (192.168.2.2) - не соединяет. Машины друг друга пингуют.
Попытки решения:Как уже пытался решить проблему?
1. Редактирование postgresql.conf
... #------------------------------------------------------------------------------ # CONNECTIONS AND AUTHENTICATION #------------------------------------------------------------------------------ # - Connection Settings - listen_addresses = '*' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost', '*' = all # (change requires restart) port = 5432 # (change requires restart) max_connections = 100 # (change requires restart)
... # TYPE DATABASE USER CIDR-ADDRESS METHOD # IPv4 local connections: host ALL ALL 127.0.0.1/32 md5 host ALL ALL 192.168.2.0/24 md5 # IPv6 local connections: host ALL ALL <img class="ccfilter smileys" src="https://pgdocs.ru/sites/all/modules/ccfilter/smileys/aj.gif" alt="::" title="::" />1/128 md5
Вопрос: В чем еще может заключаться мой трабл?
Что означает "не соединяет"?
Что означает "не соединяет"? Каков текст ошибки?
Не найдены динамические библиотеки
Оу, спасибо Вам за толчок в правильном направлении! Додумался всё таки, как выкоренить текст ошибки. Просто структура в коде была try-except. Она выводила не стандартную ошибку, а которую я описал. Убрал эту структуру, теперь при попытке подключиться с компа выводится ошибка None of the dynamic libraries can be found or is not loadable: C:\Program Files\PostgreSQL\9.0\bin\libpq.dll ! Use TZConnection.LibraryLocation if the location is invalid. Стало ясно, что весь фейл связан с динамическими библиотеками PostgreSQL. Только теперь возник новый вопрос: "Что за бред? Моя программа что, ищет из-под клиентской машины динамические библиотеки на локальном хосте, а не на сервере? Это косяк компонента, который я использую для соединения с БД?" А использую я ZConnection (из библиотеки Zeoslib) и там в свойстве LibraryLocation указал именно адрес C:\Program Files\PostgreSQL\9.0\bin\libpq.dll.
Юзал в своё время Zeos на
Юзал в своё время Zeos на Дельфах, правда очень давно это было. С libpq.dll была какая-то тонкость, точно не помню. Во-первых, надо убедиться, что баблиотека установлена соответственно архитектуре, т.е. если у вас x64, то и либа должна быть x64. Далее попробуйте последовательно положить libpq.dll в windows\system32 в windows и в рабочий каталог .exe программы, которую вы запускаете. Вроде, насколько я помню, именно в этом было дело, хотя не гарантирую.
Format '% ' invalid or incompatible with argument.
Спасибо за ответ. Скорее всего Вы имеете в виду то, что библиотека должна находится в этих каталогах на ноуте (на сервере БД), а не на клиентском хосте? В таком случае: Взял я файл C:\Program Files\PostgreSQL\9.0\bin\libpq.dll и скопировал его сначала в C:\Windows\System32. В свойстве TZConnection.LibraryLocation выставил путь C:\Windows\System32\libpq.dll. После компиляции, запуска программы при подключении к БД получаю следующую ошибку.
Не удаляя библиотеку с C:\Windows\System32, тоже самое выполнил по отношению к C:\Windows, поменял путь в свойстве - и опять тот же результат. С рабочим каталогом проекта - те же грабли.
В общем, подключение в программе работает только если в LibraryLocation указать путь к libpq.dll, который лежит в C:\Program Files\PostgreSQL\9.0\bin. Это странно. А когда удаленно подключаешься к серверу, то возникает старая ошибка с текстом None of the dynamic libraries can be found or is not loadable: C:\Program Files\PostgreSQL\9.0\bin\libpq.dll ! Use TZConnection.LibraryLocation if the location is invalid. Неужели единственным решением является установка libpq.dll в C:\Program Files\PostgreSQL\9.0\bin на всех клиентах?
Нет, библиотека должна быть
Нет, библиотека должна быть именно на клиенте, ведь соединение с БД вы устанавливаете с клиента.
Насчёт того куда правильно устанавливать .dll для работы с Zeos я вам не подскажу. Во-первых, Zeos - это сторонняя библиотека, которая не относится к PostgreSQL. Во-вторых, её работа на совести её авторов. Попробуйте списаться с авторами и задать им этот вопрос. Помнится мне автор отвечал даже в аську, хотя лет 10 назад это было, возможно теперь они птыцы гордые
Удалось установить удаленное подключение
Спасибо за ответ. Ого! Очень весомое первое предложение вашего ответа. Кардинально изменило мое представление.
Выяснил, все dll-ки нужно устанавливать либо в windows/system32, либо в папку, записанную в системную переменную PATH, либо в папку с проектом (записал в порядке уменьшения приоритета).
Общение с авторами ZEOS-библиотеки оставлял на потом, когда в этом вопросе наступит вообще худой конец. К счастью, до такого не дошел
http://www.sql.ru/forum/70484
http://www.sql.ru/forum/704842/ne-podkluchautsya-biblioteka-libpq-dll-v-...
Удалось установить удаленное подключение
Спасибо за ответ. Уже посещал тему по этой ссылке. Но это немного не мой случай. Тогда решил, а почему бы не установить компоненты ZEOS'а заново - вместо 7.1.3-stable (которая, походу, действительно существует с косяком) поставить более раннюю и, наверняка, более стабильную 6.6.4-stable. Эврика! Компонент начал ругаться на уже известные ошибки, как на том форуме по ссылке. После подробного рассмотрения темы, последовательной установки библиотек выяснил, каких библиотек не хватало. Хотя ругалось на отсутствие libpq.dll и libpq81.dll, но на самом деле требовались libeay32.dll и ssleay32.dll. Весь минимальный список динамических библиотек, при котором удалось установить удаленное соединение с базой:
Всем спасибо за помощь! Думаю, тему можно закрывать.