【发布时间】:2012-10-25 04:35:33
【问题描述】:
是否可以在 Excel 中从 VBA 进行 SELECT 之类的查询,以便我可以从 Excel 中查询 PostgreSQL 数据库?
如果可能,请解释我如何连接到数据库。我在 Google 中查找,但没有找到任何结果。
【问题讨论】:
标签: excel postgresql vba odbc ado
是否可以在 Excel 中从 VBA 进行 SELECT 之类的查询,以便我可以从 Excel 中查询 PostgreSQL 数据库?
如果可能,请解释我如何连接到数据库。我在 Google 中查找,但没有找到任何结果。
【问题讨论】:
标签: excel postgresql vba odbc ado
这里有一些代码可以作为参考。希望能帮助到你。
Sub SelectBasic()
Dim objDb_con
Dim strSomeValue As String
Set objDb_con = CreateObject("ADODB.Connection")
Set Rsdatatype = CreateObject("ADODB.RecordSet")
glbConnString = Trim(ActiveSheet.Range("B1").Value)
//Connection string format:Driver={PostgreSQL Unicode};Database=MyDB;server=192.16*.*.**;UID=USERID;Pwd=pasword //comment it
If glbConnString = "" Then
MsgBox "Enter the Connection String"
Else:
objDb_con.Open glbConnString
strSql = "select strSomeValue from SOMETABLE where Something=1"
Rsdatatype.Open strSql, objDb_con, adOpenKeyset, adLockpessimistic
If Rsdatatype.EOF = False Then strSomeValue = Rsdatatype.Fields(0).Value
Rsdatatype.Close
End If
objDb_con.Close
End Sub
【讨论】:
在 PostgreSQL 中创建一个表或视图来描述您想要的数据。
使用来自 VBA 的 ODBC 或 ADO 连接来连接到 PostgreSQL。如果使用ODBC你需要通过odbcad32.exe创建一个DSN然后在VB中使用DSN,直接连接并不容易。
见:
Better written eample that uses Oracle,但原理是一样的——ODBC/ADO。
【讨论】:
即使对于 64 位 Windows,Excel VBA 也需要 32-bit ODBC driver。
通过%windir%\SysWOW64\odbcad32.exe 创建一个 DSN。实际上,输入 odbcad32.exe 指向 64 位版本,默认情况下您找不到合适的 32 位驱动程序。
【讨论】:
odbcad32.exe 的潜在问题。这对某些人来说可能很明显,但对我而言并非如此,而且根据网络上未答复的线程数量,我想我并不孤单。由于格式问题,Github 上的 Excel 插件无法正常工作,但措辞很好地解释了要遵循的过程。如果您不想发布我的答案,我不会生气,但将来会有几个人和我一样遇到同样的问题。