【发布时间】:2021-04-14 03:03:46
【问题描述】:
我在 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 *...),则会返回相同的未指定错误。
但是,如果我省略一个特定列(帐户代码,即文本),而只返回其他 7 个,它会正确执行。
导致这一列在 pgAdmin 中正常工作但在 VBA 中不能正常工作的问题可能是什么?
谢谢。
【问题讨论】:
-
视图是否包含与 accountcode 相同的基础表中的其他列?你能用这个子程序查询那个表,包括 accountcode 列吗?
-
列都来自同一个表。我能够在 VBA 中查询基础表,并且可以返回除 accountcode 之外的任何列。
-
账户代码可能有列级安全限制吗?如果是 TEXT 类型,也许有些值比 ADO 可以通过这种方式处理的更大?还有其他 TEXT 列吗? (顺便说一句,如果列都来自同一个表,为什么要使用视图?)
-
没有任何列级限制。其中最长的值为 4 个字符。它不需要是视图,但最初是这样设置的,所以我决定坚持使用它。
-
如果最宽的值为 4 个字符,如果您更改表以使该列的类型为 VARCHAR(4) 而不是 TEXT 会发生什么(或者如果将来可能有更宽的值,一些更宽的 VARCHAR)?
标签: vba postgresql