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

Access调用带IDENTITY列的SQL Server表删除数据时Error 3622问题

问题解决办法

一、Error 3622 错误的修复方案

该错误的核心原因是:操作带有IDENTITY列的SQL Server表时,DAO执行删除/修改操作必须显式指定dbSeeChanges选项来识别标识列的变更。具体修复步骤如下:

  1. 修改VBA执行代码
    在调用Execute方法时添加dbSeeChanges参数:

    .Execute dbSeeChanges
    

    完整执行代码段:

    With qryDelFamilia
        .Parameters(0) = lngIdFamiliaFormativa
        .Execute dbSeeChanges ' 新增dbSeeChanges选项
        
        If .RecordsAffected = 0 Then
            mVntMsg = "Ha sucedido un error al eliminar la familia formativa. No es posible proseguir."
            MsgBox mVntMsg, vbExclamation + vbOKOnly, "ERROR AL ELIMINAR"
            Set dbCurrDB = Nothing
            Exit Sub
        End If
    End With
    
  2. 优化Access删除查询定义(可选但推荐)
    原DELETE语句无需显式列出IDENTITY列,简化为更标准的写法:

    PARAMETERS [ID_FAMILIA_FORMATIVA] Long;
    DELETE FROM SEPE_FAMILIAS_FORMATIVAS
    WHERE SEPE_FAMILIAS_FORMATIVAS.ID_FAMILIA_FORMATIVA = [ID_FAMILIA_FORMATIVA];
    

二、传递查询的参数赋值方法

若要使用SQL Server传递查询实现单条记录删除,按以下步骤操作:

  1. 确认传递查询配置
    确保传递查询已正确关联SQL Server的ODBC数据源,查询语句保持你提供的版本:

    DECLARE @ID_FAMILIA_FORMATIVA Int
    BEGIN
        DELETE FROM EDIBON_ERP.Formativa.[SEPE_FAMILIAS_FORMATIVAS]
        WHERE EDIBON_ERP.[Formativa].[SEPE_FAMILIAS_FORMATIVAS].ID_FAMILIA_FORMATIVA = @ID_FAMILIA_FORMATIVA
    END
    
  2. VBA中为传递查询赋值并执行
    通过DAO.QueryDef操作传递查询时,直接通过参数名或索引赋值,同时仍需添加dbSeeChanges选项:

    Dim dbCurrDB As DAO.Database
    Dim qryDelFamilia As DAO.QueryDef
    Dim lngIdFamiliaFormativa As Long
    
    Set dbCurrDB = CurrentDb
    Set qryDelFamilia = dbCurrDB.QueryDefs("你的传递查询名称")
    
    With qryDelFamilia
        ' 按参数名赋值(可读性更高,推荐使用)
        .Parameters("@ID_FAMILIA_FORMATIVA") = lngIdFamiliaFormativa
        ' 或按索引赋值
        ' .Parameters(0) = lngIdFamiliaFormativa
        
        .Execute dbSeeChanges ' 必须添加此选项
        
        If .RecordsAffected = 0 Then
            mVntMsg = "Ha sucedido un error al eliminar la familia formativa. No es posible proseguir."
            MsgBox mVntMsg, vbExclamation + vbOKOnly, "ERROR AL ELIMINAR"
            Set dbCurrDB = Nothing
            Exit Sub
        End If
    End With
    
    ' 清理对象
    Set qryDelFamilia = Nothing
    Set dbCurrDB = Nothing
    

关键注意事项

  • dbSeeChanges是必选项:无论使用本地Access查询还是SQL Server传递查询,只要操作带IDENTITY列的SQL Server表,执行删除/更新/插入操作时都需要指定该选项。
  • 参数类型需兼容:确保VBA变量类型(Long)与SQL Server参数类型(Int)匹配,避免类型转换错误。

内容的提问来源于stack exchange,提问作者Maiol Salse Escudero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:39:25