2014-02-20 6 views
4

Я пытаюсь запустить запрос из приложения Microsoft excel и не смог успешно подключиться. У меня PostgreSQL 9.3 на моей локальной машине, и я запускаю 64-битные окна 7. У меня есть пример базы данных dvdrental, которая является демо-базой данных. Мне просто нужно подключиться к базе данных, запустить запрос и просмотреть вывод на моем листе (или в ближайшем окне, либо разрешить проблему подключения). Вот что я до сих пор не работаю.Как подключить VBA к postgreSQL и выполнить запрос

Option Explicit 
Public objConnection As ADODB.Connection 
Public strConnection As String 

Public Sub TestPostgresConnection() 
Dim strConnection As String 
strConnection = "Driver={PostgreSQL Unicode};Server=localhost;Port=5432; Database=dvdrental;UID=sa;PWD=wrox;" 
Set objConnection = New ADODB.Connection 
Set objRecordSet = New ADODB.Recordset 
objConnection.Open strConnection 
With objRecordSet 
    .ActiveConnection = objConnection 
    .Open "SELECT * FROM actor" 
End With 
Do While Not objRecordSet.EOF 
    Debug.Print objRecordSet.Fields(0).Value 
    objRecordSet.MoveNext 
Loop 
objRecordSet.Close 
objConnection.Close 
Set objRecordSet = Nothing 
Set objConnection = Nothing 
End Sub 

Вот список моих рекомендаций;

Visual Basic для приложений Microsoft Excel Библиотекой 14,0 Объекта OLE Automation Microsoft Office Библиотека 14,0 Объекта Microsoft Forms 2.0 Библиотеки объектов Microsoft Access 14,0 Библиотеки объектов Microsoft ADO Ext. 6,0 для DOL и безопасности Microsoft ActiveX Data Objects 2.8 Library Microsoft Windows Common Confrols 6,0 (SP6)

Когда я выполняю этот метод испытания TestPostgresConnection, я получаю «[Miscrosoft] [ODBC Driver Manager] Источник данных не найден и нет указанного драйвера по умолчанию »

Моя установка postgres была стандартной, и я просто следил за указаниями на своем веб-сайте для создания локальной RDBMS для тестирования.

Может ли кто-нибудь сказать мне, почему я не могу подключиться и выполнить запрос? Ни один из решений не работал до сих пор. Благодарю.

+0

Можете ли вы подключиться к базе данных с помощью стандартных инструментов Postgres?Чтобы устранить неполадки, создайте пустой текстовый файл с расширением .UDL и дважды щелкните его, заполните детали для postgres - это работает? –

+0

Я обнаружил проблему и с тех пор решил проблему. Проблема была решена после загрузки драйвера Postgres ANSI с сайта PostgreSQL. Это привлекло мое внимание после просмотра требований к подключению SQLLite здесь: http://www.codeproject.com/Articles/586361/UsingplusanplusAccess-2cplusMySQL-2cplusPostgreSQL. Спасибо @ElectricLlama – joey

ответ

-1

Мой ответ - общий ответ. Возвращение к сообществу. Так что будь красивой. У меня был аналогичный вопрос, и я использовал следующее, чтобы настроить его.

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

Эти инструкции были огромная помощь в целом: http://www.dashbay.com/2011/03/working-with-postgres-on-windows-via-odbc/

Ссылка для скачивания в ссылке выше, не работает для меня. Я нашел загрузки ODBC здесь: https://www.postgresql.org/ftp/odbc/versions/msi/ Я думаю, что я скачал этот один: psqlodbc_09_05_0400-x86.zip

Я использовал ответ Константина, чтобы получить% WINDIR% \ SysWOW64 \ odbcad32.exe по этой ссылке: PostgresSQL ODBC Drivers on Windows 7 not showing up

я скачал MS Power запрос здесь, который я нашел полезным: https://www.microsoft.com/en-us/download/details.aspx?id=39379

Я рад изменить свой ответ, если я должен добавить пояснение.

Ниже приведена подзадача для запроса, а ниже - подстрока, которая демонстрирует, как вы ее используете.

Sub CcQueryPg(sSql As String, Optional sOdbcName As String = "ConnectionNameHere") 


'Declare a Connection object 
Dim cnDB As New ADODB.Connection 

'Declare a Recordset Object 
Dim rsRecords As New ADODB.Recordset 

'Open the ODBC Connection using this statement 
cnDB.Open sOdbcName 
rsRecords.Open sSql, cnDB 

'Close everything and set the references to nothing 
rsRecords.Close 
Set rsRecords = Nothing 
cnDB.Close 
Set cnDB = Nothing 
End Sub 

Sub SendQuery() 

Call CcQueryPg("COPY sometablenamehere FROM '/mnt/somepathhere/somefilename.csv' DELIMITER ',' CSV HEADER;") 

End Sub 

Эта ссылка на файл относится к файлу на компьютере под управлением Linux. Формат вашего пути может отличаться.

Смежные вопросы