You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ADODB操作PostgreSQL记录集调用AddNew报错,求助排查原因

问题:ADODB连接PostgreSQL添加记录时报错

PostgreSQL端操作

用户创建了如下表:

create table test (description varchar) ;

ADODB连接与记录集操作

数据库连接代码

dim test_conn As ADODB.Connection
dim test_str As String

Set test_conn = New ADODB.Connection
If test_conn.State = 0 Then
    test_str = "PROVIDER=MSDASQL.1;DSN=PostgreSQL35W" _
             & ";DATABASE=database_name" _
             & ";SERVER=database_server" _
             & ";PORT=database_port" _
             & ";UID=user_name" _
             & ";PWD=user_pwd"
    test_conn.CursorLocation = adUseServer
    test_conn.Mode = adModeReadWrite
    test_conn.Open test_str
End If

打开记录集

Dim test As ADODB.Recordset

Set test = New ADODB.Recordset
test.Open "select * from test", test_conn, adOpenDynamic, adLockOptimistic, adCmdText

记录集支持性检查

检查结果显示记录集支持更新操作:

test.Supports(adAddNew) => True
test.Supports(adUpdate) => True
test.Supports(adDelete) => True

报错情况

执行添加记录操作时触发运行时错误:

test.AddNew "description", "test_descr"

错误信息:

Run-time error '-2147217887 (80040e21)':
Multiple-step operation generated errors. Check each status value.

解决办法

1. 为PostgreSQL表添加主键

ADODB的可更新记录集依赖表的主键来唯一标识记录,无主键时ODBC驱动无法正确处理插入/更新操作。修改表结构添加主键:

-- 推荐方式:新增自增主键字段
ALTER TABLE test ADD COLUMN id SERIAL PRIMARY KEY;

-- 特殊场景:若description字段值绝对唯一,可设为主键
ALTER TABLE test ADD PRIMARY KEY (description);

2. 明确varchar字段长度

创建表时指定varchar字段长度,避免驱动处理时出现类型匹配问题:

CREATE TABLE test (
    id SERIAL PRIMARY KEY,
    description VARCHAR(255)
);

3. 调整AddNew的使用方式

AddNew "字段名", "值"语法合法,但分开赋值后调用Update的方式更稳定,避免驱动解析参数出错:

test.AddNew
test("description") = "test_descr"
test.Update

4. 检查ODBC驱动配置

  • 确保DSN中使用的PostgreSQL ODBC驱动版本(PostgreSQL35W)与服务器版本兼容
  • 尝试直接使用PostgreSQL OLE DB Provider替代MSDASQL,连接字符串示例:
    test_str = "PROVIDER=PostgreSQL OLE DB Provider;" _
             & "DATA SOURCE=database_server;" _
             & "PORT=database_port;" _
             & "DATABASE=database_name;" _
             & "UID=user_name;" _
             & "PWD=user_pwd"
    

内容的提问来源于stack exchange,提问作者Edouard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:50:24