У меня проблемы с поиском четких и надежных примеров подключения к базе данных PostgreSQL из Excel с использованием VBA ADO. По общему признанию, я новичок в VBA, и большинство примеров и учебных пособий очень ориентированы на Access или MSSQL. (Я работаю в основном в Ruby, Rails, Perl и PostgreSQL.)
Я ищу код для подключения и возврата простого запроса (SELECT * FROM клиентов;) на лист Excel. Параметры соединения (ip сервера, пользователь, пароль, база данных) находятся в ячейках отдельной таблицы.
Я ценю вашу помощь и терпение.
Код:
Sub ConnectDatabaseTest()
Dim cnn As ADODB.connection
Dim cmd As ADODB.Command
Dim param As ADODB.Parameter
Dim xlSheet As Worksheet
Dim rs As ADODB.Recordset
Dim sConnString As String
Dim i As Integer
' Connection Parameters
Dim strUsername As String
Dim strPassword As String
Dim strServerAddress As String
Dim strDatabase As String
' User:
strUsername = Sheets("CONFIG").Range("B4").Value
' Password:
strPassword = Sheets("CONFIG").Range("B5").Value
' Server Address:
strServerAddress = Sheets("CONFIG").Range("B6").Value
' Database
strDatabase = Sheets("CONFIG").Range("B3").Value
Set xlSheet = Sheets("TEST")
xlSheet.Activate
Range("A3").Activate
Selection.CurrentRegion.Select
Selection.ClearContents
Range("A1").Select
Set cnn = New ADODB.connection
sConnString = "DRIVER={PostgreSQL Unicode};DATABASE=" & strDatabase & ";SERVER=" & strServerAddress & _
";UID=" & strUsername & ";PWD=" & strPassword
cnn.Open sConnString
cmd.ActiveConnection = cnn
Dim strSQL As String
strSQL = "SELECT * FROM customers"
cmd.CommandType = ADODB.CommandTypeEnum.adCmdText
cmd.ActiveConnection = cnn
cmd.CommandText = strSQL
...
Кажется, что здесь не работает: cmd.ActiveConnection = cnn
РЕДАКТИРОВАТЬ: добавлен пример кода.
РЕДАКТИРОВАТЬ: sConnString получает значение:
DRIVER={PostgreSQL35W};DATABASE=my_database;SERVER=1.2.3.4;UID=analyst;PWD=sekrit
ОБНОВЛЕНИЕ 2/7: Я изменил параметр «ДРАЙВЕР» в строке подключения:
sConnString = "DRIVER={PostgreSQL Unicode};DATABASE=" & strDatabase & ";SERVER=" & strServerAddress & _
";UID=" & strUsername & ";PWD=" & strPassword & ";"
... и я получаю другую ошибку: «Ошибка времени выполнения 91: переменная объекта или переменная блока не установлена»
Hm. Идеи?