我以前见过这个话题How to insert values into the database table using VBA in MS access
但这并没有解决我的问题。
我正在创建一个表单,将值插入postgresql中包含数组[]文本的表中。
用户必须选择要添加的项,然后单击按钮执行SQL语句。所以我首先创建一个按钮和一个文本框来加载要添加到数组中的项,下面是代码

Private Sub cmdSig_Click()
 Dim registros As String
 registros = "'" & [memo] & "'" & ", "
 [resu] = registros & [resu]
End Sub

然后创建按钮来执行SQL INSERT-INTO语句。代码如下:
    Private Sub cmdPruebas_Click()
    Dim strsql As String, resultado As String, salida As String

        Dim db As Database
        dbconnect = "ODBC;DRIVER=PostgreSQL ANSI;UID=***;PWD=***;PORT=5432;SERVER=***.***.**.**;DATABASE=somedb;DSN=C:\***"
        Set db = OpenDatabase("", False, False, dbconnect)
        resultado = [resu]

        strsql = "insert into prueba_arrays (tipo_intervencion) values "
        salida = "(array[" & resultado & "]);"




        DoCmd.SetWarnings False
        DoCmd.RunSQL strsql & salida
        DoCmd.SetWarnings True
End Sub

如果我在PostgreSQL中执行类似“Insert into sometable(array_field)values(array['value1','value2','value3'])”的结果,它就可以正常工作。但在MS Access中,它显示:错误3075“execution time”在查询“array['value1','value2','value3']'中缺少运算符。
知道发生了什么吗?
提前谢谢!

最佳答案

DoCmd.RunSQL通过Access数据库引擎运行SQL字符串。其中[..]被解释为参数,因此错误消息。
您已打开到PostgreSQL数据库的数据库连接,但不使用它。
这可能和改变

DoCmd.RunSQL strsql & salida


db.Execute strsql & salida, dbSQLPassThrough

通过传递查询,SQL字符串直接传递到数据库。

10-01 19:20
查看更多