Создание ODB C DSN с использованием VBA - PullRequest
0 голосов
/ 10 февраля 2020

Я рассмотрел несколько похожих вопросов, так что это не из-за отсутствия попыток. Я хочу создать DSN для Postgres с использованием VBA. Я специально не хочу использовать подключение без DSN в Access. Я подозреваю, что это может быть моя строка подключения, а не код, но я не уверен, и я не получаю никаких ошибок, просто неудачно.

Мой код выглядит следующим образом:

Option Compare Database
Option Explicit

Private Declare Function SQLConfigDataSource Lib "ODBCCP32.DLL" _
   (ByVal hwndParent As Long, ByVal fRequest As Long, _
   ByVal lpszDriver As String, ByVal lpszAttributes As String) _
   As Long

Private Const ODBC_ADD_SYS_DSN = 4

Public Function CreateDSN(Driver As String, Attributes As _
  String) As Boolean

    CreateDSN = SQLConfigDataSource(0&, ODBC_ADD_SYS_DSN, _
      Driver, Attributes)

End Function

Sub test()
Dim strConnection As String
strConnection = "ODBC;DSN=Postgres_Test;Driver=PostgreSQL Unicode;Server=************.*********.***.****;Port=*****;Database=example;Uid=********;Pwd=****************;"
Debug.Print CreateDSN("PostgreSQL Unicode", strConnection)
End Sub

Все, что мне нужно для go, это Ложь в ближайшем окне. Если бы кто-то мог подтвердить, что это просто строка подключения (и каков правильный синтаксис), это было бы полезно. Я попытался просмотреть свойства связанной таблицы в Access той, где я вручную создал DSN и его тот, и этот , который я использовал для создания той, которую я уже использую.

1 Ответ

1 голос
/ 10 февраля 2020

SQLConfigDataSource не принимает строку подключения. Он принимает имя драйвера и атрибуты.

Давайте разберем строку подключения:

ODBC;: префикс DAO-Speci c, указывающий строку подключения ODB C. Никогда не требуется вне Access / DAO.

DSN=Postgres_Test: имя DSN

Driver=PostgreSQL Unicode: имя драйвера, если никогда не следует сочетать с Имя DSN в строке подключения, поскольку DSN указывает имя драйвера

Server=************.*********.***.****;Port=*****;Database=example;Uid=********;Pwd=****************;: атрибуты драйвера c.

Если мы посмотрим на документацию, атрибуты драйвера должны быть нулевыми -отделяется, не разделяется ;, и строка должна заканчиваться двойным нулевым разделителем.

Итак, последний вызов должен выглядеть следующим образом:

CreateDSN = SQLConfigDataSource(0&, ODBC_ADD_SYS_DSN, _
  "PostgreSQL Unicode", "DSN=Postgres_Test" & vbNullChar & "SERVER=***" & vbNullChar & "Port=*****" & vbNullChar & 'Etc)

Убедитесь, что что заканчивается на vbNullChar

Кроме того, fRequest - это Word, а Word соответствует Integer в VBA, поэтому ваше объявление должно быть скорректировано для этого.

Однако, как указал Макс, в Access есть встроенная система регистрации уведомлений о доставке, и вам, вероятно, следует просто использовать ее, поскольку это намного проще.

...