Подключение MS Access к PostgreSQL серверу
У меня проблемы с подключением к нашему серверу postgres. Мне дали код, используемый для подключения ms доступа к нашему SQL Server. Это должно быть DSN-менее, я установил ODBC-driver
и теперь я застрял в поиске правильной строки подключения для записи в код доступа VBA.
Я знаю, что это должно быть примерно так:
stConnect = "ODBC;Driver={PostgreSQL UNICODE};Data Provider=pgsqlODBC;hostaddr=[IP-adress];Port=61000;dbname=TE_TestFirst;user=admin;password=testtest;"
Или, может быть, так:
stConnect = "ODBC;Driver={PostgreSQL UNICODE};Data Provider=pgsqlODBC;SERVER=[IP-adress];PORT=61000;DATABASE=TE_TestFirst;UID=admin;PWD=testtest;"
Я прочитал, что 64-битные ПК должны быть предоставлены "Поставщик данных". Пока что ничего не работает, кроме версии DSN, которая нам не нужна. Я скопировал бесчисленные строки подключения с разных сторон, может быть, я что-то наблюдаю?
Я с нетерпением жду ваших ответов и заранее благодарю вас. Puddingloeffel
5 ответов
В итоге мы сделали следующее:
Использование строки подключения "PostgreSQL Unicode(x32)", написанной так, как показано выше + использование другого сценария для подключения к
Теперь работает нормально и без DSN:)
Я нашел способ создать User-DSN в модуле MS Access, который затем использую для подключения к серверу. Это не очень красивый код, но он работает. Для тех, кто ищет подобное решение:
'Creating User DSN
strAttributes = "Description=I did this myself" & Chr(13) & "Server=[Servername/ID]" & Chr(13) & "Database=TE_TestFirst" & Chr(13) & "Username=admin" & Chr(13) & "Password=***" & Chr(13) & "Port=61000"
DBEngine.RegisterDatabase "DSNnew", "PostgreSQL Unicode", True, strAttributes
MsgBox "DSN has been created", vbInformation
Connection String
stConnect = "ODBC;DSN=DSNnew;Server=[IP-adress];Port=61000;Database=TE_TestFirst;Uid=admin;Pwd=****;"
Как видите, информация встраивается дважды, что мне действительно не нравится, но пока все в порядке. Вы можете проверить созданный DSN с администратором ODBC.
Вы можете найти оригинальный код здесь
Также этот код - способ, которым мы получаем таблицы с сервера в MS Access. Хотя пример касается SQL Server, он прекрасно работает и с PostgreSQL! (Как я вижу сейчас, эта сторона также предоставляет решение о создании DSN)
Что-то вроде этого:
stConnect = "Driver={PostgreSQL Unicode(x64)};Servername=dbtest;Port=5432;UID=postgres;Database=postgres;Password=****";
Я не смог решить проблему с помощью строки подключения, которая не содержит DSN, но с DSN file
как @Erik van Asmuth и @krish KM сказал.
Файл DSN находится в папке "Мои документы" (администратор ODBC автоматически сохранил его в этой папке. Вы можете переместить его куда угодно, но затем вместо имени файла вам нужно будет указать путь)
Я открываю через VBA Code
в MS Access со следующей строкой подключения:
stConnect = "ODBC;FILEDSN=PGUnicode32;Server=[IP-adress];Port=61000;Database=TE_TestFirst;Uid=admin;Pwd=****;"
Access получил соединение и загружает таблицу TE-TestFirst
, Еще раз спасибо, ребята. Сейчас попробую подключиться через строку подключения без файла
Что-то изменилось с Office 365; кажется, раньше это было гораздо проще, чем сейчас. Меня это свело с ума, и единственный реальный намек был в ответе @Andrey-Belykh.
Вот что я обнаружил, что это действительно сработало.
В разделе «Внешние данные» -> «Диспетчер связанных таблиц» нажмите «Добавить». Появится следующее диалоговое окно:
Выберите нижний вариант «Пользовательский».
Затем появляется этот сводящий с ума бесполезный диалог с нулевой документацией (или онлайн-справкой):
Чтобы знать, что вы устанавливаете, вам нужно точное описание драйвера ODBC — существующие соединения ODBC очень помогают в этом. И описание должно быть в фигурных скобках:
Итак, в этом случае строка подключения начинается с:
DRIVER={PostgreSQL Unicode(x64)};
Путь к источнику данных может быть просто «ODBC», а послеDRIVER=
оператор, который вы можете поместить в фактическую строку подключения:
Оттуда появляется обычное диалоговое окно для каждой таблицы и представления.
Я надеюсь, что это кому-то поможет и сэкономит время, которое я только что потратил, пытаясь разобраться в этом.