查询PostgreSQL视图时出现VBA未指定错误



我正在VBA中查询PostgreSQL视图:

Sub GetData()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
Dim wb As Workbook: Set wb = ThisWorkbook
With cn
.ConnectionString = "Driver={PostgreSQL ANSI(x64)};Database=a;Server=b;Uid=c;Pwd=d;Port=5432;sslmode=require;"
.Open
End With
SqlString = "SELECT * FROM myView;"
rs.Open SqlString, cn
...
End Sub

查询SELECT * FROM myview;在pgAdmin中按预期执行。在VBA中,它抛出一个未指定的错误。我对同一个数据库使用了相同的VBA代码和其他简单的SQL查询,它运行正常。

视图应返回8列。如果我在VBA中列出查询中的这8列(而不是SELECT*…(,则会返回相同的"未指定错误"。

然而,如果我去掉一个特定的列(accountcode,它是文本(,而只返回另一个7,它就会正常执行。

这一列可能是什么问题导致它在pgAdmin中正常工作,而在VBA中却不能正常工作?

谢谢。

问题似乎是(ODBC?看看它是否有对此有用的配置选项(驱动程序在处理TEXT数据类型时做出了错误的假设。

在任何方面都不熟悉postgresql,但根据这篇关于从TEXT转换为VARCHAR的文章,考虑明确列出您从视图中选择的每一列(无论如何,SELECT *都是不好的做法(,然后您可以做这样的事情:

Dim sql As String
sql = "SELECT Field1, Field2, ThatTextField::varchar FROM myView;"

还可以考虑将连接和查询代码转移到类模块,在类模块中,ADODB连接可以声明为模块级WithEvents变量;然后您可以处理ADODB连接事件,如WillConnectWillExecuteInfoMessage,这可以为您提供更有意义的错误消息。

最新更新