Как связать таблицы с кодом VBA через ODBC
На самом деле я использую ODBC-Connection для подключения Ms Acces к таблицам PostgreSQL-DB. Я подключаю их с помощью команды Внешние данные / Импорт ODBC-Link. Работает нормально.
Но как я могу использовать VBA для связи моих таблиц?
2 ответа
При использовании VBA для связи таблицы с ODBC, вы можете добавить и APP=
Аргумент для указания имени приложения, которое обычно будет отображаться в свойствах соединения на сервере базы данных.
Например, вот пример строки подключения ODBC для связанной таблицы:
ODBC;Driver={SQL Server};Server=MyServer\SQLExpress;Database=MyDatabase;APP=My App Title;Trusted_Connection=Yes;
My App Title
это строка, которая будет вашим именем приложения для этого соединения.
Обновление 1 В ответ на дальнейшие комментарии ОП:
Вот пример кода для связи таблицы через ODBC в VBA. Чтобы облегчить это, вы также должны всегда удалять связанную таблицу ODBC каждый раз перед повторным связыванием ее, чтобы убедиться, что ваши параметры соблюдаются, и что Microsoft Access обновляет схему для связанной таблицы. В этом примере показана строка подключения для базы данных SQL Server, поэтому все, что вам нужно изменить, - это строка подключения для вашей PostgreSQL-DB. Оставшийся код VBA будет таким же.
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim strConn As String
Dim ODBCTableName as String
Dim AccessTableName as String
Set db = CurrentDb()
ODBCTableName = "dbo.YourTable"
AccessTableName = "YourTable"
strConn = "ODBC;Driver={SQL Server};Server=YOURSERVER\SQLINSTANCE;Database=MYDATABASE;Trusted_Connection=No;UID=MyUserName;PWD=MyPassword"
db.TableDefs.Refresh
For Each tdf In db.TableDefs
If tdf.Name = AccessTableName Then
db.TableDefs.Delete tdf.Name
Exit For
End If
Next tdf
Set tdf = db.CreateTableDef(AccessTableName)
'===============================
'If your connection string includes a password
'and you want the password to be saved, include the following 3 lines of code
'to specify the dbAttachSavePWD attribute of the TableDef being created
'If you don't want to save the password, you would omit these 3 lines of code
'===============================
If InStr(strConn, "PWD=") Then
tdf.Attributes = dbAttachSavePWD
End If
tdf.SourceTableName = ODBCTableName
tdf.Connect = strConn
db.TableDefs.Append tdf
По какой-то причине этот код выдает ошибку времени выполнения 3170 - не удалось найти устанавливаемый ISAM. Однако, когда вы добавляете ODBC; в начале строки подключения, тогда он работает. Строка подключения должна выглядеть примерно так:
strConn = "ODBC;DRIVER={MySQL ODBC 5.2 Unicode Driver};" _
& "SERVER=servername;" _
& "DATABASE=databasename;" _
& "UID=username;PWD=password; OPTION=3"